From《MyBatis从入门到精通》

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

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();
            }
        }

MyBatis select标签的用法的更多相关文章

  1. MyBatis foreach标签的用法

    From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...

  2. MyBatis bind标签的用法

    From<MyBatis从入门到精通> <!-- 4.5 bind用法 bind标签可以使用OGNL表达式创建一个变量并将其绑定到上下文中. 需求: concat函数连接字符串,在M ...

  3. MyBatis if标签的用法

    <!-- 4.1.1 在WHERE条件中使用if 需求: 实现一个用户管理高级查询功能,根据输入的条件去检索用户信息.这个功能 还需要支持以下三种情况:当只有输入用户名时,需要根据用户名进行模糊 ...

  4. mybatis001-动态标签Trim用法

    Mybatis动态标签Trim用法 一.<trim></trim>标签用法 示例一: select * from user <trim prefix="WHER ...

  5. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法   动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...

  6. MyBatis映射文件4(参数获取#{}和${}/select标签详解[返回类型为list])

    参数获取 之前我们都是采用#{}的方式进行参数传递,其实MyBatis还有另外的参数传递方式${} 使用方法相同,但是还是有很大区别的 这里做一个测试: <select id="get ...

  7. select标签multiple属性的用法

    前些日子公司让做一个功能模块.对于里面一个小功能费了些周折,现将其总结一下: 一.实现效果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvaHVh ...

  8. [刘阳Java]_MyBatis_映射文件的select标签入门_第3讲

    1.Mybatis映射文件的<select>标签主要帮助我们完成SQL语句查询功能,<select>标签它包含了很多属性,下面简单对<select>标签的属性做一个 ...

  9. SpringMVC +mybatis+spring 结合easyui用法及常见问题总结

    SpringMVC +mybatis+spring 结合easyui用法及常见问题总结 1.FormatString的用法. 2.用postAjaxFillGrid实现dataGrid 把form表单 ...

随机推荐

  1. 指定Qt程序运行的style,比如fusion(以前没见过QStyleFactory)

    转载请注明文章:指定Qt程序运行的style,比如fusion 出处:多客博图 代码很简单,如下: #include <QtWidgets/QApplication>   #include ...

  2. Delphi中流对象的应用

    Delphi的流对象(TStream的派生对象)有如下读写函数: function Read(var Buffer; Count: Longint): Longint;function Write(c ...

  3. asp.net core2.0中网站发布的时候,视图文件不被打包成dll

    项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...

  4. Linux下的wfopen(手工打造)

    Of Linux on wfopen (open wide-character version of the file name and mode) to achieve Not directly a ...

  5. Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)

    type  TMainWindow = packed record    ProcessID: THandle;    MainWindow: THandle;  end;  PMainWindow  ...

  6. Understand the Qt containers(有对应表)

    Container classes are one of the cornerstones of object-oriented programming, invaluable tools that ...

  7. 用汇编语言给XP记事本添加“自动保存”功能 good

    [文章标题]: 用汇编语言给XP记事本添加“自动保存”功能 [文章作者]: newjueqi [作者邮箱]:zengjiansheng1@126.com [作者QQ]:190678908 [使用工具] ...

  8. 判断本地系统目录下是否存在XML文件,如果不存在就创建一个XMl文件,若存在就在里面执行添加数据

    这是我为项目中写的一个测试的例子, 假如,您需要这样一个xml文件, <?xml version="1.0" encoding="utf-8"?> ...

  9. PHP网站开发方案

    一. 开发成员 a)项目主管 b)页面美工c)页面开发 d)服务端程序开发e)系统与数据管理f)测试与版本控制 二. 网站组开发简明流程 三. 开发工具与环境 a) 服务器配置i. WEB服务器: F ...

  10. JS数据结构第三篇---双向链表和循环链表之约瑟夫问题

    一.双向链表 在上文<JS数据结构第二篇---链表>中描述的是单向链表.单向链表是指每个节点都存有指向下一个节点的地址,双向链表则是在单向链表的基础上,给每个节点增加一个指向上一个节点的地 ...