04-核心配置文件深入

一.typeHandler(类型处理器)

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。Mybatis默认为我们实现了许多TypeHandler, 当我们没有配置指定TypeHandler时,Mybatis会根据参数或者返回结果的不同,默认为我们选择合适的TypeHandler处理。

将数据库的类型以合适的方式与java的类型适配

例如IntegerTypeHandler对应java.lang.Integer,int

对应转换数据库兼容的NUMERIC INTEGER

将Data转换为long类型例子

1.编写类继承BaseTypeHandler类,重写父类方法

or 实现org.apache.ibatis.type.TypeHandler接口

public class DateTypeHandler extends BaseTypeHandler<Date> {

    //将java类型转换为成数据库需要的类型 i是参数的位置
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Date date, JdbcType jdbcType) throws SQLException {
        long time = date.getTime();
        ps.setLong(i,time);
    }

    //将数据库中的某些数据的类型转换成java类型
    //String参数 要转换的字段名称

    /**
     *
     * @param rs 查询出的结果集
     * @param columnName 要转换的字段的名称
     *
     */
    @Override
    public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {
        //获得结果集中需要的数据(long)转换成data类型 返回
        long aLong = rs.getLong(columnName);
        Date date=new Date(aLong);
        return date;
    }

    //将数据库中的某些数据的类型转换成java类型
    @Override
    public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        //获得结果集中需要的数据(long)转换成data类型 返回
        long aLong = rs.getLong(columnIndex);
        Date date=new Date(aLong);
        return date;
    }
    //将数据库中的某些数据的类型转换成java类型
    @Override
    public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        long aLong = cs.getLong(columnIndex);
        Date date=new Date(aLong);
        return date;
    }
}

2.核心配置文件(有顺序注意顺序)

    <!--自定义注册类型处理器-->
    <typeHandlers>
        <typeHandler handler="com.itheima.handler.DateTypeHandler"/>
    </typeHandlers>

3.测试类

    @Test
    public void test1() throws IOException {
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作 参数:namespace + id
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user=new User();
        user.setUsername("zhaoliu");
        user.setPassword("123");
        user.setBirthday(new Date());

        mapper.save(user);
        sqlSession.commit();
        //释放资源
        sqlSession.close();
    }

    @Test
    public void test2() throws IOException {
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作 参数:namespace + id
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User u = mapper.findById(9);
        System.out.println(u.getBirthday());

        //释放资源
        sqlSession.close();
    }

二.plugins标签(分页插件例子)

1.导入通用PageHelper的坐标

    <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>

2.在mybatis核心配置文件中配置PageHelper插件

    <!--配置分页助手插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!--指定方言 例如oracle是rownum mysql是Limit-->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

3.测试分页数据获取

    @Test
    public void test3() throws IOException {
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作 参数:namespace + id
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 设置分页相关参数 当前页 每页显示的条数
        PageHelper.startPage(1,3);//第一页,每页三条

        List<User> all = mapper.findAll();
        for (User user : all) {
            System.out.println(user);
        }

        //获得与分页相关的参数
        PageInfo<User> pageInfo=new PageInfo<User>(all);
        System.out.println("当前页:"+pageInfo.getPageNum());
        System.out.println("每页显示条数:"+pageInfo.getPageSize());
        System.out.println("总条数:"+pageInfo.getSize());
        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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值