Mybatis学习——Mapper.xml配置标签属性详解

Mybatis学习——Mapper.xml配置标签属性详解

先前的博客提到,Mybatis中的xxxMaper.xml代替了JDBC中的XXXMaperImpl,其中配置pojo类的相关CRUD操作。本文将就xxxMapper.xml中各种标签属性做一下总结。

首先还是先看一下在没写sql语句时的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.ggs.dao.UserMapper">


</mapper>

这是xml文件中的基本配置信息,sql语句便是配置在标签内部

<mapper>标签中,最重要的就是写CRUD标签。先来看几个常用的标签:

<select id="getUserList" resultType="com.ggs.pojo.User">
  select * from Mybatis.user
</select>

<select id="getUserById" parameterType="int" resultType="com.ggs.pojo.User">
  select * from Mybatis.user where id = #{id}
</select>


<insert id="addUser" parameterType="com.ggs.pojo.User">
  insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>

<update id="updateUser" parameterType="com.ggs.pojo.User">
  update Mybatis.user
  set name = #{name},pwd=#{pwd}
  where id = #{id}
</update>

<delete id="deleteUser" parameterType="int">
  delete from Mybatis.user where id = #{id}
</delete>

可以看到,各种标签最常见的属性就是idparameterTyperesultType,这三者都有其对应的作用

  • id:标识该标签块,而且该id值应当与接口中对应的方法名一致,才能完成实现类与接口的绑定。换句话说Mapper.xml中的每个标签的id是期望实现的接口中的方法。这样在上一层调用接口方法时,对应的session就能成功找到实现类以及对应sql语句。

  • parameterType:参数类型。由于调用sql语句中可能会涉及多个参数的赋值,因此该处填写的就是sql语句中待填充的参数类型。

    • 参数是基本类型(int,String,char),应当将其设置为对应名字前加下划线,如_intparameterType = _String

    • 参数基本类型的包装类,设置为其基本类型即可,如类型是Integer时,可设置为parameterType = int

    • 参数是引用类型,则应当设置为对应的类型即可,如parameterType="com.ggs.pojo.User"

      • 注意:如果是引用类型,注意在写sql语句时是通过调用get方法实现信息的注入,因此需要保证传入参数的参数名与pojo类中的参数名一致。例如

        <insert id="addUser" parameterType="com.ggs.pojo.User">
              insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
        </insert>
        

        在上述代码中,必须保证User类中存在id,namepwd三个属性

    • 参数是容器,直接设置为小写类型名即可,如parameterType=map

      • 根据小狂神的说法,这种方法是最常用的,因为其使用及其灵活,既可以传入单个参数,也可以实现引用类型数据的传入。同样请看如下代码

        <insert id="addUser" parameterType="map">
          insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{password})
        </insert>
        

        这时候有意思的来了,我在测试类test中调用的方法传入的参数是一个bean对象,但对应方法参数设置的是map

        mapper.addUser(new User(8,"张三","1242432"));
        

        使用这种方法同样可以实现数据的插入,这也似乎意味着在parameterType会自动调用引用get方法获取数据并将数据存放进入map中。但后续又发现,如果注释掉pojo类中的get方法,同样可以实现传参。那么这样一来就只有一种可能:

        • parameterType的底层实现本质上就是使用map,map的<k,m>赋值是通过对传入对象的暴力反射实现。因此,今后在编写响应sql语句标签时,parameterType如果涉及引用类型可全权使用map。
    • resultType:返回值类型。涉及返回值类型的大多是select语句,返回值类型也多种多样。但同parameterType类似,大多数情况,我们会使用map来接纳查询结果,见如下代码

      <select id="getUserById" parameterType="int" resultType="com.ggs.pojo.User">
        select * from Mybatis.user where id = #{id}
      </select>
      
      • 上述代码中,查询结果返回的是一个pojo类对象,但同样也可以将结果集合设置为Map类型,同时在对resultMap作结果集映射即可
      <resultMap id="UserMap" type="User">
        <!--        <result column="id" property="id"/>-->
        <!--        <result column="name" property="name"/>-->
        <result column="pwd" property="password"/>
      </resultMap>
      
      <select id="getUserById" parameterType="int" resultMap="UserMap">
        select * from Mybatis.user where id = #{id}
      </select>
      
      • 注意,使用这种方法时,Mybatis会自动将获得到的resultMap映射为User。使用这种方法对好处是:可以处理pojo类名和数据表项名不一致的情况。

    以上,便是Mybatis中常见的标签以及标签属性,但这些知识点都比较稀碎,更多具体应用应当在实际项目开发中使用才能有更加深入的理解。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值