MyBatis的映射文件

原创 2018年04月17日 14:45:12

在映射文件中,<mapper>元素是映射文件的根元素,其他标签都是其子元素。

<?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.itheima.mapper.CustomerMapper">
    <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer">
        SELECT * FROM t_customer WHERE id = #{id}
    </select>
    <select id="findCustomerByName" parameterType="String" resultType="com.itheima.po.Customer">
        SELECT * FROM t_customer WHERE username LIKE '%${value}%'
    </select>
    <insert id="addCustomer" parameterType="com.itheima.po.Customer">
        INSERT INTO t_customer(username,jobs,phone) VALUES (#{username}, #{jobs}, #{phone})
    </insert>
    <update id="updateCustomer" parameterType="com.itheima.po.Customer">
        UPDATE t_customer SET username='${username}', jobs='${jobs}',phone='${phone}' WHERE id=${id}
    </update>
    <delete id="deleteCustomer" parameterType="Integer">
        DELETE FROM t_customer WHERE id=#{id}
    </delete>
</mapper>

select

用于映射查询语句,从数据库中读出数据,并组装数据给业务开发人员。

<select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer">
        SELECT * FROM t_customer WHERE id = #{id}
</select>

上述语句中唯一标识为findCustomerById,它接受一个Integer类型的参数,并返回一个Customer类型的对象。
其常见属性如下:

属性 说明
id 表示命名空间中的为标识符,常与命名空间组合起来使用,组合后结果不唯一则MyBatis抛出异常
parameterType 该属性表示传入SQL语句的参数类的全限定名或者别名。可选属性,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset(依赖于驱动)
resultType 从SQL语句返回的类型的类的全限定名或者别名。如果是集合类,那么返回的应该是集合可以包含的类型,而不是集合本身。返回时可以使用resultType或resultMap之一
resultMap 表示外部resultMap的命名引用,返回时可以使用resultType或resultMap之一
useCache 用于控制二级缓存的开启和关闭,其值为布尔类型,默认为true,表示查询结果存入二级缓存
flushCache 表示调用SQL语句之后,是否需要MyBatis情况之前查询的本地缓存和二级缓存。其值为布尔类型,默认值为false。如果设置为true,则任何时候只要SQL语句被调用,都会清空本地缓存和二级缓存
timeout 用于设置超时参数,单位为秒,超时将抛出异常
fetchSize 获取记录的总条数设定,默认值为unset(依赖于驱动)
statementType 用于设置MyBatis使用哪个JDBC额Statement工作,其值为STATEMENT,PREPARED(默认值)或CALLABLE,分别对应JDBC中的Statement,PreparedStatement和CallableStatement
resultSetType 表示结果集的类型,其值可以设置为FORWARD_ONLY,SCROLL_SENSITIVE或SCROLL_INSENSITIVE,它的默认值是unset(依赖于驱动)

insert

用于映射插入语句,在执行完语句后,返回一个表示插入记录数的整数。
其常见属性除了包含select的属性外,还有另外三种属性:

属性 说明
id 表示命名空间中的为标识符,常与命名空间组合起来使用,组合后结果不唯一则MyBatis抛出异常
parameterType 该属性表示传入SQL语句的参数类的全限定名或者别名。可选属性,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset(依赖于驱动)
resultType 从SQL语句返回的类型的类的全限定名或者别名。如果是集合类,那么返回的应该是集合可以包含的类型,而不是集合本身。返回时可以使用resultType或resultMap之一
resultMap 表示外部resultMap的命名引用,返回时可以使用resultType或resultMap之一
useCache 用于控制二级缓存的开启和关闭,其值为布尔类型,默认为true,表示查询结果存入二级缓存
flushCache 表示调用SQL语句之后,是否需要MyBatis情况之前查询的本地缓存和二级缓存。其值为布尔类型,默认值为false。如果设置为true,则任何时候只要SQL语句被调用,都会清空本地缓存和二级缓存
timeout 用于设置超时参数,单位为秒,超时将抛出异常
fetchSize 获取记录的总条数设定,默认值为unset(依赖于驱动)
statementType 用于设置MyBatis使用哪个JDBC额Statement工作,其值为STATEMENT,PREPARED(默认值)或CALLABLE,分别对应JDBC中的Statement,PreparedStatement和CallableStatement
resultSetType 表示结果集的类型,其值可以设置为FORWARD_ONLY,SCROLL_SENSITIVE或SCROLL_INSENSITIVE,它的默认值是unset(依赖于驱动)
keyProperty 此属性的作用是将插入或更新操作时将记录赋值给PO类的某个属性,通常会设置为主键对应的属性。如果时需要设置联合主键,可以在多个值之间用逗号隔开
keyColum 此属性用于设置第几列是主键,当主键列不是表中的第一列是需要设置。在需要主键联合时,值可以用逗号隔开
useGeneratedKeys 此属性会使MyBatis使用JDBC的getGeneratedKeys()方法来获取由数据库内部生产的主键,如MySQL和SQL Server等自动递增的字段,其默认值为false

实例代码如下:

<insert id="addCustomer" parameterType="com.itheima.po.Customer" keyProperty="id" useGeneratedKeys="true">
        INSERT INTO t_customer(username,jobs,phone) VALUES (#{username}, #{jobs}, #{phone})
</insert>
    @Test
    public void addCustomerTest() throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Customer customer = new Customer();
        customer.setUsername("keke");
        customer.setJobs("student");
        customer.setPhone("13553423238");
        int rows = sqlSession.insert("com.itheima.mapper.CustomerMapper.addCustomer", customer);
        System.out.println(customer.getId());
        if(rows > 0) {
            System.out.println("您成功插入了"+rows+"条数据");
        }else {
            System.out.println("执行插入操作失败!!!");
        }
        sqlSession.commit();
        sqlSession.close();
    }

insert和update有一个子标签selectKey。下面用selectKey标签来实现主键自动增长,以解释他的作用:

<insert id="addCustomer" parameterType="com.itheima.po.Customer">
    <selectKey keyProperty="id" resultType="Integer" order="BEFORE">
        select if(max(id) is null, 1, max(id)+1) as new newId from t_customer
    </selectKey>
    INSERT INTO t_customer(id,username,jobs,phone) VALUES (#{id},#{username}, #{jobs}, #{phone})
</insert>

selectKey元素有keyProperty,resultType,order和statementType。order属性可以设置为BEFORE和AFTER。BEFORE的话会先执行selectKey,再执行插入语句,AFTER的话会先执行插入语句,再执行selectKey。

update和delete

update映射更新语句,执行后返回一个整数,表示更新的条数。delete映射删除语句,执行后返回一个整数,代表删除的条数。其属性基本于select相同。

sql

可以用sql标签定义一段sql语句,然后可以用include标签进行重用。
演示如下:

    <sql id="customerId">
        FROM t_customer WHERE id = #{id}
    </sql>
    <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer">
        SELECT * <include refid="customerId"/>
    </select>

resultMap

表示结果映射集,定义映射规则,级联的更新以及定义类型的转换等。
其元素结构如下

    <resultMap id="" type=""> 
        <constructor>  <!-- 类在实例化时,用来注入结果到构造方法中-->
            <idArg></idArg>  <!-- ID参数;标记结果作为ID -->
            <arg/>  <!-- 注入到构造方法的一个普通结果 -->
        </constructor>
        <id/>  <!-- 用来表示哪个列是主键 -->
        <result/>  <!-- 注入到字段或JavaBean属性的普通结果 -->
        <association property="" />  <!-- 用于一对一关联 -->
        <discriminator javaType="">  <!-- 使用结果值来决定哪个结果集映射 -->
            <case value=""></case>  <!-- 基于某些值的结果映射 -->
        </discriminator>
    </resultMap>

实例代码如下:

<?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.itheima.mapper.UserMapper">
    <resultMap id="resultMap" type="com.itheima.po.User">
        <id property="id" column="t_id"/>
        <result property="name" column="t_name"/>
        <result property="age" column="t_age"/>
    </resultMap>
    <select id="findAllUser" resultMap="resultMap">
        SELECT * FROM t_user
    </select>
</mapper>

写一个相应的测试方法

    @Test
    public void findAllUserTest() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> list = sqlSession.selectList("com.itheima.mapper.UserMapper.findAllUser");
        for (User user : list) {
            System.out.println(user);
        }
        sqlSession.close();
    }

运行结果如下:

DEBUG [main] - ==>  Preparing: SELECT * FROM t_user 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 3
User [id=1, name=lucy, age=25]
User [id=2, name=lili, age=20]
User [id=3, name=jim, age=20]
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38997311/article/details/79974689

mybatis--映射文件详解

Mybatis映射文件 一、输入映射 parameterType 指定输入参数的java类型,可以使用别名或者类的全限定名。它可以接收简单类型、POJO、HashMap。 1、传递简单类型...
  • CSDN_GIA
  • CSDN_GIA
  • 2017-02-08 17:10:32
  • 2052

Mybatis 映射文件标签详解

1.1     Mybatis映射文件(核心) 1.1.1 输入映射 1.1.1.1  ParameterType 指定输入参数的java类型,可以使用别名或者类的全限定名。它可以接...
  • chenluyao_it
  • chenluyao_it
  • 2017-12-05 13:24:27
  • 517

MyBatis -- sql映射文件详解

MyBatis 真正的力量是在映射语句中。和对等功能的jdbc来比价,映射文件节省很多的代码量。MyBatis的构建就是聚焦于sql的。 sql映射文件有如下几个顶级元素:(按顺序) cache -...
  • u014034854
  • u014034854
  • 2015-08-11 21:34:29
  • 3478

mybatis之XML映射文件

XML映射文件 mybatis的真正实力是在于它的映射语句。这也是很神奇的地方。针对所有的特点来说,xml映射文件是相对简单的。当然,如果你要把它们与等价的JDBC代码相比较,你可能会立马发现可以少...
  • u012934325
  • u012934325
  • 2017-01-03 22:34:54
  • 350

Mybatis学习笔记(二)-Mybatis配置文件与映射文件详解

mybatis配置文件详解,mybatis映射 文件详解,mapper,configuration,environment
  • madman0621
  • madman0621
  • 2017-07-16 23:24:56
  • 765

Mybatis的配置文件和映射文件详解

一、Mybatis的全局配置文件 1、SqlMapConfig.xml是mybatis的全局配置文件,配置内容如下: properties(属性) settings(全局配置参数) typeAlias...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017-03-27 10:44:04
  • 10221

mybatis--map映射文件 标签详解

在学习编程的过程中,遇到过很多的配置文件,我知道它们可以给有的工作带来很多便利,但却总是处理不了,这里记录下我遇到的每个配置文件,并将里面用到的标签一一弄清,希望累积到最后可以有个不错的丰收。 一、...
  • baidu_32262373
  • baidu_32262373
  • 2016-03-02 23:07:14
  • 2625

Mybatis系列(四)映射文件

Mybatis系列(四)映射文件 引言 Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方。实现相同的功能,她要比直接使用JDBC省去95%的代码量。而且将SQL语句独立在Java代...
  • chris_mao
  • chris_mao
  • 2015-09-29 22:47:42
  • 11229

Spring集成Mybatis配置映射文件方法详解

Spring ORM模块集成Mybatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般不直接在Mybatis的配置文件里进行配置,而会在Spring的配置文件里使用M...
  • guoweimelon
  • guoweimelon
  • 2016-03-05 20:35:53
  • 2317

mybatis映射文件_参数处理_#与$取值区别

1:# 是以预编译的形式放在sql文中,类似于?占位符,防止sql注入 select * from ssh1 where id=? and name=? 2:$ 取出的值直接放在sql语句中,会有安全...
  • CarryBest
  • CarryBest
  • 2017-05-05 13:10:36
  • 299
收藏助手
不良信息举报
您举报文章:MyBatis的映射文件
举报原因:
原因补充:

(最多只允许输入30个字)