Mybatis(1)——映射文件,缓存,整合

别来无恙 提交于 2019-11-28 03:08:41

映射文件学习过程: 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!