栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis核心配置文件深入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis核心配置文件深入

文章目录

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());

运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号