• Mybatis(第三篇:不同的返回值类型:Map和JavaBean)


    Mybatis(第三篇:不同的返回值类型:Map和JavaBean)


    返回值为map类型和JavaBean对象

    1.pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.bjpowernode</groupId>
        <artifactId>01_hello_mybatis</artifactId>
        <version>1.0.0</version>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!--引入mybatis的依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.6</version>
            </dependency>
            <!--引入mysql的驱动包-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.30</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.20</version>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    2.mybatis-config.xml配置文件

    resources文件夹下
    mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <!--配置环境
        environments 复数,表示可以配置多个(environment)子标签,每一个environment 子标签表示是一种环境,
        一般开发中,有三个环境(开发环境,测试环境,生产环境),为何配置三个,是因为,这样切换起来容易
          通过default 属性来进行切换环境的,(让default 属性 和 下面环境中的 id 属性的值一致,就表示当前使用的环境)
          要求:要保证default 的值 必须和id的值保持一致
        -->
        <environments default="dev">
    
            <environment id="dev">
                <!--transactionManager 事务管理器,使用JDBC事务管理器 (MyBatis默认的)-->
                <transactionManager type="JDBC"/>
                <!--连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/powernode_mybatis?characterEncoding=UTF8&useSSL=false"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
    
        </environments>
        <!--关联sql的映射文件-->
        <mappers>
            <mapper resource="com/bjpowernode/mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    3.module层

    com.bjpowernode.domain
    User类

    package com.bjpowernode.domain;
    
    import lombok.*;
    
    import java.util.Date;
    
    @Getter
    @ToString
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private int sex;
        private String address;
        private Date birthday;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.mapper层(返回值为map类型和JavaBean对象)

    com.bjpowernode.mapper
    UserMapper接口

    package com.bjpowernode.mapper;
    
    import com.bjpowernode.domain.User;
    import org.apache.ibatis.annotations.MapKey;
    
    import java.util.List;
    import java.util.Map;
    
    public interface UserMapper {
    
        List<User> listAll();
    
    	//返回值为Map类型
        @MapKey("id")
        Map<String,Object> queryById1(Long id);
    
    	//返回值为JavaBean对象
        User queryById2(Long id);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    5.mapper配置文件

    resources文件下
    com.bjpowernode.mapper
    UserMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--namespace 命名空间 作用:表示在项目中起到唯一性 , 编写要求:使用接口的全限定名-->
    <mapper namespace="com.bjpowernode.mapper.UserMapper">
    
        <!--
           select 标签,表示查询操作 , 在标签体中,编写相应的sql语句
             id 属性 表示在当前xml文件中的唯一性,编写要求:使用接口中的方法名称
             resultType 属性: 表示查询的结果封装的对象的真实类型 , 编写要求:类的全限定名
        -->
        <select id="listAll" resultType="com.bjpowernode.domain.User">
            select * from user
        </select>
    
        <!--
    
     #{变量}  占位符,相当于 ?
         如果传入的参数是简单类型(String),则变量可以随便定义
         如果传入的参数是对象类型,则变量必须使用对象中的属性的名称
    
      记忆:采用对象的属性的名称
     parameterType 属性 表示 传入的参数的类型 (全限定名),一般省略不写,
     因为MyBatis 能够 判断出来传入的参数的真实类型
    
      返回值不是自定义的对象,都有别名
     -->
        <!--    <select id="queryById1" parameterType="java.lang.Long" resultType="java.util.Map">-->
        <select id="queryById1" parameterType="java.lang.Long" resultType="map">
            select * from user where id = #{id}
        </select>
    
        <select id="queryById2" resultType="com.bjpowernode.domain.User">
            select * from user where id = #{id}
        </select>
    
    
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    6.测试类

    package com.bjpowernode.test;
    
    import com.bjpowernode.domain.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    public class MyBatisTest {
    
    
        @Test
        public void testSelect() throws IOException {
            // 加载MyBatis的核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            //  获取sqlSessionFactory 工厂对象
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            // 获取sqlSession对象
            SqlSession sqlSession = factory.openSession();
            // 调用mybatis的接口方法
            /*
              参数:statement 语句 :(namespace 的值  + "." + sql标签中id的属性的值)
            * */
            List<User> list = sqlSession.selectList("com.bjpowernode.mapper.UserMapper.listAll");
            list.forEach(System.out::println);
            // 提交事务
            sqlSession.commit();
            // 释放资源
            sqlSession.close();
        }
    
        @Test
        public void testSelectOne1() throws IOException {
            // 加载MyBatis的核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            //  获取sqlSessionFactory 工厂对象
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            // 获取sqlSession对象
            SqlSession sqlSession = factory.openSession();
            // 调用mybatis的接口方法
            /*
              参数一:statement 语句 :(namespace 的值  + "." + sql标签中id的属性的值)
              参数二: sql语句需要的参数 (只能传一个值,如果sql中需要很多参数,采用封装的方式处理)
               无论返回值类型是map 还是 javaBean ,则都使用 selectOne,如果返回值是list
               则使用selectList
            * */
            Map<String, Object> map = sqlSession.selectOne("com.bjpowernode.mapper.UserMapper.queryById1", 1L);
    
            System.out.println("map = " + map);
    
            map.forEach((k, v) -> {
                System.out.println(k + ":" + v);
            });
            // 提交事务
            sqlSession.commit();
            // 释放资源
            sqlSession.close();
        }
    
    
        @Test
        public void testSelectOne2() throws IOException {
            // 加载MyBatis的核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            //  获取sqlSessionFactory 工厂对象
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            // 获取sqlSession对象
            SqlSession sqlSession = factory.openSession();
            // 调用mybatis的接口方法
            /*
              参数一:statement 语句 :(namespace 的值  + "." + sql标签中id的属性的值)
              参数二: sql语句需要的参数 (只能传一个值,如果sql中需要很多参数,采用封装的方式处理)
               无论返回值类型是map 还是 javaBean ,则都使用 selectOne,如果返回值是list
               则使用selectList
            * */
            User user = sqlSession.selectOne("com.bjpowernode.mapper.UserMapper.queryById2", 1L);
            System.out.println("user = " + user);
            // 释放资源
            sqlSession.close();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
  • 相关阅读:
    Spring 5高级编程,投入Spring的怀抱
    通过电子文档管理改善患者体验和办公效率
    Java图片验证码的实现方法
    Vue前后端项目开发指南(一)【前端项目的创建】
    【网络】网络入门
    计算机毕业设计选题推荐-船舶维保管理系统-Java项目实战
    LeetCode第45题-跳跃游戏||-java实现-图解思路与手撕代码
    软件推荐:PowerToys
    算法分析与设计编程题 回溯法
    将时间序列转成图像——相对位置矩阵方法 Matlab实现
  • 原文地址:https://blog.csdn.net/weixin_46411355/article/details/127928869