MyBatis学习(三):解析MyBatis的SQL映射XML文件写法和使用原理

上面的两篇文章,分别是MyBatis的入门小程序和MyBatis的配置XML解析,有需要的可以先去看看这两篇文章,本篇文章,会来讲解SQL映射XML文件的写法以及如何使用。

MyBatis真正的力量在于其映射语句。这里应该是奇迹发生的地方。SQL映射的XML文件是相当简单的。如果与功能对等的JDBC相比较,你会发现它减少了大约95%的代码量。MyBatis的构建应该聚焦于SQL的XML文件的构建,使得其远离普通的方式。

SQL的映射文件有很少几个顶级元素(按照他们应该被定义的顺序)

--cache:配置给定命名空间的缓存;

--cache-ref:从其他命名空间引入缓存配置;

--resultMap:最复杂,也是最优作用的元素,用来描述如何从数据库结果集中加载你的对象,这个比较复杂,需要花点时间理解,理解了使用起来很是方便;

--sql:可以重用的SQL块,也可以被其他语句引用;

--insert:映射插入语句;

--update:映射更新语句;

--delete:映射删除语句;

--select:映射查询语句


下面将以语句本身开始描述每个元素的细节。

select

查询语句在使用MyBatis时候最常用的元素之一,查询算是在数据库中最常见的操作。

	<select id="findById" parameterType="int" resultType="com.wpl.mybatisdemo.User">
		select
		*from user where id=#{id}
	</select>
这个语句被称为findById(id="findById"),后面使用的时候,通过namespace加上id来确定该条语句,因此每一个id都是唯一的,使用了int类型的参数(parameterType="int"),并返回一个User的类型的对象(resultType="com.wpl.mybatisdemo.User")其中上面是参数类的全完限定名根据上面文章应该可以使用别名,这样以后再使用到User时候方便很多。
select元素有很多属性允许我们自己去装配,来决定每个语句的作用细节



上面需要注意的就是resultType和resultMap不能够同时使用,具体resultMap是如何使用的后面会详细的介绍。

insert,update,delete这三个在实现的时候非常的相似,这三个都没有resultType或是resultMap返回结果的设置,都只有输入参数的设置。

<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty=""
useGeneratedKeys=""
timeout="20000">

<update
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20000">

<delete
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20000">


下面是insert,update和delete的使用语句示例

<insert id="insertAuthor" parameterType="domain.blog.Author">
insert into Author (id,username,password,email,bio)
values (#{id},#{username},#{password},#{email},#{bio})
</insert>

<update id="updateAuthor" parameterType="domain.blog.Author">
update Author set
username = #{username},
password = #{password},
email = #{email},
bio = #{bio}
where id = #{id}
</update>

<delete id="deleteAuthor” parameterType="int">
delete from Author where id = #{id}
</delete>

sql

这个元素是可以被用来定义可以重用的SQL代码段,这样在重复使用某一个代码段的时候可以考虑使用sql这个属性

<sql id="userColumns">id,username,password</sql>
上述的代码段就可以包含其他语句中,例如

	<select id="findUserbyId" parameterType="int" resultType="com.wpl.mybatisdemo.User">
		select <include refid="userColumns"/>
		from user where id=#{id}
	</select>

resultMap

这是一个很重要也是一个比较难理解的一个属性吧,使用的很多,需要好好理解一下。


上面是数据库中数据,有三个字段,理论上我们在构建Javabean的时候应该要和这些字段名一样定义属性。但是如果没有这时候可以使用到resultMap这个属性。


上面是Javabean。

	<select id="findById2" parameterType="int" resultMap="userMap">
		select
		*from user where user_id=#{id}
	</select>
	<resultMap type="com.wpl.mybatisdemo.User" id="userMap">
		<id property="id" column="user_id"/><!--数据库的主键-->
		<result property="name" column="user_name"/>
		<result property="age" column="user_age"/>
	</resultMap>
这样就可以不用更改数据库的列名或是Javabean属性名,依然可以实现对数据库的查询。其中在<resultMap中 id的表示数据库的主键,其他的使用result。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值