七:Mybatis的核心配置文件进阶
A:自定义类型处理器
B:配置外部插件:分页插件
分页插件MAVEN:(版本不一会导致报错)
<!-- 分页插件 -->
<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>
mybatis核心配置:
<!-- 注册自定义类型处理器 -->
<typeHandlers>
<typeHandler handler="com.mybatisss.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
<!-- 集成第三方插件;例:配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
Mapper映射XML
<!-- 测试自定义类型转换器,新增 -->
<insert id="save" parameterType="Item">
INSERT INTO tb_item VALUE (#{id},#{title},#{sellPoint},#{price},
#{num},#{barcode},#{image},#{cid},#{status},#{created},#{updated},#{testdated})
</insert>
<!--测试分页插件 -->
<select id="findAll" resultType="Item">
SELECT * FROM tb_item
</select>
Mapper接口:
public Integer save(Item item);
public List<Item> findAll();
自定义类型处理器:
package com.mybatisss.handler;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.logging.log4j.message.Message;
import java.sql.*;
@MappedTypes(Message.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class DateTypeHandler extends BaseTypeHandler<Date> {
//将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 l = rs.getLong(columnName);
Date date = new Date(l);
return date;
}
//将数据库中类型转换成java类型
@Override
public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
long l = rs.getLong(columnIndex);
Date date = new Date(l);
return date;
}
//将数据库中类型转换成java类型
@Override
public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
long l = cs.getLong(columnIndex);
Date date = new Date(l);
return date;
}
}
测试案例一:(自定义类型处理器)
package com.mybatisss.test;
import com.mybatisss.dao.ItemMapper;
import com.mybatisss.pojo.Item;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 自定义类型转换器
*/
public class ServiceDemo05 {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
ItemMapper mapper = sqlSession.getMapper(ItemMapper.class);
//虚拟Item对象
Item item = new Item();
item.setId(123L);
item.setTitle("测试");
item.setSellPoint("测试");
item.setPrice(new BigDecimal(100));
item.setNum(123);
item.setBarcode("测试");
item.setImage("测试");
item.setCid(123L);
item.setStatus(123);
item.setCreated(new Date());
item.setUpdated(new Date());
//自定义类型转换器测试字段
item.setTestdated(new Date());
//调用对应实现方法
Integer i = mapper.save(item);
//打印结果
System.out.println(i);
sqlSession.commit();
sqlSession.close();
}
}
测试案例二:(分页插件)
package com.mybatisss.test;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mybatisss.dao.ItemMapper;
import com.mybatisss.pojo.Item;
import com.sun.source.tree.IdentifierTree;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 自定义类型转换器
*/
public class ServiceDemo06 {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
ItemMapper mapper = sqlSession.getMapper(ItemMapper.class);
//设置分页相关参数:当前页,每页显示的条数
PageHelper.startPage(2,3);
List<Item> all = mapper.findAll();
for (Item item : all) {
System.out.println(item);
}
//分页获取参数参数
PageInfo<Item> pageInfo = new PageInfo<Item>(all);
System.out.println("当前页:" + pageInfo.getPageNum());
System.out.println("每页显示条数:" + pageInfo.getPageSize());
System.out.println("总条数:" + pageInfo.getTotal());
System.out.println("总页数:" + pageInfo.getPages());
System.out.println("上一页:" + pageInfo.getPrePage());
System.out.println("下一页:" + pageInfo.getNextPage());
System.out.println("是否是第一页:" + pageInfo.isIsFirstPage());
System.out.println("是否是最后一页:" + pageInfo.isIsLastPage());
sqlSession.close();
}
}
注:其他文件,如实体类,JDBC配置等可参考上一文
本文只是个人学习内容整理的笔记,如有侵权,即联系870013269@qq.com删除