浅谈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#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
PS:文末的附件已更新,这次我放到博客园里面了,不会弹出广告,放心下载,O(∩_∩)O谢谢! 这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开 ...
- 设计模式六大原则——迪米特法则(LoD)
1.背景 在图书馆借书.刚開始的时候,直接跑到对应的楼层去,到里面去转,去找要借的书,在里面溜达半天才干找到:后来知道图书馆有一个电脑查询处.然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的 ...
- 兔子--Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
错误原因: Activity打开别的Activity的时候会默认把新的Activity放到自己的task中,所以不用指定,可是别的地方就得指定了. 解决的方法:intent.addFlags(Inte ...
- Java面试题之weblogic相关问题
WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用 ...
- sql 查询结果中加入空值列
select a,b,c,''d from X; 其中d为新加列,''表示默认值为空值 原文:http://hi.baidu.com/ddduggguo/item/747d5ba5ca18fd2689 ...
- JS onkeydown控制HTML Input 只录入浮点数值
// -1) return false; return index == 0 } keychar = String.fromCharCode(keynum) var newVal = oriVal.s ...
- vue+webpack一些知识
使用mac的用户需要获取权限才可以使用npm install指令 设置node目录的权限指令 sudo chmod -R 777 /usr/local/lib/node_modules/ 大家都知道国 ...
- 前端入门HTML5扩展知识(一)
一. 请描述一个网页从开始请求到最终显示的完整过程? 1. 在浏览器中输入网址: 2. 发送至 DNS 服务器并获得域名对应的 WEB 服务器的 IP 地址: 3. 与 WEB 服务器建立 TC ...
- [Web远程wsshd]CentOS6.4搭建配置wssh
wssh 是一个 SSH 到 WebSockets 的桥,可以让你通过 HTTP 调用远程服务器的 SHELL 命令.wssh 可以让我们通过 HTTP 来调用远程的一个 shell,也就是说我们可以 ...
- shell 比较
整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b&qu ...