MyBatis输出映射

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

1 resultType

resultType: 执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。如果返回的是集合,设置的是集合元素的类型,而不是集合本身。resultType 和 resultMap,不能同时使用。

1.1 输出简单类型

案例:返回球队的总记录数

TeamMapper接口添加如下内容:

int getCount();

TeamMapper.xml配置文件中添加如下:

<!-- 只有返回的结果是单行的时候,返回值类型才可以指定为基本类型
    如果是单行多列,也取不到后面的列的值;
    如果返回多行会报异常:TooManyResultsException-->
<select id="getCount" resultType="java.lang.Integer">
    select count(teamId) from team
</select>

测试类添加方法:

 @Test
    public void test07(){
        int count = teamMapper.getCount();
        System.out.println("总共的行数:"+count);
    }

1.2 输出pojo类型

案例:参考之前的查询所有球队信息

List<Team> queryAll();
<!--接口方法返回是集合类型,但是映射文件中的resultType需要指定集合中的类型,不是集合本身。-->
<select id="queryAll" resultType="com.AE.pojo.Team">
    select * from team;
</select>

1.3 输出Map类型

当我们只需要查询表中几列数据的时候可以将sql的查询结果作为Map的key和value。一般使用的是Map<Object,Object>.

Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录。大于一条记录会抛出TooManyResultsException异常。

如果有多行,使用List<Map<Object,Object>>.

案例:根据id查询球队名称和位置。

TeamMapper接口添加如下内容:

Map<Object,Object> queryTwoColumn(int teamId);
List<Map<Object,Object>> queryTwoColumnList();

TeamMapper.xml配置文件中添加如下:

<select id="queryTwoColumn"  resultType="java.util.HashMap">
    select teamName,location from team where teamId=#{id}
</select>
<select id="queryTwoColumnList"  resultType="java.util.HashMap">f
    select teamName,location from team
</select>

测试类添加方法:

@Test
    public void test08(){
        Map<String, Object> map = teamMapper.queryTwoColumn();
        System.out.println(map);
    }
    @Test
    public void test09(){
        List<Map<String, Object>> list = teamMapper.queryTwoColumnList();
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
​
    }

2 resultMap

resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。

常用在列名和 java 对象属性名不一样的情况。

使用方式:

1.先定义 resultMap,指定列名和属性的对应关系。

2.在<select>中把 resultType 替换为 resultMap。

TeamMapper.java接口中添加方法:

List<Team> queryAll2();

TeamMapper.xml映射文件添加:

<!--resultMap 和resultType不能同时出现
    resultMap:是引用的自己创建resultMap的id-->
    <select id="queryAll2" resultMap="baseResultMap">
        select * from team;
    </select>
    <!--创建resultMap:相当于自己编写表中的列与实体类中的属性的映射
        id:resultMap的名称,要求唯一
        type:期待要映射为java的类型
    -->
    <resultMap id="baseResultMap" type="com.AE.pojo.Team">
        <!--一般主键列用id,其余列用result
            column:表示数据库表中的列名,不区分大小写
            property:表示实体类中的对应的属性名,区分大小写
            javaType:实体类中的对应的属性的类型,可以省略,mybatis会自己推断
            jdbcType="数据库中的类型column的类型" 一般省略
        -->
        <id column="teamId" property="teamId" javaType="java.lang.Integer" ></id>
        <result column="teamName" property="teamName" javaType="java.lang.String"></result>
        <result column="location" property="location" javaType="java.lang.String"></result>
        <result column="createTime" property="createTime" javaType="java.util.Date"></result>
    </resultMap>

测试:

    @Test
    public void test10(){
        List<Team> teams = teamMapper.queryAll2();
        teams.forEach(team-> System.out.println(team));
    }

3 数据库表中列与实体类属性不一致的处理方式

案例准备工作:创建表:

use mybatis;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户姓名',
  `user_age` int NULL DEFAULT NULL COMMENT '用户年龄',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
​
INSERT INTO `users` VALUES (1, '贾宝玉', 14);
INSERT INTO `users` VALUES (2, '林黛玉', 13);
INSERT INTO `users` VALUES (3, '薛宝钗', 15);
​
SET FOREIGN_KEY_CHECKS = 1;

3.1 使用列别名和resultType

实体类Users.java

public class Users {
    private Integer userId;
    private String userName;
    private Integer userAge;
​
    @Override
    public String toString() {
        return "Users{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userAge=" + userAge +
                '}';
    }

接口UsersMapper.java

public interface UsersMapper {
    Users queryByID(int userId);
}

映射文件UsersMapper.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.lina.mapper.UsersMapper">
    <!--方式1:resultType中的实体类的属性作为查询语句中的别名,让别名和属性保持一致-->
    <select id="queryByID" resultType="com.lina.pojo.Users">
        select user_id as userId,user_name as userName,user_age as userAge from users where user_id=#{id};
    </select>
</mapper>

测试类TestUsersMapper.java

/**
 * ClassName: TestUsersMapper
 * 测试类
 * @author wanglina
 * @version 1.0
 */
public class TestUsersMapper {
    private UsersMapper usersMapper= MybatisUtil.getSqlSession().getMapper(UsersMapper.class);
​
    @Test
    public void test01(){
        Users user = usersMapper.queryByID(1);
        System.out.println(user);
    }
}

3.2 使用resultMap

接口UsersMapper.java添加方法

Users queryByID2(int userId);

映射文件UsersMapper.xml添加如下内容:

    <!--方式2:通过resultMap自行映射-->
    <select id="queryByID2" resultMap="baseMap">
        select * from users where user_id=#{id};
    </select>
    <resultMap id="baseMap" type="com.lina.pojo.Users">
        <id column="user_id" property="userId"/>
        <result column="user_name" property="userName"/>
        <result column="user_age" property="userAge"/>
    </resultMap>

测试:文章来源地址https://www.toymoban.com/news/detail-849899.html

@Test
    public void test02(){
        Users user = usersMapper.queryByID2(1);
        System.out.println(user);
    }

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

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

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

相关文章

  • MyBatis关联映射相关习题

    一、单选题 1、下列属性中,不属于association元素属性的是()。 A、property B、select C、ofType D、autoMapping 正确答案:C ofType是collection元素特有的属性 2、下列关于foreach元素的collection属性的说法正确的是()。 A、collection属性可有可无 B、collection属性值在任何情况下的取值都是

    2023年04月27日
    浏览(13)
  • MyBatis的关联映射

    结果映射(resultMap)–主要使用这两个标签 association – 一个复杂类型的关联;许多结果将包装成这种类型 嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用 collection – 一个复杂类型的集合 嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射

    2023年04月25日
    浏览(8)
  • MyBatis关联关系映射详解

    MyBatis关联关系映射详解

    目录 前言 一、 什么是关联关系映射? 二、MyBatis的关系映射方式 1.基于XML配置的关系映射 2.基于注解的关系映射 三、如何使用MyBatis进行关系映射? 四、关于关系映射的一些建议 五、关联关系映射 1.一对一关联关系映射 嵌套查询 嵌套结果映射 2.一对多关联关系映射 嵌套查

    2024年02月09日
    浏览(8)
  • 【Mybatis】XML映射文件

    【Mybatis】XML映射文件

    目录  11.3XML映射文件         1.select          2.insert、update、delete         3.Sql          4.parameters(参数)          5.resultMap         6.resultMap 使用示例          (1)在先前创建的数据库stu中创建表student 2,并插入若干条数据,代码如下:       

    2024年02月14日
    浏览(9)
  • 【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射

    【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射

    🍎 个人博客: 个人主页 🏆 个人专栏:   Mybatis    ⛳️   功不唐捐,玉汝于成 目录 前言 正文 一、概述 MyBatis简介 主要特性 1. 动态SQL 2.结果映射 3 .插件机制 二、MyBatis配置文件 1.配置文件结构 数据库连接信息 全局配置 映射器扫描 2.SQL映射文件 SQL语句定义 参数映射和

    2024年02月04日
    浏览(8)
  • MyBatis的XML映射文件

    MyBatis的XML映射文件

    目录 2.1 XML配置文件规范 在Mybatis中使用XML映射文件方式开发,需要符合一定的规范 - XML映射文件定义规范: 2.2 XML配置文件实现 第1步:创建XML映射文件 第2步:编写XML映射文件 2.3 MybatisX的使用 总结: Mybatis的开发有两种方式: 注解 XML配置文件 通过XML配置文件的形式来配置

    2024年02月13日
    浏览(9)
  • Mybatis映射.动态sql.分页

    动态SQL是MyBatis提供的一种动态生成SQL语句的方式,可以根据不同的条件生成不同的SQL语句,从而实现更加灵活的查询和操作。 在MyBatis的映射文件中,可以通过使用if、choose、when、otherwise、foreach等标签来实现动态SQL。下面以if和foreach为例,介绍如何在MyBatis映射文件中使用动

    2024年02月11日
    浏览(12)
  • 创建MyBatis的映射文件模板

    创建MyBatis的映射文件模板

    Settings-Editor--Code Style-File and Code Templates

    2024年02月09日
    浏览(6)
  • 【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

    【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

    SSM( S pring、 S pringMVC、 M yBatis) Apache Shiro SpringBoot 事务 :若将 N 个 数据库操作 (CRUD)放到同一个事务中,则这 N 个数据库操作最终要么全都生效,要么全都不生效 🍀 开启事务【 START TRANSACTION 】 🍀 回滚事务:若事务中的某个数据库操作失败,其他所有数据库操作都需要

    2024年02月08日
    浏览(29)
  • Mybatis:一对一查询映射处理

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! MyBatis是一种流行的Java持久化框架,它提供了灵活而强大的查询映射功能。在一些复杂的数据模型中

    2024年02月14日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包