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 标签
- 当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中
1.2 where 标签
- 在有查询条件时,可以自动添加上 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 片段 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配置文件中,
数据源分为三类:
- 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
映射器
- 指定包下的所有 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的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper