浅谈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 ...
随机推荐
- linux学习之十、变量的取用与配置:echo, 变量配置守则, unset
vim vim 的环境设定参数 :set nu :set nonu 就是设定与取消行号啊! :set hlsearch :set nohlsearch hlsearch 就是 high light s ...
- Unity插件之NGUI学习(1)—— 环境搭建
Unity官网http://unity3d.com/unity/download下载最新版本号4.5.4 在圣典论坛上找到破解补丁(Windows)版本号tid=18741&fid=8&quo ...
- C++中使用class和structkeyword的不同
类能够在它的第一个訪问说明符之前定义成员,对这样的成员的訪问权限依赖于类定义的方式.假设我们使用structkeyword,则定义在第一个訪问说明符之前的成员是public的,相反,假设使用class ...
- 关于nvarchar与varchar的区别
varchar(x), nvarchar(x)这里面的x指的是最大的列宽 如果存储的字符串没达到最大列宽 那么他也只获得对应的列宽的存储空间 并不意味着系统就会给它分配x的空间给它 varch ...
- C++中,new/delete和malloc/free的区别
1.new/delete是C++的操作符,而malloc/free是C中的函数. 2.new做两件事,一是分配内存,二是调用类的构造函数:同样,delete会调用类的析构函数和释放内存.而malloc ...
- 让2个并列的div根据内容自动保持同等高度js
有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到“如果右块高度比左块低,会不会导致左块的内容被 ...
- silverlight依赖属性
依赖属性(Dependency Property)和附加属性(Attached Property) 参考 http://www.cnblogs.com/KevinYang/archive/2010/0 ...
- 8. java.lang.ArithmeticException
java.lang.ArithmeticException 数学运算异常 当算术运算中出现了除以零这样的运算就会出这样的异常.
- ORACLE视图添加备注
ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.p ...
- 查看ORACLE中正在运行的存储过程 kill
1:登陆PLSQL Developer,写一个存储过程,向一个表中插入值,并运行存储过程 2:打开PLSQL Developer的命令窗口 .--终止procedure 11.select * f ...