Mybatis(四):自定义映射resultMap

这篇具有很好参考价值的文章主要介绍了Mybatis(四):自定义映射resultMap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

Emp.java

public class Emp {
    private Integer eid;
    private String empName;
    private Integer age;
    private String sex;
    private String email;
    ...
    }

数据库表:t_emp
Mybatis(四):自定义映射resultMap

一、处理字段和属性的映射关系

若字段名和实体类中的属性名不一致,但是字段名符合数据库的规则(使用_),实体类中的属性名符合Java的规则(使用驼峰),此时也可通过以下三种方式处理字段名和实体类中的属性的映射关系

⭕ 方式一:可以通过为字段起别名的方式,保证和实体类中的属性名保持一致

⭕ 方式二:可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,可以在查询表中数据时,自动将_类型的字段名转换为驼峰

例如:字段名user_name,设置了mapUnderscoreToCamelCase,此时字段名就会转换为userName

⭕ 方式三:在映射文件中设置redultMap

问题:

EmpMapper

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xml

<select id="getAllEmp" resultType="emp">
          select * from t_emp;         
</select>

ResultTest

/**
     * @description:查询所有用户的信息
     * @author: Hey
     * @date: 2022/7/3 23:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='null', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='null', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='null', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='null', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='null', age=45, sex='女', email='123@qq.com'}
         */
    }
    /**
    empName所有的值都为null:因为数据库表中的字段名为emp_name,而实体类中此字段名
    对应的属性名为empname,所以字段名emp_name和属性名empname不一致,导致映射文件
    里无法获取到传递过来的参数

方案一:使用别名

⭕ 代码演示:

EmpMapper

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xml

<select id="getAllEmp" resultType="emp">
         select eid,emp_name empname,age,sex,email from t_emp;      
</select>

ResultTest

/**
     * @description:查询所有用户的信息
     * @author: Hey
     * @date: 2022/7/3 23:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
         */
    }

方案二:在mybatis-config.xml中设置mapUnderscoreToCamelCase

⭕ 代码演示:

<!--设置MyBatis的全局配置-->
    <settings>
        <!--将_自动映射为驼峰,emp_name:empName-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

EmpMapper

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xml

<select id="getAllEmp" resultType="emp">
          select * from t_emp;         
</select>

ResultTest

/**
     * @description:查询所有用户的信息
     * @author: Hey
     * @date: 2022/7/3 23:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
         */
    }

方案三:在映射文件中设置redultMap

resultMap:设置自定义映射关系

  1. id:唯一标识,不能重复
  2. type:设置映射关系中的实体类类型
  3. 子标签:
    3.1 id:设置主键的映射关系
    3.2 result:设置普通字段的映射关系
    3.3 属性:
    property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
    column:设置映射关系中的字段名,必须是sql语句查询出的字段名

⭕ 代码演示:

EmpMapper.java

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xm

<resultMap id="empTest" type="Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
    </resultMap>

    <select id="getAllEmp" resultMap="empTest">
          select * from t_emp;

    </select>

ResultTest文章来源地址https://www.toymoban.com/news/detail-401606.html

@Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
         */
    }

到了这里,关于Mybatis(四):自定义映射resultMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • MyBatis注解开发---实现自定义映射关系和关联查询

    目录 相关导读 一、使用注解实现自定义映射关系 1. 编写注解方法 2. 编写测试方法

    2023年04月09日
    浏览(8)
  • day40-Mybatis(resultMap拓展)

    day40-Mybatis(resultMap拓展)

    1.2.3 1.数据库字段和javabean实体类属性不一致时 解决方案1:将sql语句中给予别名(别名同javabean中实体类保持一致) 解决方案2:使用resultMap 2.两表关联(用户表和角色表关联查询) 3.association association : (1)复杂的类型关联,一对一 (2)内部嵌套 (3)映射一个嵌套Javab

    2024年02月16日
    浏览(9)
  • MyBatis中的ResultMap有什么作用

    MyBatis中的ResultMap有什么作用

    MyBatis是一款广泛使用的Java持久层框架,它简化了数据库访问和数据映射的工作。在MyBatis中,ResultMap是一个强大的工具,用于将数据库查询结果映射到Java对象上。本文将深入探讨MyBatis中的ResultMap,解释它的作用以及如何使用它来提高数据访问的效率和可维护性。 在开始之前

    2024年02月07日
    浏览(7)
  • mybatis xml配置使用方式,resultMap使用
  • MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍

    MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍

    前面我们学习了如何使用Mybatis实现简单的增删改查。今天我们来学习如何使用动态语句来根据不同的条件生成不同的SQL语句。这在实际开发中非常有用,因为通常查询条件是多样化的,需要根据实际情况来拼接SQL语句,那什么是MyBatis动态语句呢,看下面详细简介 MyBatis动态语

    2024年02月11日
    浏览(9)
  • MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询

    MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 com.github.dreamyoung mprelation 0.0.3.2-RELEASE 注解工具使用优缺点: 优点: 使用简单,通过在实体类上添加@OneToOne / @OneToMany / @ManyToOne / @ManyToM

    2024年01月20日
    浏览(10)
  • 【c语言】详解c语言#预处理期过程 | 宏定义前言

    【c语言】详解c语言#预处理期过程 | 宏定义前言

    c语言系列专栏: c语言之路重点知识整合   创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 代码编译到执

    2024年02月01日
    浏览(9)
  • Mybatis/Mybatis-Plus驼峰式命名映射

    目录 一、mybatis驼峰式命名 二、mybatisPlus默认开启驼峰命名映射 方法一: 使用前提:数据库表设计按照规范“字段名中各单词使用下划线\\\"_\\\"划分”; 使用好处:省去mapper.xml文件中繁琐编写表字段列表与表实体类属性的映射关系,即resultMap。 示例: 方法二: mybatis-config.xml文

    2024年02月14日
    浏览(34)
  • MyBatis输出映射

    resultType: 执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。如果返回的是集合,设置的是集合元素的类型,而不是集合本身。resultType 和 resultMap,不能同时使用。 案例:返回球队的总记录数 TeamMapper接口添加如下内容: TeamMapper.xml配置文件中添加如下: 测试

    2024年04月13日
    浏览(5)
  • Mybatis中的关系映射

    目录 前言 1.一对一的映射关系 1.1 创建模型类和Vo类  1.2 配置当前模型类的mapper.xml 1.3 开始测试 2.一对多的映射关系 2.1 创建模型类和Vo类 2.2 配置当前模型类的mapper.xml 2.3 开始测试 3.多对多的映射关系 总结  注意点:  一对一映射(One-to-One Mapping) : 一对一关系指的是两个

    2024年02月09日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包