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

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

    1. public class DateHandler extends BaseTypeHandler {
    2. //将java类型转换成数据库需要的类型
    3. public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
    4. long time = date.getTime();
    5. preparedStatement.setLong(i,time);
    6. }
    7. //将数据库中的类型转换成java类型
    8. //String参数 要转换的字段名称
    9. //ResultSet 查询出的结果集
    10. @Override
    11. public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
    12. //获得结果集中需要的数据(long)转换成Date类型 返回
    13. long aLong = resultSet.getLong(s);
    14. Date date =new Date(aLong);
    15. return date;
    16. }
    17. //将数据库中的类型转换成java类型
    18. @Override
    19. public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
    20. long aLong = resultSet.getLong(i);
    21. Date date =new Date(aLong);
    22. return date;
    23. }
    24. //将数据库中的类型转换成java类型
    25. @Override
    26. public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
    27. long aLong = callableStatement.getLong(i);
    28. Date date =new Date(aLong);
    29. return date;
    30. }
    31. }

    UserMapper接口下

    1. package com_mybatis_config.mapper;
    2. import com_mybatis_config.pojo.User;
    3. public interface UserMapper {
    4. public void save(User user);
    5. }

    user类下一些

    1. package com_mybatis_config.pojo;
    2. import java.util.Date;
    3. public class User {
    4. private int id;
    5. private String username;
    6. private String password;
    7. private Date birthday;
    8. }
    9. //和一些getset方法toString

    MybatisTest类下

    1. public class MybatisTest {
    2. @Test
    3. public void test1() throws IOException {
    4. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    5. SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
    6. SqlSession sqlSession = sqlSessionFactory.openSession(true);
    7. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    8. //创建user
    9. User user=new User();
    10. user.setBirthday(new Date());
    11. user.setPassword("kckc");
    12. user.setUsername("ssm");
    13. //执行操作
    14. mapper.save(user);
    15. sqlSession.close();
    16. }
    17. }

    UserMapper_config.xml下

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com_mybatis_config.mapper.UserMapper">
    4. <insert id="save" parameterType="user">
    5. insert into user values(#{id},#{username},#{password},#{birthday})
    6. insert>
    7. mapper>

     sqlMapCongif中加上

    运行结果

    运行时发现 xxx  cannot be cast to xxx 

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

     改回来就正常显示了

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

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

    1. <select id="findById" parameterType="int" resultType="user">
    2. select *from user where id=#{id}
    3. select>
    1. @Test
    2. public void test2() throws IOException {
    3. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    4. SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
    5. SqlSession sqlSession = sqlSessionFactory.openSession(true);
    6. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    7. User byId = mapper.findById(5);
    8. System.out.println("id为5的生日是"+byId.getBirthday());
    9. sqlSession.close();
    10. }

     运行结果

    2、plugins标签

    分页助手PageHelper

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

    开发步骤:

    ①导入通用PageHelper的坐标

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

    ③测试分页数据获取

    导入PageHelper的坐标

    1. dependency>
    2. <groupId>com.github.pagehelpergroupId>
    3. <artifactId>pagehelperartifactId>
    4. <version>3.7.5version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.github.jsqlparsergroupId>
    8. <artifactId>jsqlparserartifactId>
    9. <version>0.9.1version>
    10. dependency>

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

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

    测试

    1. @Test
    2. public void test3() throws IOException {
    3. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    4. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    5. SqlSession sqlSession = sqlSessionFactory.openSession(true);
    6. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    7. //设置分页相关参数 当前页+每页显示的条数
    8. PageHelper.startPage(1, 3);
    9. List userList = mapper.findAll();
    10. for (User user : userList) {
    11. System.out.println(user);
    12. }
    13. //执行操作
    14. sqlSession.close();
    15. }

     获取分页相关参数测试

    1. //设置分页相关参数 当前页+每页显示的条数
    2. PageHelper.startPage(1, 3);
    3. List userList = mapper.findAll();
    4. for (User user : userList) {
    5. System.out.println(user);
    6. }
    7. //获得与分页相关的参数
    8. PageInfo pageInfo =new PageInfo(userList);
    9. System.out.println("当前页:"+pageInfo.getPageNum());
    10. System.out.println("上一页:"+pageInfo.getPrePage());
    11. System.out.println("下一页:"+pageInfo.getNextPage());
    12. System.out.println("每页显示条数:"+pageInfo.getPageSize());
    13. System.out.println("总条数:"+pageInfo.getTotal());
    14. System.out.println("总页数:"+pageInfo.getPages());
    15. System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
    16. System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());
    17. //执行操作
    18. sqlSession.close();
    19. }

    运行结果 

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

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

    typeAliases标签:设置类型别名

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

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

    plugins标签:配置MyBatis的插件

  • 相关阅读:
    Typescript:(一)基本使用
    数据结构——排序
    高级性能测试工程师面试必问十大问题
    [bug] mysql 时间与本地不一致
    mysql限制用户登录失败次数,限制时间
    qt 复杂界面信号槽设计
    【SLAM】LVI-SAM解析——综述
    Windows工业三防平板全功能NFC近距离感应一维/二维扫描
    基于51单片机CO2二氧化碳气体浓度检测超限报警Proteus仿真
    密码学·常用网址
  • 原文地址:https://blog.csdn.net/weixin_60719453/article/details/126462357