spring笔记-mybatis标签
typeHandlers标签
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用
类型处理器将获取的值以合适的方式转换成 Java 类型。
除去默认的转换器也可以自定义自己的转化器
开发步骤:
① 定义转换类继承类BaseTypeHandler
② 覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult
为查询时 mysql的字符串类型转换成 java的Type类型的方法
③ 在MyBatis核心配置文件中进行注册
④ 测试转换是否正确
public class DateTyHandler extends BaseTypeHandler<Date> {
//将java类型-> 数据库需要的类型
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
long time = date.getTime();
preparedStatement.setLong(i,time);
}
//数据库需要的类型 -> java类型
/**
*
* @param resultSet 查询出的结果
* @param s 进行装换的字段名称
* @return
* @throws SQLException
*/
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
//将之前的long型数据转为date类型
long aLong = resultSet.getLong(s);
Date date = new Date(aLong);
return date;
}
//数据库需要的类型 -> java类型
@Override
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long aLong = resultSet.getLong(i);
Date date = new Date(aLong);
return date;
}
//数据库需要的类型 -> java类型
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
Date date = new Date(aLong);
return date;
}
}
注册类型处理器
<!-- 自定义注册类型处理器-->
<typeHandlers>
<typeHandler handler="com.mybatisDemo.demo.handler.DateTyHandler"/>
</typeHandlers>
plugins标签
MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即
可获得分页的相关数据
开发步骤:
① 导入通用PageHelper的坐标
② 在mybatis核心配置文件中配置PageHelper插件
③ 测试分页数据获取
- 导入通用PageHelper的坐标
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.1</version>
</dependency>
- 在mybatis核心配置文件中配置PageHelper插件
<!-- 分页助手插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 插件版本5之后的可以自动识别 <property name="dialect" value="mysql"/>-->
</plugin>
</plugins>
- 测试分页数据获取
public void test03() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession session = build.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
//设置分页参数
PageHelper.startPage(1,3);
List<User> users = mapper.findAll();
System.out.println(users);
session.close();
}
完整的xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<typeAliases >
<typeAlias type="com.mybatisDemo.demo.domain.User" alias="user"/>
</typeAliases>
<!-- 自定义注册类型处理器-->
<typeHandlers>
<typeHandler handler="com.mybatisDemo.demo.handler.DateTyHandler"/>
</typeHandlers>
<!-- 分页助手插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 插件版本5之后的可以自动识别 <property name="dialect" value="mysql"/>-->
</plugin>
</plugins>
<environments default="environments">
<environment id="environments">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>