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>
可以看到,各种标签最常见的属性就是id
,parameterType
,resultType
,这三者都有其对应的作用
-
id
:标识该标签块,而且该id值应当与接口中对应的方法名一致,才能完成实现类与接口的绑定。换句话说Mapper.xml中的每个标签的id是期望实现的接口中的方法。这样在上一层调用接口方法时,对应的session
就能成功找到实现类以及对应sql语句。 -
parameterType
:参数类型。由于调用sql语句中可能会涉及多个参数的赋值,因此该处填写的就是sql语句中待填充的参数类型。-
参数是基本类型(int,String,char),应当将其设置为对应名字前加下划线,如
_int
,parameterType = _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
,name
,pwd
三个属性
-
-
参数是容器,直接设置为小写类型名即可,如
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类名和数据表项名不一致的情况。
- 上述代码中,查询结果返回的是一个pojo类对象,但同样也可以将结果集合设置为Map类型,同时在对
以上,便是Mybatis中常见的标签以及标签属性,但这些知识点都比较稀碎,更多具体应用应当在实际项目开发中使用才能有更加深入的理解。
-