SQL映射文件

MyBatis真正强大之处就在于SQL映射语句,也是他的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单。在之前,我们简单比对了SQL映射配置和JDBC代码,发现用SQL映射文件配置可减少50%以上代码量。并且MyBatis专注于SQL,对于开发人员来说,也可极大限度地进行SQL调优,以保证性能。

SQL映射文件常用的元素配置:

mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),其作用:

   (1)、用于区分不同的mapper,全局唯一。

   (2)、绑定DAO接口、即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类、MyBatis会通过接口的完整限定名查找到相对应的mapper配置来执行SQL语句。因此namespace的命名必须要跟接口同名。

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

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

resultMap:用来描述数据库结果集和对象的对应关系。

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

insert:映射插入语句。

update:映射更新语句。

select:映射查询语句。

delete:映射删除语句。

sql映射文件:实现简单的增删改查配置:

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	<mapper namespace="mapper.UserMapper">
		<!-- 根据id查询到一个User对象 -->
		<select id="getUser" parameterType="int" resultType="_User">
				select * from user where uId=#{uId}
		</select>
		<!-- 创建用户信息 -->
		<insert id="insertUser" parameterType="_User">
			insert into user(uName,uPwd,account) value(#{uName},#{uPwd},#{account});
		</insert>
		<!-- 修改用户信息 -->
		<update id="updateUser" parameterType="_User">
			update user set uName = #{uName},uPwd=#{uPwd},account=#{account} where uId = #{uId}
		</update>
		<!-- 删除用户信息 -->
		<delete id="deleteUser" parameterType="int">
			delete from user where uId = #{uId};
		</delete>
		<!-- 查询所有用户信息 -->
		<select id="getUserList" parameterType="int" resultType="_User">
			select * from user
		</select>
	</mapper>

SQL映射文件:实现一对多查询以及resultMap配置:

<select id="getClass2" parameterType="int" resultMap="classResultMap2">
		select * from class c
		inner join teacher t on t.t_id = c.teacher_id
		inner join student s on s.class_id = c.c_id
		where c.c_id = #{c_id};
	</select>
	<resultMap id="classResultMap2" type="bean.Class2">
		<id property="c_id" column="c_id"/>
		<result property="c_name" column="c_name"/>
		<association property="teacher" javaType="bean.Teacher">
			<id property="t_id" column="t_id"/>
			<result property="t_name" column="t_name"/>
		</association>
		<collection property="sList" ofType="bean.Student">
			<id property="s_id" column="s_id"/>
			<result property="s_name" column="s_name"/>
		</collection>
	</resultMap>

使用@param注解实现多参数入参:

@Select("select * from ebook_entry where categoryId = #{id} limit #{pageBean.startIndex},#{pageBean.pageSize}")
	public List<EBookEntry> findByCategoryIdEBookEntry(@Param(value="id")int id,@Param(value="pageBean")PageBean<EBookEntry> pageBean);

使用resultMap实现高级结果映射:

属性:

           id:resultMap唯一标识。

           type:表示该resultMap的映射结果类型(通常是java实体类)。

子节点:

           id:一般对应数据库中该行的主键id,设置此项可以提升MyBatis性能。

           result:映射到JavaBean某个“简单类型”,如基础数据类型、包装类等。

子节点id和result均可实现最基本的结果集映射,将列映射到简单数据类型的属性。这两者唯一不同的是:在比较对象实例时id将作为结果集的标识属性。有助于提高性能,特别时应用缓存和潜逃结果映射的时候。

association:映射到JavaBean的某个“复杂类型”属性,比如JavaBean类、即JavaBean内部嵌套一个复杂数据类型属性,这种情况就属于复杂类型的关联。

注意:association仅限于一对一的关联关系。

connection:connection的作用和association元素差不多一样,事实上,他们非常类似,也是映射到JavaBean的某个“复杂”属性,只不过这个属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型(集合)属性。和使用association元素一样,我们使用嵌套查询,或者从连接中嵌套结果集。

resultMap自动映射级别:

        NONE:禁止自动匹配。

       PARTIAL(默认):自动匹配所有属性,有内部嵌套(association、collection)的除外。

       FULL:自动匹配所有。

MyBatis缓存:

一级缓存:一级缓存时基于PerpetualCache(MyBatis自带)的HashMap本地缓存,作为范围为session域内,当session flush或者close之后,该session中所有cache就会清空。

二级缓存:二级缓存就是global caching,它超过session范围之外,可以被所有SqlSession共享,开启它只需要在MyBatis的核心配置文件(mybatis-config.xml)settings中设置即可。

一级缓存缓存的时SQL语句,二级缓存缓存的时结果对象。

二级缓存的配置:

配置全局缓存:

<settings>
	<setting name="cacheEnabled" value="true"/>
</settings>

配置mapper文件缓存:

<cache eviction="FIFO" 
       flushInterval="60000" 
       size="512"
       readOnly="true"/> 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值