typeHandlers标签
自定义一个类型转换器 plugins标签
相关的API
typeHandlers标签无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器(截取部分)。
自定义一个类型转换器你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。
需求:一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成java的Date,即java的Date与数据库的varchar毫秒值之间转换。
步骤:
① 定义转换类继承类baseTypeHandler
② 覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时 mysql的字符串类型转换成 java的Type类型的方法
③ 在MyBatis核心配置文件中进行注册
④ 测试转换是否正确
重写4个转换方法
public class DateTypeHandler extends baseTypeHandler{ //将java类型转换为数据库类型 @Override public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException { long time = parameter.getTime(); ps.setLong(i,time); } //将数据库里面的类型转换为java类型 //String参数 表中要转换的字段的名称 //ResultSet 查询数据结果集 @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { //获取结果集中需要的数据(long)转换成Date类型 返回 long aLong = rs.getLong(columnName); Date date = new Date(aLong); return date; } @Override public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException { long aLong = rs.getLong(columnIndex); Date date = new Date(aLong); return date; } @Override public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { long aLong = cs.getLong(columnIndex); Date date = new Date(aLong); return date; } }
核心配置文件中注册
测试代码段
@Test
public void test2() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findById(12);
System.out.println("user表里面的birthday:"+user.getBirthday());
sqlSession.commit();
sqlSession.close();
}
结果
plugins标签
MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
开发步骤:
① 导入通用PageHelper的坐标
② 在mybatis核心配置文件中配置PageHelper插件
③ 测试分页数据获取
导入分页插件的坐标
com.github.pagehelper pagehelper 5.3.0 com.github.jsqlparser jsqlparser 4.2
配置核心文件的plugins
测试代码
@Test
public void test3() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//设置分页参数 当前页和每页要显示的参数
PageHelper.startPage(2,3);
List userList = mapper.findAll();
for (User user:userList) {
System.out.println(user);
}
System.out.println(userList);
sqlSession.commit();
sqlSession.close();
}
运行结果(获取第二页数据)
相关的API
测试相关的函数
//获取当前页分页的相关参数
PageInfo info = new PageInfo(userList);
System.out.println("当前页:"+info.getPageNum());
System.out.println("每页显示条数:"+info.getSize());
System.out.println("总条数:"+info.getTotal());
System.out.println("总页数:"+info.getPages());
System.out.println("上一页:"+info.getPrePage());
System.out.println("下一页:"+info.getNextPage());
System.out.println("是否是第一页:"+info.isIsFirstPage());
System.out.println("是否是最后一页:"+info.isIsLastPage());
运行结果



