MyBatis的Dao层实现
前言
经过上一篇笔记是不是对Mybatis有了大致的了解,本文继续介绍Mybatis更加深入的内容。一、传统实现模式
- 编写UserMapper接口
- 实现该接口
- service层
二、代理开发方式
Mapper接口开发方法只需要编写Mapper接口,MyBatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法
1、Mapper接口开发规范:
- Mapper.xml文件中的namespace与mapper接口的全限定名相同
- Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
2、编写Mapper接口
测试代理方式
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findById(1);
System.out.println(user);
sqlSession.close();
三、MyBatis映射文件深入
动态sql语句
1、where 标签
作用等同于sql语句中"where=",格式为:
<where>
条件
</where>
2、if 标签
主要是对字段进行判断,置于where标签内作为条件进行数据筛选,格式为:
<!--判断id是否有有效的值,若id值有效则将语句中的条件进行拼接-->
<if test="id != null and id != 0">
and id=#{id}
</if>
3、foreach标签
循环执行sql的拼接操作例如:select * from where id in (1,2,5)
<foreach collection="array / list" open="id in(" close=")" item="id" separator=",">
#{id}0
</foreach>
//collection:要循环执行的数组、列表
//item:判断项
4、sql标签
将重复sql片段抽取后进行引用,从而达到sql复用
//将select * from user提取出来
<sql id="selectUser">select * from user</sql>
//使用<include>标签进行引用
<include refid="selectUser"></include>
四、MyBatis核心配置文件深入
1、typeHandlers标签
用于自定义类型转换器
类型转换器:MyBatis在预处理语句中设置参数或从结果集中取值时,都会用类型处理器将获取的值以合适的方式转换成Java类型。
开发步骤:
- 定义转换类继承类BaseTypeHandler
- 覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时mysql的字符串类型转换成java的Type类型的方法
- 在MyBatis核心配置文件中进行注册
- 测试转换是否正确
2、plugins标签
MyBatis可以使用的三方插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
开发步骤:
1、导入通用PageHelper的坐标
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactid>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactid>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
2、在mybatis核心配置文件中配置PageHelper插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql">
</plugin>
</plugins>
3、测试分页数据获取
PageHelper.startPage(当前页,每页显示的条数);
获得与分页相关的参数:
PageInfo<User> pageInfo= new PageInfo<User>(userList);
获取当前页:pageInfo.getPageNum();
获取每页显示的条数:pageInfo.getPageSize();
获取总条数:pageInfo.getTotal();
获取总页数:pageInfo.getPages();
获取上一页:pageInfo.getPrePage();
获取下一页:pageInfo.getNextPage();
获取是否是第一页:pageInfo.isIsFirstPage();
获取是否是最后一页:pageInfo.isIsLastPage();
总结
以上就是今天的内容,多看多用才能熟记于心哦。