6、mybatis中的sql映射文件详解(1)

  • Post author:
  • Post category:其他


对于初学者,如果进行mybatis的学习呢?我总结了几点,会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点;当知道了为什么的时候就开始了解如何用的问题,如何使用mybatis、有几种使用方式、各种方式的优缺点,在这个阶段也会学习mybatis涉及到的一些标签的用法;当知道了基础用法之后,就开始接触一些高级的用法,例如动态sql的使用、mybatis的缓存使用等;至此,在实战项目中使用mybatis进行开发已经没有问题了。

接下来就开始深入的研究一下mybatis这个持久层的框架,在纯技术的方面进行研究,提高自己的能力。首先,大家需要了解一下mybatis的整体技术架构和工作原理;接下来,就开始了解一下mybatis各大核心组件的具体功能及其工作原理。至此,算是对mybatis的原理简单的了解一下了,由于博主的能力有限,因此对于mybatis的框架技术研究也就到这里算结束了。

最后会了解一些其他的东西,例如:mybatis的逆向工程使用、如何开发一个mybatis插件,在这里会介绍一下mybatis的分页实现等。

至此,mybatis也算是入门了,出去就可以和别人说,你稍微了解mybatis框架,对其也多少有一点自己的理解和看法了。


目录


1、sql映射文件中的标签


2、insert 标签


3、delete 标签


4、update 标签


5、select 标签


6、sql 标签


在实际开发过程中,最多的还是使用sql映射文件和接口绑定的方式进行应用开发,对于接口而言没有什么要介绍的,只需要记住sql映射文件中的命名空间要和绑定的接口的全路径限定名一致即可。接下来详细的介绍一下sql映射文件的开发。

1、sql映射文件中的标签

sql映射文件中除去自定义的sql,主要还是一些标签,正是通过这些标签和对应的标签属性才实现了自动映射,接下来详细的说一下sql映射文件中的标签用法

序号 标签名 作用
1 select 映射sql查询语句
2 insert 映射sql添加语句
3 update 映射sql修改语句
4 delete 映射sql删除语句
5 sql 声明可复用的sql语句
6 resultMap 自定义从数据库结果集中加载对象的规则
7 cache 设置当前sql映射文件的缓存信息
8 cache-ref 应用其他sql映射文件的缓存信息



这一篇文章只介绍标签 insert、delete、update、select、sql 的基本用法

2、insert 标签

insert 标签用于映射sql的新增语句,具体使用如下:

<!-- 添加一条记录 -->

<insert id="insertUser">
	insert into oa_user (id, loginName, name) 
                  value (#{id}, #{loginName}, #{name})
</insert>

上边是一个简单的新增记录的例子,有时需要获取添加后数据的id,或者是通过数据库自增的方式添加数据时,需要返回新增数据的id,这是可以使用属性userGeneratedKeys和keyProperty进行字段的获取,具体使用如下:

<!-- 新增一条记录,此时,数据的主键ID通过自增的方式生成,并返回ID封装到字段 id 中-->

<insert id="insertUserAuto" userGeneratedKeys="true" keyProperty="id">
	insert into oa_user (loginName, name) value (#{loginName}, #{name})
</insert>

如上这种主键自增的方式需要依赖于数据库支持主键自增,但是有的数据库是不支持这个特性的,例如oracle,那如何获取增加的数据的字段呢?此时就需要借助selectKey标签,具体使用如下:

<insert id="addUser">
	 <!-- keyProperty: 插入的主键值封装给javabean的id属性 -->
	 <!-- resultType: 查出值的返回值类型 -->
	 <!-- order:before 是先获取主键在插入,after是先插入在获取,一般不使用after-->
	 <selectKey keyProperty="id" order="BEFORE" resultType="Integer">
		select user.nextval from dual 
	 </selectKey>
	 insert into user (id,name) values (#{id},#{name})
</insert>

有时候为了提高效率,需要进行批量添加,mybatis中通过拼接的方式进行实现,具体实现如下:

<!--  批量添加记录的写法  
            使用 foreach 进行批量添加语句的拼接,
            其中collection 是接受的数据类型, 
            item 是迭代的每一个元素
            separator 是连接符
-->
<insert id="insertUserList" useGeneratedKeys="true" keyProperty="id">
	insert into oa_user (id, loginName, name) values
	<foreach collection="list" item="user" separator=",">
		(#{user.id}, #{user.loginName}, #{user.name})
	</foreach>
</insert>

3、delete 标签

delete 标签用于映射sql的删除语句,具体使用如下:

<!-- 删除标签的使用,通过映射删除语句进行数据删除 -->
<delete id="delUser">
	delete from oa_user where id = #{id}
</delete>

可以看到,非常简单,只要会写sql语句,这个开发就没有任何问题。

4、update 标签

delete 标签用于映射sql的修改语句,具体使用如下:

<update id="updateUser">
	update oa_user set loginName = #{loginName} where id = #{id}
</update>

5、select 标签

select 标签用于映射sql的查询语句,具体使用如下:

<!--  使用select标签映射一个简单的查询语句  -->
<select id="selectUser" resultType="com.app.mapper.User">
	select * from oa_user where id = #{id}
</select>

6、sql 标签

sql 标签用来定义可重用的sql映射语句,其使用方法比较简单,只需要使用sql标签来定义重用的sql,然后在需要用的地方通过 include 标签引用即可,具体使用如下:

<!--  自定义要查询显示的字段列表  -->
<sql id="showUserCols">
	id , loginName, name
</sql>

<!--  重用 自定义的sql代码段 showUserCols  -->
<select id="selectUser" resultType="com.app.mapper.User">
	select 
	<include refid="showUserCols"></include>
	from oa_user where id = #{id}
</select>

上边这是一个简单的例子,可以为sql 段传入参数,具体如下:

<!--  通过${} 来获取传入的数据  -->
<sql id="showUserCols">
	${show_user_cols}
</sql>

<!--  为sql复用段传入 参数值  -->
<select id="selectUser" resultType="com.app.mapper.User">
	select 
	<include refid="showUserCols"><property name="show_user_cols" value="id, name"/></include>
	from oa_user where id = #{id}
</select>

以上便是基本开发中常用到的标签和具体的用法介绍。

其实看到这里,对于刚开始接触mybatis的人来说,有很多疑惑,我在最初学的时候有两个疑惑:

1、sql 中如何接受java代码中传过来的参数? 也没看到在sql映射文件中声明和体现呀。

2、mybatis 是否能实现关联查询,并封装结果集呢?

其实针对于这两个问题就是下一篇要描述的 输入映射和输出映射,也就是参数的接收和结果集的映射相关问题。



版权声明:本文为chaizepeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。