Mybatis——映射文件,缓存,整合

Posted lemonades

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis——映射文件,缓存,整合相关的知识,希望对你有一定的参考价值。

映射文件学习过程: 1.增删改查;2.获取自增主键;3.参数处理:单个,多个参数;4.查询返回值处理;5.动态SQl;6.缓存;7.整合Spring

 1.增删改查:

    <!--id 对应里边的方法-->
    <select id="getStudentById" resultType="mybatis.model.Student">
    select * from student where id = #id
    </select>
    <!--void  addStudent(Student student);-->
    <insert id="addStudent" parameterType="mybatis.model.Student" useGeneratedKeys="true" keyProperty="id">
        insert into student (name,address,phone) values (#name,#address,#phone)
    </insert>
    <!--void updateStudent(Student student);-->
    <update id="updateStudent" >
        update student set name=#name,address=#address,phone=#phone where id=#id
    </update>
    <!--void deleteStudent(int id);-->
    <delete id="deleteStudent">
        delete from student where id=#id
    </delete>

 

 

2.获取自增主键的值:useGeneratedKeys="true" keyProperty="id"  

 

    <!--void  addStudent(Student student);-->
    <insert id="addStudent" parameterType="mybatis.model.Student" useGeneratedKeys="true" keyProperty="id">
        insert into student (name,address,phone) values (#name,#address,#phone)
    </insert>

 3.传入SQL语句的参数处理:

技术图片

技术图片

 

 4.查询返回值处理:

  1)ResultMap的使用:自定义resultMap

    <!--resultMap的使用-->
    <resultMap id="studentMap" type="mybatis.model.Student">
        <!--主键-->
        <id column="id" property="id"></id>
        <!--其他列-->
        <result column="name" property="name"/>
        <result column="address" property="address"/>
        <result column="phone" property="phone"/>
    </resultMap>
    <!--Student getStudentById_resultMap(int id);-->
    <select id="getStudentById_resultMap" resultMap="studentMap">
        select * from student where id=#id
    </select>

 

            //测试使用ResultMap
            Student student2 = studentMapper.getStudentById_resultMap(2);
            session.commit();
            //打印对象
            System.out.println(student2);

   2)ResultMap的使用:(里边各种各样的标签属性 ) A.关联查询:对级联属性的封装;B. 使用association指定哪个属性是关联对象; C.使用association分步查询(并设置属性可 进行延迟加载 / 懒加载);

             D. 使用collection指定哪个属性是关联对象(这个属性有多个,所以是一个集合);E.使用collection分步查询(并设置属性可 进行延迟加载 / 懒加载);

                F.在ResultMap里边,使用鉴别器:discriminator

 

 5.动态SQl:动态地拼接SQL语句

    <if test="  id != null "> id=# id </if> : 一般从传进来的参数进行判断。 test里边使用OGNL语法规则

    <where>  </where>   用来代替SQL语句里的where 条件,将所有的查询条件包括在内,如果条件多出来 and 和 or 会自动被删掉(和 <if> and name=#name</if> 嵌套使用)。

    <trim></trim> 自定义字符串截取规则,比<where>标签的截取更加灵活,可以给整个字符串加上(或去掉)前后缀

    <choose></choose> 分支选择,相当于switch语句 里面有 <when>和<otherwise>,相当于 switch的 case 和default 语句

    <set></set>相当于update  ----->update table_name set id=1, name=‘yang‘  语句中的set,会自动去掉<if>标签后多出来的 , 逗号。 与<where>标签类似,可用<trim>标签代替   

    <foreace>批量保存信息

 

    动态sql有两个内置参数:_parameter   _databaseId: 可以用于<if></if>标签里面进行判断

    <bind>标签可以将参数绑定,再拼接符号,如%Name%  ,再从SQL语句中使用

    *  SQL片段:抽取可重用的SQL片段

6.缓存:

https://www.cnblogs.com/whgk/p/6722497.html

使一级缓存失效的四种情况:

    1)使用不同sqlsession

    2)清空sqlsession.clearCache();      ------>清理的是一级缓存

    3)查询条件不同

    4)查询条件相同,两次查询之间有进行  增删改查 ,相对应的缓存会被清理。

    5)给查询的mapper标签设置flushCache="true"(select默认为false, insert、delete、update默认true),每次调用映射文件里的方法,都会清理掉缓存。

 注:二级缓存时,sqlsession关闭后,缓存才会从一级缓存提交到二级缓存。

    6)localCacheScrop 本地缓存作用域 也可以设置一级缓存不起作用

 

EHcahe:

    入门:https://www.cnblogs.com/jingmoxukong/p/5975994.html

以上是关于Mybatis——映射文件,缓存,整合的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis Spring整合配置映射接口类与映射xml文件

springboot整合mybatis使用xml映射文件和使用注解两种方式的切换

Mybatis学习总结——全局配置文件SQL映射文件动态SQL缓存机制

03.redis+ssm整合(mybatis二级缓存)

MyBatis学习-XML映射文件(上)

springboot整合mybatis(映射文件方式和注解方式)