本文主要是介绍MyBatis 之七:Mybatis 的类型转换器和分页插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
类型转换器
在 MyBatis 框架中,类型转换器(Type Handler)是处理 Java 类型和 JDBC 类型之间转换的关键组件。它主要用于以下两个场景:
-
将Java对象设置到PreparedStatement参数:当执行SQL插入、更新或删除操作时,MyBatis需要将Java对象的属性值转换为JDBC能够识别的数据类型,并设置到PreparedStatement的相应参数位置。
-
例如,一个
String
类型的Java日期字符串需要通过DateTypeHandler
转换成数据库可以接受的java.sql.Date
格式。
-
-
从ResultSet获取数据并转换为Java对象:查询结果返回时,MyBatis从ResultSet读取数据,并根据映射配置将JDBC数据类型转换为相应的Java类型。
内置类型转换器和自定义类型转换器
自定义类型转换器实现方式:
- 实现 TypeHandler
- 继承 BaseTypeHandler
配置方式:
- 全局配置
- 局部配置
自定义类型转换器
- 实现 TypeHandler
- 继承 BaseTypeHandler
package com.wdzl.typehandler;import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** 性别类型转换* String 男 ---- JDBC : int* String -- int* 男 ---- 1* 女 ---- 2* 实现 实现接口** insert into book(name,author,price,com)values(?,?,?,?)* pst.setXXX(1,value)*/
public class SexTypeHanlder implements TypeHandler<String> {/**** @param preparedStatement* @param i 占位符位置* @param s 给占位符赋值的参数 “男”或女* @param jdbcType* @throws SQLException*/@Overridepublic void setParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {System.out.println(i+"=========setParameter======="+s);if("男".equals(s)){preparedStatement.setInt(i,1);}else if("女".equals(s)){preparedStatement.setInt(i,2);}}/*** select name,price form book* * rst.getString("price")* * @param resultSet* @param s 列名* @return* @throws SQLException*/@Overridepublic String getResult(ResultSet resultSet, String s) throws SQLException {int sex = resultSet.getInt(s);if(sex == 1){return "男";}return "女";}/*** rst.getString(2)* @param resultSet* @param i 位置* @return* @throws SQLException*/@Overridepublic String getResult(ResultSet resultSet, int i) throws SQLException {return null;}@Overridepublic String getResult(CallableStatement callableStatement, int i) throws SQLException {return null;}
}
局部配置
在映射文件中,配置映射
插入转换:
<insert id="save" parameterType="author">insert into author(name,gender,birtday)values(#{name},#{gender,typeHandler=com.wdzl.typehandler.GenderTypeHander},#{birthday}) </insert>
查询转换:
<resultMap id="authorMap" type="author"><result column="gender" property="gender" typeHandler="com.wdzl.typehandler.SexTypeHanlder"/><result column="birtday" property="birthday"/></resultMap><select id="queryAll" resultMap="authorMap">select name,gender,birtday from author</select>
全局配置
配置文件中添加自定义配置
<!--全局类型转换器通过 javaType和jdbcType两者来匹配的。 --> <typeHandlers><typeHandler handler="com.wdzl.typehandler.SexTypeHanlder" jdbcType="INTEGER" javaType="String"></typeHandler> </typeHandlers>
映射文件中
<!--1. 查询:javaType="String" jdbcType="INTEGER"--><result column="gender" property="gender" javaType="String" jdbcType="INTEGER" />```<!--2. 更新:update、insert--><insert id="save" parameterType="author">insert into author(name,gender,birtday)values(#{name},#{gender,javaType=String,jdbcType=INTEGER},#{birthday})</insert>
分页插件
回顾自定义分页组件:
- 当前页号-----前端传过来(已知条件)
- 总记录数-----查出来,统计出来(通过SQL查询统计出来)
- 每页显示记录数------(自定义设置)
- 总页数-------(计算出来的,通过【总记录数/每页显示记录数】)
- 当前页显示记录------截取提取出来记录
-
添加依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version> </dependency>
-
配置文件中,添加插件
<!--分页插件-->
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
-
使用
在查询之前,设置起始页和每页记录数即可
public void test(){int pageno = 2;int countPerPage = 3; //每页显示记录数Page page = PageHelper.startPage(2,3);// select count(bookname) from page.setCountColumn("bookname"); SqlSession sqlSession = MyBatisUtil.getSession();IBookDao mapper = sqlSession.getMapper(IBookDao.class);List<Book> list = mapper.queryAll();for (Book book : list) {System.out.println(book);}System.out.println(page.getPageNum()); //当前页号System.out.println(page.getPages()); // 总页数System.out.println(page.getPageSize()); // System.out.println(page.getTotal()); // 总记录数System.out.println(page.getResult()); //当前页记录列表MyBatisUtil.closeSession(sqlSession);}
这篇关于MyBatis 之七:Mybatis 的类型转换器和分页插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!