一、动态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>
  用于不支持自增长主键的数据库, 尽量避免写这个东西

符号:

&lt; < 小于号
&gt; > 大于号
&amp; & 和
&apos; ’ 单引号
&quot; " 双引号

<![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,分页,二进制存入数据库图片的更多相关文章

  1. mybatis框架(5)---动态sql

    那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态S ...

  2. mybatis框架中动态SQL的编写

    1.动态SQL:在SQL语句中加入流程控制.比如加入if,foreach等. 重点掌握if语句: 案例1: <update id="updateItem" parameter ...

  3. Spring boot 配置 mybatis xml和动态SQL 分页配置

    更新时间 2018年4月30日23:27:07 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  4. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  5. 【mybatis深度历险系列】mybatis中的动态sql

    最近一直做项目,博文很长时间没有更新了,今天抽空,学习了一下mybatis,并且总结一下.在前面的博文中,小编主要简单的介绍了mybatis中的输入和输出映射,并且通过demo简单的介绍了输入映射和输 ...

  6. mybatis 详解------动态SQL

    mybatis 详解------动态SQL   目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,o ...

  7. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  8. mybatis中的动态SQL

    在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...

  9. Mybatis映射文件动态SQL语句-01

    因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...

随机推荐

  1. FBI Warning

    FBI Warning... --------------------------- 电影中的片头部分:<正宗的FBI Warning>: ========== 翻译: fbi warni ...

  2. 再起航,我的学习笔记之JavaScript设计模式14(桥接模式)

    桥接模式 桥接模式(Bridge): 在系统沿着多个维度变化的同时,又不增加其复杂度并已达到解耦 从定义上看桥接模式的定义十分难以理解,那么我们来通过示例来演示什么是桥接模式. 现在我们需要做一个导航 ...

  3. 这可能是新手最容易入门的JVM讲解(不过是一场恋爱)

    作者:请叫我红领巾,转载请注明出处http://www.cnblogs.com/xxzhuang/p/7453746.html 一.写在前面 首先,本篇文章并没有涉及原理,而是在笔者撸了<深入理 ...

  4. JS函数-我调用自己试试看

    前言 最近在读<JavaScript语言精粹>,对递归函数有了进一步的认识,希望总结下来: 递归是一种强大的编程技术,他把一个问题分解为一组相似的子问题,每一问题都用一个寻常解去解决.递归 ...

  5. amoeba

    Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...

  6. python专题-异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/cmt110/p/7464748.ht ...

  7. Grails笔记四:Groovy特性小结

    在学习Grails的时候与Groovy打交道不可避免,虽然不必太深刻,但多知道一些特性也是很有帮助的~ 1.相除后获取整数 使用intdiv()方法可以获得整数,注意点是这个方法只适用两个整数相除,浮 ...

  8. Centos 6启动流程详解

    author:JevonWei 版权声明:原创作品 Centos6 启动流程 POST开机自检 当按下电源键后,会启动ROM芯片中的CMOS程序检查CPU.内存等硬件设备是否正常运行,CMOS中的程序 ...

  9. Python Celery队列

    Celery队列简介: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 使用 ...

  10. MySQL的JOIN(二):JOIN原理

    表连接算法 Nested Loop Join(NLJ)算法: 首先介绍一种基础算法:NLJ,嵌套循环算法.循环外层是驱动表,循坏内层是被驱动表.驱动表会驱动被驱动表进行连接操作.首先驱动表找到第一条记 ...