一、TypeHandlers
你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler,然后可以选择性地将它映射到一个 JDBC 类型。
例如需求:一个 Java 中的 Date 数据类型,我想将之存到数据库的时候存成一个 1970 年至今的毫秒数,取出来时转换成 java 的 Date,即 java 的 Date 与数据库的 varchar 毫秒值之间转换。
开发步骤:
① 定义转换类继承类 BaseTypeHandler<T>
② 覆盖 4 个未实现的方法,其中 setNonNullParameter 为 java 程序设置数据到数据库的回调方法,getNullableResult 为查询时 mysql 的字符串类型转换成 java 的 Type 类型的方法
③ 在 MyBatis 核心配置文件中进行注册
④ 测试转换是否正确
sqlMapConfig.xml文件 <!-- 注册类型处理器--> <typeHandlers> <typeHandler handler="com.itheima.handler.DateTypeHandler"></typeHandler> </typeHandlers>public interface UserMapper { public User save(User user); }package com.itheima.handler; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; import java.util.Date; public class DateTypeHandler extends BaseTypeHandler<Date> { // 将java类型转换成 数据库需要 的类型 @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException { preparedStatement.setLong(i, date.getTime()); } //将数据库中的某些数据转换成 java类型 @Override//resultset是查询结果集,string是要转换的字段的名称 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; } }public class MyBatisTest { @Test public void test1()throws Exception{ //获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //2.获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //3.获得sqlSession回话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setUsername("admin"); user.setPassword("123456"); user.setBirthday(new Date()); //6.释放资源 sqlSession.close(); } }二、plugins分页标签
mybatis可以使用第三方插件来对功能进行拓展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
开发步骤:
1. 导入使用PageHelper
2. 在mybatis核心配置文件中配置PageHelper插件
3. 测试分页数据获取
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>4.0</version> </dependency>usermapper.xml <mapper namespace="com.itheima.Mapper.UserMapper"> <select id="findAll" resultType="com.itheima.domain.User"> select * from userlist </select>sqlMapConfig.xml <!-- 配置分页助手插件--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins>@Test public void test2()throws Exception{ //获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //2.获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //3.获得sqlSession回话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //设置分页相关参数,当前页+每页显示的条数 PageHelper.startPage(1,3); List<User> userList = userMapper.findAll(); for (User user : userList) { System.out.println("user = " + user); } //6.释放资源 sqlSession.close(); }public interface UserMapper { public User save(User user); // public User findById(Integer id); public List<User> findAll(); }三、其他配置文件见:Mybatis快速入门-CSDN博客