对于初学者,如果进行mybatis的学习呢?我总结了几点,会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点;当知道了为什么的时候就开始了解如何用的问题,如何使用mybatis、有几种使用方式、各种方式的优缺点,在这个阶段也会学习mybatis涉及到的一些标签的用法;当知道了基础用法之后,就开始接触一些高级的用法,例如动态sql的使用、mybatis的缓存使用等;至此,在实战项目中使用mybatis进行开发已经没有问题了。
接下来就开始深入的研究一下mybatis这个持久层的框架,在纯技术的方面进行研究,提高自己的能力。首先,大家需要了解一下mybatis的整体技术架构和工作原理;接下来,就开始了解一下mybatis各大核心组件的具体功能及其工作原理。至此,算是对mybatis的原理简单的了解一下了,由于博主的能力有限,因此对于mybatis的框架技术研究也就到这里算结束了。
最后会了解一些其他的东西,例如:mybatis的逆向工程使用、如何开发一个mybatis插件,在这里会介绍一下mybatis的分页实现等。
至此,mybatis也算是入门了,出去就可以和别人说,你稍微了解mybatis框架,对其也多少有一点自己的理解和看法了。
目录
在实际开发过程中,最多的还是使用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 是否能实现关联查询,并封装结果集呢?
其实针对于这两个问题就是下一篇要描述的 输入映射和输出映射,也就是参数的接收和结果集的映射相关问题。