MyBatis从入门到精通:select用法

第一步,在接口中添加方法:

public interface UserMapper {
    SysUser selectById(Long id);
}

第二步,完成映射文件:

<?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="tk.mybatis.simple.mapper.UserMapper">
    <!--
        对接口和接口方法映射的讲解:
            XML与接口是通过namespace的值设置为接口的全限定名称进行关联
            XML与接口中的方法是通过select标签的id属性值和定义的接口方法名一致进行关联

            如果接口方法中没有和XML中的id属性值相对应,启动程序就会报错。

        映射XML和接口的命名需要符合如下规则:
            1.当只只用XML而不使用接口的时候,namespace的值可以设置为任意不重复的名称
            2.标签的id属性值在任何时候都不能出现英文句号“.”,并且同一个命名空间下不能出现重复的id
            3.因为接口中的方法是可以重载的,所以接口中所有的同名方法会对应XML中的同一个id的方法。
            最常见的用法是,同名方法中其中一个增加衣蛾RowBound类型的参数用于实现分页查询。
    -->

    <!--
        resultMap是一种很重要的配置结果映射的方法,resultMap的属性:
            id:必填,并且唯一。
            type:用于配置查询列所映射到的Java对象类型
            extends:选填,可以配置当前的resultMap继承自其他的resultMap,属性值为继承resultMap的id
            autoMapping:选填,用于配置是否启用非映射字段(没有在resultMap中配置的字段)的自动映射功能
                该配置可以覆盖全局的autoMappingBehavior配置(!!!针对没有在resultMap中配置的字段)

        resultMap包含的标签:
            <constructor>:配置用构造方法注入结果,包含两个字标签
                <idArg>:id参数,标记结果作为id(唯一值),可以帮助提高整体性能
                <arg>:注入到构造方法的一个普通结果
            <id>:id参数,标记结果作为id(唯一值),可以帮助提高整体性能
            <result>:主导到Java对象属性的普通结果

            ====================================================
                                后面会详细讲解的部分
            ====================================================
            <association>:一个复杂的类型关联,许多结果将包装成这种类型
            <collection>:复杂类型的集合
            <discriminator>:根据结果值来决定使用哪个结果映射
            <case>:基于某些值的结果映射
            ====================================================
            ====================================================

            id和result标签包含的属性:
                column:从数据库得到的列名(来源于数据库的数据)
                property:映射到列结果的属性(来源与resultMap标签type属性指明的对象的属性)
                ===================================================================
                                       这部分我还没有遇到过,还不是很熟悉
                ===================================================================
                javaType:如果映射到一个JavaBean,Mybatis通常可以自动的判断属性的类型
                    如果映射到HashMap,则需要明确的指明javaType。
                jdbcType:列对应的数据库类型。JDBC类型仅仅需要对插入、更新、删除操作可能为空
                    的列进行处理。这是JDBC jdbcType的需要,而不是MyBatis的需要。
                typeHandler:使用这个属性可以覆盖默认的类型处理器。这个属性值是类的完全限定
                    名或者类型别名。
                ===================================================================
                ===================================================================
    -->
    <resultMap id="userMap" type="tk.mybatis.simple.model.SysUser">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userPassword" column="user_password"/>
        <result property="userEmail" column="user_email"/>
        <result property="userInfo" column="user_info"/>
        <result property="headImg" column="head_img" jdbcType="BLOB"/>
        <result property="createTime" column="user_password" jdbcType="TIMESTAMP"/>
    </resultMap>

    <!--
        <select>:映射查询语句使用的标签
        id:命名空间唯一标识符,可用来代表这句话
        resultMap:用来设置返回值的类型和映射关系
        #{id}:MyBatis SQL中使用预编译参数的一种方式,这个id需要与形式参数一模一样么
    -->
    <select id="selectById" resultMap="userMap">
        SELECT * FROM sys_user WHERE id = #{id}
    </select>
</mapper>

第三步,如何在程序中使用

        @Test
        public void testSelectById(){
            SqlSession sqlSession=getSqlSession();

            try{
                /*
                    这个地方和以前的代码比,已经发生了变化:
                         List<Country> countryList = sqlSession.
                            selectList("tk.mybatis.simple.mapper.CountryMapper.selectAll");

                    以前这个地方,使用的是从sqlSession中通过xml文件的命名空间集selectId找到一个方法,
                    而现在直接通过接口的方式,相对而言十分的方便。
                 */
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser user = userMapper.selectById(1L);
                Assert.assertNotNull(user);
                Assert.assertEquals("admin",user.getUserName());
            }finally {
                sqlSession.close();
            }
        }

原文地址:https://www.cnblogs.com/junjie2019/p/10568055.html

时间: 2024-08-01 22:56:59

MyBatis从入门到精通:select用法的相关文章

MyBatis从入门到精通(六):MyBatis动态Sql之if标签的用法

最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动态的Sql,主要包含以下3个场景: 根据查询条件实现动态查询 根据参数值实现动态更新某些列 根据参数值实现动态插入某些列 1. 使用if标签实现动态查询 假设有这样1个需求:根据用户的输入条件来查询用户列表,如果输入了用户名,就根据用户名模糊查询,如果输入了邮箱,就根据邮箱精确查询,如果同时输入了用户名和邮箱

mybatis从入门到精通(三) 结果映射

mybatis从入门到精通(三) 结果映射 一丶什么是结果映射 结果映射是用于将数据库表字段和实体类中的属性名映射起来, 即究竟是哪个字段名与属性名对应. 映射之后, 即可通过mybatis将从数据库查询的结果转换成对应的实体类对象类型, 除去了人工转换的麻烦. 二丶自动映射 所谓的自动映射, 即是默认java实体类的属性名是驼峰式, 而数据库表字段名是以下划线分隔, 如 属性名userName 与 表字段user_name相对应, 如果是这种简单通用的规则, 即可通过配置mybatis, 使得

mybatis从入门到精通(四) 动态SQL

mybatis从入门到精通(四) 动态SQL 一丶简介 Mybatis的强大特性之一是动态SQL, 它可以动态拼接sql语句, 减轻开发的工作量. Mybatis的动态sql标签如下4种类型 1. if 2. choose (when, otherwise) 3. trim (where, set) 4. foreach 二丶<if/> <if/>标签相当于java语言中的if语句, 通过判断是否符合预置条件来拼接sql语句.其中判断条件可以使用ongl表达式, 如e.method

MyBatis从入门到精通(一):MyBatis入门

最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. MyBatis简介 ? 2001年,Clinton Begin发起了一个名为iBATIS的开源项目,最初侧重于密码软件的研发,后来发展成为一款基于Java的持久层框架. ? 2004年,Clinton将iBATIS的名字和源码捐赠给了Apache软件基金会. ? 2010年,核心开发团队决定离开Apache软件基金会,并且将iBATIS改名

mybatis从入门到精通(二) 增删查改

mybatis从入门到精通(二) 增删查改 一丶前言 "增删查改"是后台开发的常用操作, 因此, 学习mybatis或者其他orm框架有必要统一学习一下"增删查改". 二丶准备开发环境 使用"mybatis从入门到精通(一) 入门"准备的开发环境 三丶查 -- <select/> UserMapper.java User selectUser(@Param("userId") int userId); UserMa

MyBatis从入门到精通(十一):MyBatis高级结果映射之一对多映射

最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解MyBatis中如何使用collection标签实现查询结果一对多映射. 1. 使用collection标签 需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色. 一般情况下,不建议直接修改数据库表对应的实体类. 所以这里我们延用之前博客中新建的类SysUserExtend,并添加如下代码,如下

MyBatis从入门到精通(十二):使用collection标签实现嵌套查询

最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解使用collection标签实现嵌套查询的方法. 1. 需求升级 在上篇博客中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级需求为:根据用户id查询用户信息的同时获取用户拥有的角色以及角色包含的权限. 2. 实现方式 因为我们需要使用到权限表的映射,所以我们需要

mybatis从入门到精通(五) sqlSession API的使用

mybatis从入门到精通(五) sqlSession API的使用  一丶简介 SqlSession类似于mybatis对外的接口层, 它几乎囊括了所有对外的api, 因此, 学习SqlSession的使用方法对于了解mybatis还是有必要的. 对应官方文档 二丶配置SqlSession的环境<environment/> <environment/> 主要包括了两种配置, 事务管理和数据源. 这里的配置仅仅是用于学习, 实际应用一般是将事务交由Spring容器管理, 数据源一般

MyBatis从入门到精通(第3章): MyBatis注解方式的基本使用

MyBatis 注解方式就是将 SQL 语句直接写在DAO层的接口上. 在黑马2018年录制的双元视频课:\08 SSM整合案例[企业权限管理系统]\07.订单操作  有使用mybatis注解进行多表关联查询的案例,在下文会有使用注解的补充说明. 这种方式的优点是 , 对于需求比较简单的系统,效率较高.缺点是 ,当 SQL 有变化时都需要重新编译代码, 一般情况下不建议使用MyBatis的注解方式 . 因此, (原书)本章不会进行深入讲解. 在 MyBatis 注解 SQL 中,最基本的就是@S