MyBatis 02

Posted FremontUltimate

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 02相关的知识,希望对你有一定的参考价值。

MyBatis02

1.动态SQL

动态sql: 通过 MyBatis 提供的各种标签对条件作出判断以实现动态拼接 SQL 语句

主要是where部分

OGNL 表达式

在 mapper 的动态 SQL 中若出现大于号(>)、小于号(<)、大于等于号(>=),小于等于号(<=)等符号,最好将其转换为实体符号。否则,XML 可能会出现解析出错问题。

特别是对于小于号(<),在 XML 中是绝不能出现的。否则解析 mapper 文件会出错。

符号 含义 实体符号
< 小于 & lt;
> 大于 & gt;
>= 大于等于 & gt;=
<= 小于等于 & lt;=

1.1 if 标签

sql 语句的部分

  • 当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中

1.2 where 标签

其他动态 sql

  • 在有查询条件时,可以自动添加上 where 子句
  • 没有查询条件时,不会添加 where 子句
  • 第一个标签中的 SQL 片段,可以不包含 and
  • 其它中 SQL 片段的 and,必须写上

1.3 foreach 标签

#{item 的值}

  • 实现对于数组与集合的遍历
  • collection:表示接口中的方法参数的类型, 数组使用array , list集合使用list
<!--List类型:也可以是对象类型
List<Student> selectForList1(List<Integer> idList);
List<Student> selectForList2(List<Student> idList);
-->
<select id="selectForList1" resultType="com.fremont.domain.Student">
 	select id,name,email,age from student
 	<if test="list !=null and list.size > 0 ">
 		where id in
 		<foreach collection="list" open="(" close=")" 
			item="stuid" separator=",">
 				#{stuid}
 		</foreach>
 	</if>
</select>
<select id="selectForList2" resultType="com.fremont.domain.Student">
 	select id,name,email,age from student
 	<if test="list !=null and list.size > 0 ">
 		where id in
 		<foreach collection="list" open="(" close=")" 
			item="stu" separator=",">
 				#{stu.id}
 		</foreach>
 	</if>
</select>

1.4 代码片段

标签:定义 SQL 片段,以便其它 SQL 标签复用;可以定义 SQL 语句中的任何部分

子标签:可以放在动态 SQL 的任何位置

<!--创建 sql 片段 id:片段的自定义名称--> 
<sql id="studentSql">
 	select id,name,email,age from student
</sql>
<select id="selectSqlFragment" resultType="com.fremont.domain.Student">
 	<!-- 引用 sql 片段 -->
 	<include refid="studentSql"/>
 	<if test="list !=null and list.size > 0 ">
 		where id in
 		<foreach collection="list" open="(" close=")" item="stuobject" separator=",">
 			#{stuobject.id}
 		</foreach>
 	</if>
</select>

2.MyBatis 配置文件

2.1 主配置文件

mybatis.xml 是主配置文件

  • xml 文件
  • 根元素

2.2 dataSource

mybatis.xml配置文件中,实现 Mybatis 中连接池的配置

数据源分为三类:

  • UNPOOLED 不使用连接池的数据源
  • POOLED 使用连接池的数据源
  • JNDI 使用 JNDI 实现的数据源

UNPOOLED ,POOLED 数据源实现了 javax.sq.DataSource 接口,创建实例

从 JNDI 服务上查找 DataSource 实例,返回使用

在 MyBatis.xml 主配置文件,配置 dataSource:

<dataSource type="POOLED">
 	<!--连接数据库的四个要素-->
 	<property name="driver" value="com.mysql.jdbc.Driver"/>
 	<property name="url"value="jdbc:mysql://localhost:3306/ssm?charset=utf-8"/>
 	<property name="username" value="root"/>
 	<property name="password" value="123456"/>
</dataSource>

数据库的属性配置文件:

单独的文件中,和mybatis主配置文件分开

resources目录中定义一个属性配置文件, xxxx.properties

  • 定义数据,格式是 key=value
  • 一般使用 . 做多级目录的

mybatis的主配置文件,使用 指定文件的位置

  • 在需要使用值的地方, ${key}
  • 从类路径根开始找文件

2.3 事务

Mybatis 框架是对 JDBC 的封装

Mybatis 框架的事务控制方式,本身也是用 JDBC 的 Connection对象的 commit(), rollback()

手动提交

指定 MyBatis所使用的事务管理器:JDBC 与 MANAGED

  • JDBC:通过 Connection 的 commit()方法提交,通过 rollback()方法回滚;默认手动提交
  • MANAGED:容器来管理事务

自动提交

factory 的 openSession() 分为有参数和无参数

有参数为 true,使用自动提交

2.4 typeAliases

Mybatis 支持默认别名

2.5 mappers

映射器

相对于类路径的资源,从 classpath 路径查找文件

  • 指定包下的所有 Dao 接口
  • Dao 接口名称和 mapper 映射文件名称相同,且在同一个目录中

3.扩展

3.1 PageHelper

maven 坐标

<dependency>
 	<groupId>com.github.pagehelper</groupId>
 	<artifactId>pagehelper</artifactId>
 	<version>5.1.10</version>
</dependency>

加入 plugin 配置之前加入

<plugins>
 	<plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>

PageHelper 对象

查询语句之前调用 PageHelper.startPage(第x页,y条记录)、PageHelper.offsetPage

紧跟在这个方法后的第一个 MyBatis 查询方法会被进行分页

以上是关于MyBatis 02的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习(39):动态sql片段

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

[linux][c/c++]代码片段02