一.MyBatis简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二.语句映射
1.select
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
2.insert、update 和 delete示例
<insert id="insertAuthor">
insert into Author (id,username,password,email,bio)
values (#{id},#{username},#{password},#{email},#{bio})
</insert>
<update id="updateAuthor">
update Author set
username = #{username},
password = #{password},
email = #{email},
bio = #{bio}
where id = #{id}
</update>
<delete id="deleteAuthor">
delete from Author where id = #{id}
</delete>
三.结果映射
1.MyBatis 中的 resultType 和 resultMap 均支持结果映射,对于一些简单的映射操作,我们可以直接使用 resultType 来完成。但如果实体类中的属性为复杂类型,或者属性名和字段名无法对应,那么我们就需要使用 resultMap 来创建自定义的映射关系。
2.association :用于对象
collection :用户集合
//查询指定老师下的所有学生
Teacher getIdTeacherByStudent(@Param("tid") int id);
<select id="getIdTeacherByStudent" resultMap="TeacherStudent">
select s.id sid,s.name sname,t.id tid,t.name tname
from student s ,teacher t
where s.tid=t.id and t.id=#{tid}
</select>
<resultMap id="TeacherStudent" type="com.xu.pojo.Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="student" ofType="com.xu.pojo.Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
四.缓存机制
mybatis的缓存分为一级和二级两种:
一级缓存:SqlSession级别的缓存,缓存的数据只在SqlSession内有效
二级缓存:mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的
一级缓存具体流程:
第一次执行select完毕会将查到的数据写入SqlSession内的HashMap中缓存起来;
第二次执行select会从缓存中查数据,如果select相同且传参数一样,那么就能从缓存中返回数据,不用去数据库,从而提高了效率。
SqlSession的HashMap存储缓存数据时,是使用[namespace:sql:参数]作为key,查询返回的语句作为value保存的。
二级缓存是基于映射文件的缓存(namespace),缓存范围比一级缓存更大,不同的SQLSession可以访问二级缓存的内容。哪些数据放入二级缓存需要自己指定。
二级缓存默认是没有开启的,需要在setting全局参数中配置开启二级缓存。
<settings>
<setting name="cacheEnabled" value="true"/> <!--默认是false:关闭二级缓存-->
<settings>