首页 > 代码库 > 浅谈Mybatis(三)
浅谈Mybatis(三)
一、动态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(三)