MyBatis框架(三)动态SQL,分页,二进制存入数据库图片
一、动态sql语句,分页
1, <if>条件
<if test="key!=null">
拼接sql语句
</if>
2, <choose><when><otherwise>
注意:只能执行一个分支
<choose>
<when test="key=='value'">
拼接sql语句
</when>
<when test="key=='value'">
拼接sql语句
</when>
<otherwise>
前两者都不符合时执行
</otherwise>
</choose>
3, <where>
自动添加where关键字
如果where子句第一句中有 or 或者 and 则删除第一个
4, <trim>
功能与<where>类似, 并且提供了前缀, 后缀的添加, 更加灵活
5, <foreach>
用来遍历传入的集合参数
item(定义集合中每个对象的名字),
collection(集合的对象的名字),
open(定义开始的字符),
close(定义结束的字符),
separator(定义分割的字符)
index(定义元素的索引)
6, <set>
主要用于update
自动加上set关键字
自动剔除最后一个 ","
7, <sql>
经常用于一些常用或者固定的语句, 在外面定义一个语句, 在各种标签中引入
使用include, 相当于直接写在上面
8, <selectKey>
用于不支持自增长主键的数据库, 尽量避免写这个东西
符号:
< < 小于号
> > 大于号
& & 和
' ’ 单引号
" " 双引号
<![CDATA[]]>
例子:
model:
package model;
import java.util.Date;
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Integer sal;
private Integer comm;
private Integer deptno;
private Integer sex;
private Dept dept;
public Emp() {
super();
// TODO Auto-generated constructor stub
}
public Emp(Integer empno, String ename, String job, Integer mgr, Date hiredate, Integer sal, Integer comm, Integer deptno, Integer sex,
Dept dept) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
this.sex = sex;
this.dept = dept;
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Integer getComm() {
return comm;
}
public void setComm(Integer comm) {
this.comm = comm;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate=" + hiredate
+ ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + ", sex=" + sex + ", dept=" + dept + "]";
}
}
package model;
public class PageBean {
private int page;
private int rows;
private int firstRow;
private int maxRow;
public PageBean() {
this.page = 1;
this.rows = 10;
this.firstRow = (page-1)*rows;
this.maxRow = page*rows;
}
public PageBean(int page, int rows) {
this.page = page;
this.rows = rows;
this.firstRow = (page-1)*rows;
this.maxRow = page*rows;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getFirstRow() {
return firstRow;
}
public void setFirstRow(int firstRow) {
this.firstRow = firstRow;
}
public int getMaxRow() {
return maxRow;
}
public void setMaxRow(int maxRow) {
this.maxRow = maxRow;
}
}
mapper:
package mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import model.Emp;
import model.PageBean;
public interface EmpMapper {
List<Emp> selectEmpByMapParam(Map<String,Object> map);
List<Emp> selectEmpByChoose(Map<String ,Object> map);
List<Emp> selectEmpByWhere(Map<String ,Object> map);
List<Emp> selectEmpByTrim(Map<String ,Object> map);
List<Emp> selectEmpByForeachMap(Map<String ,Object> map);
List<Emp> selectEmpByForeachList(List<Integer> idlist);
List<Emp> selectEmpByForeachInteger(Integer[] array);
int updateEmpBySet(Emp e);
int insertEmp(Emp e);
List<Emp> selectEmp(RowBounds rbs);
List<Emp> selectEmpByPage(PageBean pg);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmpMapper">
<select id="selectEmp" parameterType="Map" resultType="Emp">
select * from p_emp e
</select>
<select id="selectEmpByMapParam" parameterType="Map" resultType="Emp">
select * from p_emp e
<if test="sex!=null">
where e.sex=#{sex}
</if>
</select>
<select id="selectEmpByChoose" parameterType="Map" resultType="Emp">
select * from p_Emp e where 1=1
<choose>
<when test="ename!=null">
and e.ename like #{ename}
</when>
<when test="job!=null">
and e.job like #{job}
</when>
<otherwise>
and e.ssex = '1'
</otherwise>
</choose>
</select>
<select id="selectEmpByWhere" parameterType="Map" resultType="Emp">
select * from p_emp e
<where>
<if test="ename!=null">
and e.ename like #{ename}
</if>
<if test="job!=null">
and e.job like #{job}
</if>
</where>
</select>
<select id="selectEmpByTrim" parameterType="Map" resultType="Emp">
select * from p_Emp e
<trim prefix="where" prefixOverrides="and|or">
<if test="ename!=null">
and e.ename like #{ename}
</if>
<if test="job!=null">
and e.job like #{job}
</if>
</trim>
</select>
<select id="selectEmpByForeachMap" resultType="Emp">
select * from p_Emp e where e.empno in
<foreach collection="idList" item="aaa" open="(" close=")" separator=",">
#{aaa}
</foreach>
</select>
<select id="selectEmpByForeachList" resultType="Emp">
select * from p_Emp e where e.empno in
<foreach collection="list" item="aaa" open="(" close=")" separator=",">
#{aaa}
</foreach>
</select>
<select id="selectEmpByForeachInteger" resultType="Emp">
select * from p_Emp e where e.empno in
<foreach collection="array" item="aaa" open="(" close=")" separator=",">
#{aaa}
</foreach>
</select>
<update id="updateEmpBySet" parameterType="Emp">
update p_Emp e
<set>
<if test="ename!=null">
e.ename=#{ename},
</if>
<if test="job!=null">
e.job=#{job},
</if>
<if test="mgr!=null">
e.mgr=#{mgr},
</if>
<if test="hiredate!=null">
e.hiredate=#{hiredate},
</if>
<if test="sal!=null">
e.sal=#{sal}
</if>
</set>
where e.empno=#{empno}
</update>
<sql id="pageSqlPre">
SELECT * FROM (
</sql>
<sql id="pageSqlSuf">
WHERE ROWNUM <![CDATA[<=]]> 9) r WHERE r.rnum>6
</sql>
<select id="selectEmpBySql" resultType="Emp">
<include refid="pageSqlPre"></include>
SELECT e.*, ROWNUM rnum FROM p_Emp e
<include refid="pageSqlSuf"></include>
</select>
<!-- 不建议使用
<selectKey keyProperty="empno" order="BEFORE" resultType="int">
select test1.nextval from dual
</selectKey> -->
<sql id="pagePre">
SELECT * FROM (
</sql>
<sql id="pageSuf">
WHERE ROWNUM <![CDATA[<=]]> #{maxRow}) r
WHERE r.rnum > #{firstRow}
</sql>
<select id="selectEmpByPage" resultType="Emp" parameterType="PageBean">
<include refid="pagePre"></include>
select e.*, rownum rnum from p_emp e
<include refid="pageSuf"></include>
</select>
</mapper>
测试:
package test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import mapper.DeptMapper;
import mapper.EmpMapper;
import model.Dept;
import model.Emp;
import model.PageBean;
import oracle.net.aso.e;
import util.MyBatisUtil;
public class JUTest {
private SqlSession ss;
private EmpMapper em;
private DeptMapper dm;
@Before
public void setUp() throws Exception {
ss = MyBatisUtil.getSession();
em = ss.getMapper(EmpMapper.class);
dm = ss.getMapper(DeptMapper.class);
}
@After
public void tearDown() throws Exception {
MyBatisUtil.destory(ss);
}
@Test
public void test() {
Map map=new HashMap();
//map.put("sex", "1");
// List<Emp> elist = em.selectEmpByMapParam(map);
// for(Emp e:elist){
// System.out.println(e);
// }
//map.put("ename", "T%");
// map.put("job", "推销员");
// List<Emp> elist=em.selectEmpByChoose(map);
// for(Emp e:elist){
// System.out.println(e);
// }
// map.put("ename", "T%");
// map.put("job", "推销员");
// List<Emp> elist =em.selectEmpByWhere(map);
// for(Emp e:elist){
// System.out.println(e);
// }
// map.put("ename", "T%");
// map.put("job", "推销员");
// List<Emp> elist =em.selectEmpByTrim(map);
// for(Emp e:elist){
// System.out.println(e);
// }
// List<Integer> idlist=new ArrayList<Integer>();
// idlist.add(7369);
// idlist.add(7521);
// idlist.add(7782);
// //直接传list集合,xml中collection属性为传入类型
// //List<Emp> elist=em.selectEmpByForeachList(idlist);
// map.put("idList", idlist);
// //将集合加到map中,传map,xml中collection属性为map的键
// //List<Emp> elist=em.selectEmpByForeachMap(map);
// //传集合,xml中collection属性为传入类型
// Integer[] ia={7369,7521};
// List<Emp> elist=em.selectEmpByForeachInteger(ia);
// for(Emp e:elist){
// System.out.println(e);
// }
// Emp e=new Emp();
// e.setEmpno(7010);
// e.setEname("修改");
// e.setSal(999);
// int ea=em.updateEmpBySet(e);
// System.out.println(ea);
//分页1 设置RowBounds,然后传入,自动分页
// int page = 2;
// int rows = 5;
//
// int limit = (page-1)*rows;
// int offset = rows;
//
//
// RowBounds rbs = new RowBounds(limit, offset);
// List<Emp> elist = em.selectEmp(rbs);
// for(Emp e:elist){
// System.out.println(e);
// }
//分页2 利用实体类,sql引入等
PageBean pb = new PageBean(1, 5);
List<Emp> elist = em.selectEmpByPage(pb);
for(Emp f : elist) {
System.out.println(f);
}
}
}
二、二进制存入图片
将图片转换为字节数组一Blob格式存入取出数据库
例子:
model:
package model;
public class Puser {
private String pname;
private String ppassword;
private byte[] pprcture;
public Puser() {
super();
// TODO Auto-generated constructor stub
}
public Puser(String pname, String ppassword, byte[] pprcture) {
super();
this.pname = pname;
this.ppassword = ppassword;
this.pprcture = pprcture;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPpassword() {
return ppassword;
}
public void setPpassword(String ppassword) {
this.ppassword = ppassword;
}
public byte[] getPprcture() {
return pprcture;
}
public void setPprcture(byte[] pprcture) {
this.pprcture = pprcture;
}
}
mapper:
package mapper;
import java.util.List;
import model.Puser;
public interface PuserMapper {
int insertPuser(Puser p);
Puser getUser(String pname);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.PuserMapper">
<insert id="insertPuser">
insert into puser values(#{pname},#{ppassword},#{pprcture})
</insert>
<select id="getUser" parameterType="String" resultType="puser">
select * from puser a where a.pname=#{pname}
</select>
</mapper>
测试:
package test;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import mapper.PuserMapper;
import model.Puser;
import util.MyBatisUtil;
public class JUtest {
private SqlSession ss;
private PuserMapper pm;
@Before
public void setUp() throws Exception {
ss = MyBatisUtil.getSession();
pm=ss.getMapper(PuserMapper.class);
}
@After
public void tearDown() throws Exception {
MyBatisUtil.destory(ss);
}
@Test
public void test() {
/*File file=new File("E:\\2017-4-1手机 备份\\2017·1·15备份\\kowy.jpg");
InputStream in =null;
if(file.exists()){
try {
in = new FileInputStream(file);
byte[] bs=new byte[in.available()];
in.read(bs);
Puser p=new Puser("鑫月半","666s",bs);
int a=pm.insertPuser(p);
System.out.println(a);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}else{
System.out.println("文件有问题");
}*/
File outfile = new File("E:\\sanpang.jpg"); // 目标文件的地址
try {
OutputStream out = new FileOutputStream(outfile);
Map m=new HashMap();
//m.put("pname","鑫月半")
Puser user = pm.getUser("鑫月半");
byte[] bs = user.getPprcture();
System.out.println(bs.toString());
//out.write(bs);
//out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
MyBatis框架(三)动态SQL,分页,二进制存入数据库图片的更多相关文章
- mybatis框架(5)---动态sql
那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态S ...
- mybatis框架中动态SQL的编写
1.动态SQL:在SQL语句中加入流程控制.比如加入if,foreach等. 重点掌握if语句: 案例1: <update id="updateItem" parameter ...
- Spring boot 配置 mybatis xml和动态SQL 分页配置
更新时间 2018年4月30日23:27:07 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> & ...
- JavaWeb_(Mybatis框架)Mapper动态代理开发_三
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- 【mybatis深度历险系列】mybatis中的动态sql
最近一直做项目,博文很长时间没有更新了,今天抽空,学习了一下mybatis,并且总结一下.在前面的博文中,小编主要简单的介绍了mybatis中的输入和输出映射,并且通过demo简单的介绍了输入映射和输 ...
- mybatis 详解------动态SQL
mybatis 详解------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,o ...
- Mybatis入门之动态sql
Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...
- mybatis中的动态SQL
在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...
- Mybatis映射文件动态SQL语句-01
因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...
随机推荐
- Oracle教程之学习笔记
Oracle教程之学习笔记... ----------------------------------- Oracle教程:---学习笔记: ============================= ...
- BotVS趋势交易策略-RSI
BotVS趋势交易策略-RSI, 基于Python实现. RSI简单买卖测试, 默认 70-100卖出,0-30买入 参数 代码 import math def adjustFloat(v): ret ...
- 【Linux】修改Linux字符集
一.查看字符集 常见的几种方法: (1) [root@devhxyw03 ~]# echo $LANG zh_CN.GBK (2) [root@devhxyw03 ~]# env | grep LAN ...
- 永久关闭selinux | 防火墙
关闭SELinux的两种方法 1 永久方法 – 需要重启服务器 修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器. 2 临时方法 – 设置系统参数 ...
- 小爬新浪新闻AFCCL
1.任务目标: 爬取新浪新闻AFCCL的文章:文章标题.时间.来源.内容.评论数等信息. 2.目标网页: http://sports.sina.com.cn/z/AFCCL/ 3.网页分析 4.源代码 ...
- split添加limit参数
String str = "I love you"; /**这里被分割为I 和love you**/ String[] spiltStr = str.spit(" &qu ...
- 谈谈.NET,Java,php
开通博客后,一直都是转点别的朋友写的有意思的博文,今天我来写我在博客园的第一篇文章,说的不对的地方请你指正.希望本文能为一些准备学习编程的朋友有一点帮助. 开发桌面程序一直都是c语言,c++的天下,因 ...
- angularJS+Ionic移动端图片上传的解决办法
前端开发中经常会碰到图片上传的问题,网上的解决办法很多,可是有些图片上传的插件会有一些附属的插件,因此因为一个图片上传的问题可能额需要引入其他插件到项目中,久而久之项目会不伦不类,有时候插件之间也会有 ...
- C语言中复数运算及调用blas,lapack中复数函数进行科学计算
C语言中常用的数据类型主要int, float ,double ,char 等,但在科学运算中复数扮演着重要角色.这里讲下C语言中的复数运算以及如何调用blas,lapack库中的复数函数来进行科学计 ...
- Jquery 绑定标签事件
为子元素绑定: $('#foreachResult').delegate('td', 'click', function () { alert($(this).text()); ...