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

对于初学者,如果进行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映射文件中的标签用法

序号标签名作用
1select映射sql查询语句
2insert映射sql添加语句
3update映射sql修改语句
4delete映射sql删除语句
5sql声明可复用的sql语句
6resultMap自定义从数据库结果集中加载对象的规则
7cache设置当前sql映射文件的缓存信息
8cache-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 是否能实现关联查询,并封装结果集呢?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj4050-寻宝游戏【二分,树状数组,LCA】

正题 题目链接:https://jzoj.net/senior/#contest/show/3017/1 题目大意 nnn个点的一棵树&#xff0c;mmm次操作&#xff0c;修改一个地方的宝藏。 每次操作后求拿完所以宝藏并回到原地的最小距离。 解题思路 显然起点在任何一个有宝藏的地方都是最优的&#xff0c;而且顺着…

Ubuntu 16.04+.Net Core+Docker+Nginx安装部署

前言最近公司的项目打算移植到.Net Core平台&#xff0c;所以调研了一下.Net Core在Linux下的安装部署。本篇文章会一步步的描述从安装到配置到部署的全部过程。在文章的结构和内容里&#xff0c;笔者借鉴了很多其他博文的内容&#xff0c;但感觉其他博文中都只是实现了一部分或…

【动态规划】加法最大 (ssl 1595)/乘积最大 (ssl 1007)

加法最大加法最大加法最大 Description 设有一个长度为n的数字字符串&#xff0c;分成k1个部份&#xff0c;使其k1部份相加的和为最大。例如&#xff1a;数字串’340670’&#xff0c;k1&#xff0c;其加法有 34067040673 340670704 3406701010 3406703476 34076034076 其最…

7、mybatis中的sql映射文件详解(2)

对于初学者&#xff0c;如何进行mybatis的学习呢&#xff1f;我总结了几点&#xff0c;会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点&#xff1b;当知道了为什么的时候就开始了解如何用的问题&#xff0c;如何使用my…

jzoj4051-序列统计【NTT】

正题 题目链接:https://jzoj.net/senior/#contest/show/3017/2 题目大意 求有多少个长度为nnn的序列使得 都是在集合SSS中的数这些数的乘积%mx\% mx%mx 解题思路 设fi,jf_{i,j}fi,j​表示长度为iii的序列&#xff0c;乘积为jjj的有多少个&#xff0c;显然有 fi,j∗w%mfi−1…

玩Docker只要浏览器就够了,PWD是个神奇的网站

本文是d4d系列的第9篇&#xff0c;在这一篇中给大家介绍一个学习Docker最为快捷高效的方式&#xff0c;你不需要自己搭建环境&#xff0c;也不用担心把自己的开发环境搞乱&#xff0c;你需要的只是一个浏览器&#xff0c;就可以立即开始学习Docker的常用命令&#xff1b;你甚至…

【树形DP】没有上司的晚会 (ssl 1607)

没有上司的晚会没有上司的晚会没有上司的晚会 Description Ural大学有N个职员&#xff0c;编号为1~N。他们有从属关系&#xff0c;也就是说他们的关系就像一棵以校长为根的树&#xff0c;父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会&#xff0c…

8、mybatis中的sql映射文件详解(3)

对于初学者&#xff0c;如何进行mybatis的学习呢&#xff1f;我总结了几点&#xff0c;会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点&#xff1b;当知道了为什么的时候就开始了解如何用的问题&#xff0c;如何使用my…

P3159-[CQOI2012]交换棋子【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P3159 题目大意 n∗mn*mn∗m的棋盘&#xff0c;每个格子有黑子或白子&#xff0c;每次可以交换两个位置的棋&#xff0c;给出起始态和最终态和每个格子参与交换的最多次数。 求最少交换次数。 解题思路 这里只把白色棋子算作…

[系统安全]使用OD编写连连看外挂

文档下载地址&#xff1a;https://pan.baidu.com/s/1hrzzerq

2018 .NET开发者调查报告: .NET Core 是怎么样的状态

4月28日&#xff0c;在公众号里发起《.NET Core 使用调查》&#xff0c;该调查为期一周&#xff0c;有近3300名开发者参与&#xff0c;统计下结果供你的决策参考。已经使用.net core 的人数只有44%&#xff0c;计划使用.net core 比例达到48%&#xff0c; 没有计划去使用.net …

【动态规划】【递归】取数字问题 (ssl 1644)

取数字问题取数字问题取数字问题 Description 给定M*N的矩阵&#xff0c;其中的每个元素都是-10到10之间的整数。你的任务是从左上角&#xff08;1&#xff0c;1&#xff09;走到右下角&#xff08;M&#xff0c;N&#xff09;&#xff0c;每一步只能向右或向下&#xff0c;并…

9、mybatis中动态sql的使用

对于初学者&#xff0c;如何进行mybatis的学习呢&#xff1f;我总结了几点&#xff0c;会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点&#xff1b;当知道了为什么的时候就开始了解如何用的问题&#xff0c;如何使用my…

软件质量保证划重点期末复习总结

软件质量保证复习总结大纲及问题 Module1 《软件工程实践》 1、软件工程实践通过解决问题的根源来指导软件开发。 2、软件工程实践之间相辅相成。 3、过程指导一个团队在什么时候做什么以及如何做。 4、软件工程过程为实现软件工程实践提供了上下文和支持。 Module2 《软件…

P4721-[模板]分治FFT【NTT,分治】

正题 题目链接:https://www.luogu.com.cn/problem/P4721 题目大意 给出序列ggg&#xff0c;然后f01f_01f0​1 fi∑j1ifi−jgjf_{i}\sum_{j1}^if_{i-j}g_jfi​j1∑i​fi−j​gj​ 求序列fff 解题思路 使用分治后用NTTNTTNTT计算前区间对后区间的贡献即可。 时间复杂度O(nlo…

Microsoft Build 2018 直播来啦!

一年一度的Microsoft Build大会又来啦&#xff01;Microsoft Build是微软面向全球开发者、合作伙伴以及消费者介绍其重要产品在未来一年内发展方向的技术盛会。而今年的Microsoft Build 2018大会是微软巨大蜕变、最彻底组织变革后的第一次前沿技术大会。更多了解&#xff0c;请…

【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)

矩阵链相乘{\color{Cyan} 矩阵链相乘 }矩阵链相乘 Description Input n表示矩阵的个数(<100) n1个数,表示矩阵(<100) Output 最小的乘法次数 Sample Input 5 5 10 4 6 10 2 Sample Output 348 题目大意&#xff1a; 有n个矩阵&#xff0c;输入n1个数&#x…

10、mybatis中缓存的使用

对于初学者&#xff0c;如何进行mybatis的学习呢&#xff1f;我总结了几点&#xff0c;会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点&#xff1b;当知道了为什么的时候就开始了解如何用的问题&#xff0c;如何使用my…

C#编译器优化那点事

使用C#编写程序&#xff0c;给最终用户的程序&#xff0c;是需要使用release配置的&#xff0c;而release配置和debug配置&#xff0c;有一个关键区别&#xff0c;就是release的编译器优化默认是启用的。优化代码开关即optimize开关&#xff0c;和debug开关一起&#xff0c;有以…

P3195-[HNOI2008]玩具装箱【斜率优化dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3195 题目大意 nnn个物品&#xff0c;分成若干段&#xff0c;每一段的长度为j−i∑ilrCkj-i\sum_{il}^rC_kj−i∑ilr​Ck​&#xff0c;打包价格为(长度−L)2(长度-L)^2(长度−L)2 求最小价格和。 解题思路 si∑j1iCjs_i\su…