码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈Mybatis(三)

时间:2016-09-25 22:14:45      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

一、动态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语句:

select * form t_user where id in(1,2,3)

    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(三)

标签:

原文地址:http://www.cnblogs.com/liquidxu/p/5906919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!