一、动态SQL

  1、sql片段

    解决sql语句的冗余代码问题。   

<sql id="SELECT_T_USER">
    select id,name,password,birthday
</sql>

<select id="queryUserById" resultType="User">
    <include refid="SELECT_T_USER"/>
    from t_user
    where id=#{id}
</select>

  2、where子句的处理

    DAO接口代码:

public interface UserDao{

    public User queryUser(@Param("id") Integer id,@Param("name")String name,@Param("password")String password);

}

    mapper文件:

<select id="queryUser" resultType="user">
    <include refid="SELECT_T_USER"/>
    from t_user
    <trim prefix="where" prefixOverrides="and|or">
        <if test="id!=null">
            id=#{id}
        </if>
        <if test="name!=null">
            and name=#{name}
        </if>
        <if test="password!=null">
            and password=#{password}
        </if>
    </trim>
</select>

    解释:prifixOverrides="and|or"----->自动忽略最前面的and或者or。

       prefix="where"------>表示where子句。

       ps、id应该写成包装器类型。因为有可能值为null。

  3、set子句的处理

    Dao接口代码: 

public interface UserDao{

    public void modifyUser(@Param("id")Integer id,@Param("name")String name,@Param("password")String password);

}

    mapper文件:

<update id="modifyUser" parameterType="User">
    update t_user
    <trim prefix="set" suffixOverrides=",">
        <if test="name!=null">
            name=#{name},
        </if>
        <if test="password!=null">
            password=#{password}
        </if>
    </trim>
    where id=#{id}
</update>

    解释:

      predix="set"---->表示set子句。

      suffixOverrides=","------>表示自动忽略最后面的","。

  4、批量查询、删除

    sql语句:

,,)

    DAO接口:

public interface UserDao{

    public List<User> queryUserByIds(List<Integer> ids);

} 

    mapper文件:

<select id="queryUserByIds" resultType="User">
    select * from t_user where id in
    <foreach collection="list" open="(" item="item" separator="," close=")">
        #{item}
    </foreach>
</select>

    解释:

      item="item"------->是当前所遍历的元素。

    delete from t_user where id in (1,2,3)

二、缓存机制

  1、激活mybatis的全局缓存

    a、在mybatis-config.xml中添加语句:

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

    b、给对应的mapper文件加入<cache></cache>。

    c、实体要做可序列化的声明

public class User implements Serializable{
    priavte Interger id;
    private String name;
    private String password;
}

    implements Serializable,实现该接口便是声明该类可以被序列化。

  2、注意

    a、只有在sqlSession关闭的时候,mybatis才会把查询的数据放置在缓存中。

    b、脏数据问题:sqlSession在事务提交的时候,会自动清空缓存。

    c、查询操作:操作后,应该关闭sqlSession确保查询的数据可以被缓存。

        增删改操作:操作后,应该进行事务提交,以避免脏数据问题。

 

      

浅谈Mybatis(三)的更多相关文章

  1. 浅谈C++三种传参方式

    浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...

  2. 浅谈Mybatis(一)

    一.MyBatis引言 1.基本概念 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...

  3. 浅谈mybatis如何半自动化解耦

    在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...

  4. 浅谈mybatis如何半自动化解耦和ORM实现

    在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...

  5. 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程

    前言 最近开始了SpringBoot相关知识的学习,作为为目前比较流行.用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点.作为Spring框架项目,肯定少不了与数据库持 ...

  6. 浅谈mybatis中的#和$的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  7. 浅谈Servlet(三)

    一.三种作用域 作用域:web开发中用于存储和获得数据. 1.request 一次请求有效,在forward跳转时可用request作用域传递数据. 2.session client不变,sessio ...

  8. 浅谈TCP三次握手和四次挥手

    学习三次握手和四次挥手前,先了解下几个基础的概念. Seq:数据段序号,我们都知道TCP是提供有序传输的,有序传输的基础就是数据段序号,接收方在收到发送方乱序包的情况下可以根据Seq进行重新排序,确保 ...

  9. 浅谈 Mybatis中的 ${ } 和 #{ }的区别

    好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from us ...

随机推荐

  1. Linux学习之十三、快捷键与通配符、数据流重导向

    通配符与特殊符号 接下来让我们利用通配符来玩些东西吧!首先,利用通配符配合 ls 找檔名看看: [root@www ~]# LANG=C              <==由于与编码有关,先配置语 ...

  2. wdos相关问题解答

    wdos系统自动分区的大小说明 wdOS系统提供了可自动分区和手工分区 自动分区适用大部分新手或对分区没有特的要求的人 手工分区适用老手或熟悉分区或有特别需求的人 具体用哪个,没多大区别,关键是看应用 ...

  3. Sass介绍及入门教程

    Sass是什么? Sass是"Syntactically Awesome StyleSheets"的简称.那么他是什么?其实没有必要太过于纠结,只要知道他是“CSS预处理器”中的一 ...

  4. Java基础学习笔记2-循环

    while循环与do while循环: while循环的格式: while(条件表达式) { 执行语句; } do while循环格式: do { 执行语句; } while(条件表达式); do w ...

  5. html系列教程--元素

    HTML 元素语法 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 某些 HTML 元素具有空内容(empty content) 空元素在开始标签 ...

  6. 利用Gson进行String和对象的转换

    利用Gson进行String和对象的转换 /** * 从JsonStr中解析BUserBase * @param jsonStr * @return */ public static BUserBas ...

  7. oracle查看系统资源占用情况

    1,连上服务器,使用top命令,可以查看cpu使用率以及内存的使用情况等等,还有当前各用户的使用情况 2,用pl/sql developper,tool里面选sessions,就可以看到当前sessi ...

  8. User cannot be resolved to a type

    出现 User cannot be resolved to a type 不知道具体问题出在哪里但是我经过将全路径输入并保存后错误消失 将User选上,然后点击保存就可以了! 最后我发现错误消失了!

  9. Linux程序设计 读笔2 Shell脚本

    第二章 Shell程序设计 四.管道和重定向 1 重定向输出 ls -l > lsoutput.txt ps >> lsoutput.txt >>表示附加到一个文件中 文 ...

  10. C#获得命令提示符输出

    原文:http://blog.csdn.net/abrahu/article/details/6611504 C#获得命令提示符输出 分类: c#应用程序2011-07-16 23:34 600人阅读 ...