从JDBC连接池到Mybatis(Mybatis进阶篇三——核心配置文件)

七: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删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值