title: MyBatis的学习笔记
date: 2020-09-05 17:49:19
tags:

1.Mybatis的Dao层实现

1.1传统的开发方式

1.1.1编写UserDao接口

1
2
3
`public interface UserDao {`
`List<User> findAll() throws IOException;`
`}`

1.1.1编写UserDaoImpl实现类

1
2
3
4
5
6
7
8
9
10
11
12
`public class UserDaoImpl implements UserDao {`
`public List<User> findAll() throws IOException {`
`InputStream resourceAsStream =`
`Resources.getResourceAsStream("SqlMapConfig.xml");`
`SqlSessionFactory sqlSessionFactory = new`
`SqlSessionFactoryBuilder().build(resourceAsStream);`
`SqlSession sqlSession = sqlSessionFactory.openSession();`
`List<User> userList = sqlSession.selectList("userMapper.findAll");`
`sqlSession.close();`
`return userList;`
`}`
`}`

1.1.3测试传统方式

1
2
3
4
5
6
`@Test`
`public void testTraditionDao() throws IOException {`
`UserDao userDao = new UserDaoImpl();`
`List<User> all = userDao.findAll();`
`System.out.println(all);`
`}`

1.2代理开发方式

1.2.1代理开发方式介绍

采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。

Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

Mapper接口开发需要遵循以下规范:

1) Mapper.xml文件中的namespace与mapper接口的全限定名相同

2) Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同

4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

2.MyBatis映射文件

2.1动态的sql语句

2.1.1标签

我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。

2.1.2标签

循环执行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。

foreach标签的属性含义如下:

标签用于遍历集合,它的属性:

•collection:代表要遍历的集合元素,注意编写时不要写#{}

•open:代表语句的开始部分

•close:代表结束部分

•item:代表遍历集合的每个元素,生成的变量名

•sperator:代表分隔符

2.2sql片段的抽取

sql中有重复的sql抽取出来,方便维护,减少代码的冗余性。。使用include标签即可。

3.plugins标签

MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据

开发步骤:

①导入通用PageHelper的坐标

②在mybatis核心配置文件中配置PageHelper插件

③测试分页数据获取

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 分页助手 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.2</version>
</dependency>


2.在mybatis核心配置文件中配置PageHelper插件

1
2
3
4
5
<!-- 注意:分页助手的插件  配置在通用馆mapper之前 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">

</plugin>

注意:当使用pageHelper版本为5.0以上的时候,配置文件中不能使用以下配置:

1
2
3
4
5
6
<!-- 注意:分页助手的插件  配置在通用馆mapper之前 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 指定方言 -->
<property name="dialect" value="mysql"/>
</plugin>

因为MyBatis实现插件原理是底层通过intercepto接口,而pageHelper5.0以上版本是通过PageInterceptor类继承的intercepto

pageHelper

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 1.Mybatis的Dao层实现
    1. 1.1. 1.1传统的开发方式
      1. 1.1.1. 1.2代理开发方式
    2. 1.2. 2.MyBatis映射文件
    3. 1.3. 2.2sql片段的抽取
      1. 1.3.1. 3.plugins标签
  2. 2. 注意:当使用pageHelper版本为5.0以上的时候,配置文件中不能使用以下配置:
,