Mybatis核心配置文件中的常用标签

目录

Mybatis核心配置文件常用标签

1、 typeHandlers标签

开发步骤:

运行时发现 xxx  cannot be cast to xxx 

2、plugins标签

分页助手PageHelper

开发步骤:

 获取分页相关参数测试

 知识小结之Mybatis核心配置文件标签


Mybatis核心配置文件常用标签

 无论是Mybatis在预处理语句(PreparedStatement)中设置一个参数是,还是从结果集中取出一个值式都会用类型处理器将获取的值以合适的方式转换成java类型,下表描述一些默认的类型处理器(部分)

1、 typeHandlers标签

可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。
具体做法为:实现org.apache.ibatis.type.TypeHandler接口,或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler,然后可以选择性地将它映射到一个JDBC类型。
例如需求:一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成java的Date,即java的Date与数据库的varchar毫秒值之间转换

开发步骤:

  • ①定义转换类继承类BaseTypeHandler<T>(这个泛型就是要转化的java类型)
  •  ②覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方getNullableResul为查询时mysql的字符串类型转换成java的Type类型的方法
  • ③在MyBatis核心配置文件中进行注册
  • ④ 测试转换是否正确

①定义BaseTypeHandler类下和覆盖四个没实现的方法



public class DateHandler  extends BaseTypeHandler<Date> {
   //将java类型转换成数据库需要的类型
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
        long time = date.getTime();
        preparedStatement.setLong(i,time);

    }

    //将数据库中的类型转换成java类型
    //String参数 要转换的字段名称
    //ResultSet  查询出的结果集
    @Override
    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;
    }
}

UserMapper接口下

package com_mybatis_config.mapper;


import com_mybatis_config.pojo.User;

public interface UserMapper {
public void save(User user);

}

user类下一些

package com_mybatis_config.pojo;


import java.util.Date;

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;
}
//和一些getset方法toString

MybatisTest类下

public class MybatisTest {
    @Test
    public void test1() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = sqlSessionFactory.openSession(true);

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    //创建user
    User user=new User();
    user.setBirthday(new Date());
    user.setPassword("kckc");
    user.setUsername("ssm");



    //执行操作
    mapper.save(user);
    sqlSession.close();

}
}

UserMapper_config.xml下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com_mybatis_config.mapper.UserMapper">

<insert id="save" parameterType="user">
    insert into user values(#{id},#{username},#{password},#{birthday})

</insert>



</mapper>

 sqlMapCongif中加上

运行结果

运行时发现 xxx  cannot be cast to xxx 

之前在弄的时候因为省时间,将建包代替了建模块,重复利用了之前的配置导致的,这里我检查了好久才发现实在sqlMapConfig.xml中起别名的时候,将之前的包名字重复用了,所以报出不能强行转换

 改回来就正常显示了

 查询出来取出来可以正常显示

通过在接口类中定义接口,然后在UserMapper_config.xml中进行配置

    <select id="findById" parameterType="int" resultType="user">
        select *from user where id=#{id}
    </select>
    @Test
    public void test2() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        User byId = mapper.findById(5);
        System.out.println("id为5的生日是"+byId.getBirthday());

        sqlSession.close();

    }

 运行结果

2、plugins标签

分页助手PageHelper

MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可过得分页的相关数据

开发步骤:

①导入通用PageHelper的坐标

②在mybatis核心配置文件中配置PageHelper插件

③测试分页数据获取

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

②在mysql的核心配置文件中配置PageHelper插件(这里为sqlMapConfig.xml)

    配置分页助手插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

测试

    @Test
    public void test3() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //设置分页相关参数 当前页+每页显示的条数
        PageHelper.startPage(1, 3);
        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        
        //执行操作
        sqlSession.close();
    }

 获取分页相关参数测试



        //设置分页相关参数 当前页+每页显示的条数
        PageHelper.startPage(1, 3);
        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        //获得与分页相关的参数
        PageInfo<User> pageInfo =new PageInfo<User>(userList);
        System.out.println("当前页:"+pageInfo.getPageNum());
        System.out.println("上一页:"+pageInfo.getPrePage());
        System.out.println("下一页:"+pageInfo.getNextPage());
        System.out.println("每页显示条数:"+pageInfo.getPageSize());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("总页数:"+pageInfo.getPages());
        System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
        System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());

        //执行操作
        sqlSession.close();
    }


运行结果 

 知识小结之Mybatis核心配置文件标签

properties标签:该标签可以加载外部的properties文件

typeAliases标签:设置类型别名

environments标签:数据源环境配置标签 

typeHandlers标签:配置自定义类型处理器 

plugins标签:配置MyBatis的插件

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执久呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值