首页 > 其他分享 >Mybatis学习日记-day4-ResultMap

Mybatis学习日记-day4-ResultMap

时间:2024-08-14 22:27:06浏览次数:13  
标签:name day4 数据库 ResultMap id User uage Mybatis public

一、学习目标

        在之前的学习博客里对数据进行增删改查的操作,都是基于数据库表的列名Java对象的属性名一致的情况下,但是,这个世界并不是这么美好。

        当数据库表的列名与Java对象的属性名不一致,或者数据类型需要特殊处理;此外,如果数据库中的某个列是枚举类型,并且需要将这个列的值映射到Java的枚举类型;,如果查询结果需要映射到一个包含多个属性、嵌套对象或集合的复杂Java对象中。这些情况就需要使用结果映射来定义它们之间的对应关系。

二、ResultMap

        在mybatis官方文档中提到,resultmap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。由此可见,resultmap在mybatis学习中的重要性。

        在官方文档中提到,ResultMap 的设计思想是:对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

        以之前的博客为例,数据库中的users表,与实体类user对应,其中列名与name,age等属性的命名也是一致的,然而如果出现列名与java实体类的属性名不一致的情况呢?        

        在之前的博客的情况下,我们进行一些改动

        数据库的设计

        

        实体类:

        

public class User {
    private int id;
    private String name;
    private int uage;

    public User() {
    }

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.uage = age;
    }

    public int getUid() {
        return id;
    }

    public void setUid(int uid) {
        this.id = uid;
    }

    public String getUname() {
        return name;
    }

    public void setUname(String uname) {
        this.name = uname;
    }

    public int getUage() {
        return uage;
    }
    public void setUage(int uage) {
        this.uage = uage;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + uage +
                '}';
    }
}

1.为列名指定别名 , 别名和java实体类的属性名一致 

   例子中,age为列名,uage为别名和实体类的属性名

<select id="selectUser" resultType="User">
    select id , name , age as uage from users where id = #{id}
</select>

2.使用结果集映射->ResultMap 

<resultMap id="UserMap" type="User">
        <id column="age" property="uage"/>
</resultMap>
<select id="selectUser" resultMap="UserMap">
        select * from users
 </select>

        

        其中,column是数据库表的列名 , property是对应实体类的属性名

        但是,在mybatis官方文档也提到,MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。 如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。 而 ResultMap 就是 MyBatis 对这个问题的答案。

3.测试

@Test
    public void selectUser() {
        
        // 通过MybatisUtils工具类获取SqlSession对象,SqlSession是MyBatis的核心接口,用于执行SQL语句
        SqlSession session = MybatisUtils.getSession();
        // 通过SqlSession的getMapper方法获取UserMapper接口的代理对象,该对象用于执行与User表相关的数据库操作
        UserMapper mapper = session.getMapper(UserMapper.class);
        // 调用UserMapper接口的selectUser方法,该方法应该返回User对象的列表
        List<User> users = mapper.selectUser();
        // 遍历返回的User对象列表
        for (User user : users) {
            // 打印每个User对象的信息到控制台
            System.out.println(user);
        }
        // 关闭SqlSession,释放数据库连接资源
        session.close();
    }

(预先写入了的数据)

       

标签:name,day4,数据库,ResultMap,id,User,uage,Mybatis,public
From: https://blog.csdn.net/2301_79789506/article/details/140701276

相关文章

  • Mybatis扩展
    Mybatis扩展1.批量扫描mapper在之前每创建一个mapper,就需要在mybatis-config.xml文件中,注册该mapper。<mappers>  <mapperresource="mapper/EmployeeMapper.xml"/></mappers>可以在mappers标签中使用package标签,进行包扫描<mappers>  <packagename="com.z......
  • Mybatis动态sql
    Mybatis动态sql在创建sql语句时,有时会遇到传入的参数为空的问题,也就是某些条件有时候不取值。这时就可以用动态sql来创建sql语句,不用自己拼接sql语句。1.if和where标签在sql语句条件外面包一层if标签,if标签的属性test可以进行判断,当判断为true后才会把标签内部的条件拼......
  • springboot+vue+mybatis计算机毕业设计汉服商城网站+PPT+论文+讲解+售后
    本系统为用户而设计制作“梦回汉唐”汉服商城网站,旨在实现“梦回汉唐”汉服商城网站智能化、现代化管理。本“梦回汉唐”汉服商城网站自动化系统的开发和研制的最终目的是将“梦回汉唐”汉服商城网站的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提......
  • MyBatis从入门到面试:超全
    MyBatis从入门到面试MyBatis启动!!!1.引入依赖<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version><!--版本号可以根据需要进行调整--></dependency>1.配置文件首先,我们需......
  • MyBatis基本流程
    MyBatis基本流程基本使用步骤准备数据CREATEDATABASE`mybatis-example`;​USE`mybatis-example`;​CREATETABLE`t_emp`(emp_idINTAUTO_INCREMENT,emp_nameCHAR(100),emp_salaryDOUBLE(10,5), PRIMARYKEY(emp_id));​INSERTINTO`t_emp`(emp_na......
  • Mybatis基本使用
    Mybatis基本使用1.日志输出在mybatis-config.xml中的settings标签配置mybatis的设置项<settings>  <settingname="logImpl"value="STDOUT_LOGGING"/></settings>设置日志的属性是logImpl,其候选值有SLF4J、LOG4J、LOG4J2、STDOUT_LOGGING、NOLOGGING等 2.......
  • 用了MyBatis-PLUS的项目 如何优雅的打印SQL
    说明在使用MyBatis-Plus作为ORM框架的时候,会发现默认的日志输出是下面这样的:在参数少并且SQL简单的情况下,这样的SQL我们能通过手动去替换占位符,来获取到真正执行的SQL。但是如果是比较复杂的SQL,或者查询参数比较多的话,一个个替换就比较费时费力了。我们可以通过实现com.baomid......
  • mybatis插件实现sql修改
    packagecom.xf.config;importjava.sql.Connection;importjava.util.Properties;importorg.apache.ibatis.executor.statement.StatementHandler;importorg.apache.ibatis.mapping.BoundSql;importorg.apache.ibatis.plugin.Interceptor;importorg.apache.ibati......
  • MybatisPlus——插件功能
    插件功能MybatisPlus提供了很多的插件功能,进一步拓展其功能。目前已有的插件有:PaginationInnerInterceptor:自动分页TenantLineInnerInterceptor:多租户DynamicTableNameInnerInterceptor:动态表名OptimisticLockerInnerInterceptor:乐观锁IllegalSQLInnerInterceptor:sq......
  • mybatis中BatchExecutor的使用
    这部分内容需要掌握mysql的sql执行流程和事务控制才能理解,可以参考下我的相关文章。mybatissql执行流程mybatis事务控制一、BatchExecutor的介绍BatchExecutor是mybatis提供的一个执行器,用于执行批量更新操作,性能上比使用foreach标签拼sql要高,使用方式上也更方便。BatchE......