浅谈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语句:
,,)
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(三)的更多相关文章
- 浅谈C++三种传参方式
浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...
- 浅谈Mybatis(一)
一.MyBatis引言 1.基本概念 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...
- 浅谈mybatis如何半自动化解耦
在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...
- 浅谈mybatis如何半自动化解耦和ORM实现
在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...
- 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程
前言 最近开始了SpringBoot相关知识的学习,作为为目前比较流行.用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点.作为Spring框架项目,肯定少不了与数据库持 ...
- 浅谈mybatis中的#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...
- 浅谈Servlet(三)
一.三种作用域 作用域:web开发中用于存储和获得数据. 1.request 一次请求有效,在forward跳转时可用request作用域传递数据. 2.session client不变,sessio ...
- 浅谈TCP三次握手和四次挥手
学习三次握手和四次挥手前,先了解下几个基础的概念. Seq:数据段序号,我们都知道TCP是提供有序传输的,有序传输的基础就是数据段序号,接收方在收到发送方乱序包的情况下可以根据Seq进行重新排序,确保 ...
- 浅谈 Mybatis中的 ${ } 和 #{ }的区别
好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from us ...
随机推荐
- 网易云课堂_程序设计入门-C语言_第一周:简单的计算程序_1逆序的三位数
1 逆序的三位数(5分) 题目内容: 程序每次读入一个正三位数,然后输出逆序的数字.注意,当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 输入格式: 每个测试是一个3 ...
- ICSharpCode.SharpZipLib.Zip
//压缩整个目录下载 var projectFolder = Request.Params["folder"] != null ? Request.Params["fol ...
- Mantis 1.1.0 报告问题中设置必填项或取消必填项[Z]
打开/mantis/core/bug_api.php,其中有类似下面的语句 if ( is_blank( $c_summary ) ) { error_parameters( lang_get( ...
- oracle查看系统资源占用情况
1,连上服务器,使用top命令,可以查看cpu使用率以及内存的使用情况等等,还有当前各用户的使用情况 2,用pl/sql developper,tool里面选sessions,就可以看到当前sessi ...
- OC中给我们提供的一个技术:谓词(NSPredicate).note
OC中给我们提供的一个技术:谓词(NSPredicate)OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到 ...
- Request和Response详解
转自:http://zhidao.baidu.com/link?url=8BI0cjlcFdBSJKHTZlpo874eqtbTJoZfrh3miQgM_05RvSER8skPiBc1wSPZtXT8 ...
- 20151120 jsp相关
jsp 声明表示.代码片段及引用 <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...
- HighlightingSystem插件使用(边缘发光)
插件链接: http://pan.baidu.com/s/1dFwkaTr 密码: nw2c 导入Unity里面可能会报错,不过没关系,直接注释掉就可以了,我用的是Unity5.1的版本 可以看到如下 ...
- Phalcon 性能最高的php框架没有之一
最近有个朋友说他们现在在用Phalcon框架开发项目,明显感觉性能有很大的提升,所有着手学习下这个高性能框架,网上是这样说的“虽然以C语言编写达到较高的效能,但相对的一项缺点就是在服务器上必须拥有管理 ...
- Android 调用系统通讯录
这个过程有三步:1)许可向你的应用程序的manifest中添加读取通讯录数据的许可 <uses-permission android:name="android.permission ...