Mybatis的动态sql----where,trim,set,foreach

jdbc.properties

[plain]  view plain  copy
  1. url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl  
  2. driverClass=oracle.jdbc.OracleDriver  
  3. account=scott  
  4. password=tiger  


mybatis.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3.   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.       
  7.     <properties resource="cn/et/mybatis/lesson04/jdbc.properties">  
  8.           
  9.     </properties>  
  10.   
  11.   <!--  
  12.     配置连接数据库的环境   development开发环境 
  13.   -->  
  14.   <environments default="development">  
  15.     <environment id="development">  
  16.       <!-- 事务交给JDBC来管理   也就是通过 Connection的 commit和rollback管事事务 -->  
  17.       <transactionManager type="JDBC"/>  
  18.       <dataSource type="POOLED">  
  19.         <property name="driver" value="${driverClass}"/>  
  20.         <property name="url" value="${url}"/>  
  21.         <property name="username" value="${account}"/>  
  22.         <property name="password" value="${password}"/>  
  23.       </dataSource>  
  24.     </environment>  
  25.   </environments>  
  26.     
  27.   <mappers>  
  28.     <mapper class="cn.et.mybatis.lesson04.dynamicSql.EmpMapper"/>  
  29.   </mappers>  
  30. </configuration>  


Emp实体类:

[java]  view plain  copy
  1. package cn.et.mybatis.lesson04.dynamicSql;  
  2.   
  3. public class Emp {  
  4.   
  5.     private String empNo;  
  6.       
  7.     private String ename;  
  8.   
  9.     private String sal;  
  10.   
  11.     public String getEmpNo() {  
  12.         return empNo;  
  13.     }  
  14.   
  15.     public void setEmpNo(String empNo) {  
  16.         this.empNo = empNo;  
  17.     }  
  18.   
  19.     public String getEname() {  
  20.         return ename;  
  21.     }  
  22.   
  23.     public void setEname(String ename) {  
  24.         this.ename = ename;  
  25.     }  
  26.   
  27.     public String getSal() {  
  28.         return sal;  
  29.     }  
  30.   
  31.     public void setSal(String sal) {  
  32.         this.sal = sal;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String toString() {  
  37.         return "Emp [empNo=" + empNo + ", ename=" + ename + ", sal=" + sal  
  38.                 + "]";  
  39.     }  
  40.   
  41.       
  42.       
  43. }  


EmpMapper:

[java]  view plain  copy
  1. package cn.et.mybatis.lesson04.dynamicSql;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.apache.ibatis.annotations.Param;  
  6. import org.apache.ibatis.annotations.Select;  
  7. import org.apache.ibatis.annotations.Update;  
  8.   
  9.   
  10. public interface EmpMapper {  
  11.   
  12.     /** 
  13.      * where 
  14.      * 如果其中有和任意一条if语句成功,则自动拼接WHERE字符串 
  15.      * 并覆盖首个and|or 
  16.      *  
  17.      * 没有一个if语句条件成立 
  18.      * select * from emp  
  19.      *  
  20.      * 有if语句条件成立 
  21.      * select * from emp WHERE ename=? and sal=?  
  22.      * @param emp 
  23.      * @return 
  24.      */  
  25.     @Select(  
  26.             {"<script>" +  
  27.             "select * from emp" +  
  28.             "<where>" +  
  29.             "<if test='ename!=null'> and ename=#{ename}</if>" +  
  30.             "<if test='sal!=null'> and sal=#{sal}</if>" +  
  31.             "</where>" +  
  32.             "</script>"  
  33.             }  
  34.     )  
  35.     public List<Emp> queryEmpWhere(Emp emp);  
  36.       
  37.       
  38.     /** 
  39.      * trim可以替换后面拼接字符串的前缀和后缀 
  40.      * 当拼接 and ename=#{ename}和 and sal=#{sal}时 
  41.      * 这里只需要首个and替换成 where就可以了 
  42.      *  
  43.      * select * from emp where ename=? and sal=?  
  44.      * 这里首个拼接的字符串的and就被替换成了where 
  45.      *  
  46.      * @param emp 
  47.      * @return 
  48.      */  
  49.     @Select(  
  50.             {"<script>" +  
  51.             "select * from emp" +  
  52.             "<trim prefix='where' prefixOverrides='and' >" +  
  53.             "<if test='ename!=null'> and ename=#{ename}</if>" +  
  54.             "<if test='sal!=null'> and sal=#{sal}</if>" +  
  55.             "</trim>" +  
  56.             "</script>"  
  57.             }  
  58.     )  
  59.     public List<Emp> queryEmpTrim(Emp emp);  
  60.       
  61.     /** 
  62.      * trim 
  63.      * 条件符合增加前缀 set 
  64.      * 并把最后的,替换成空字符串 
  65.      *  
  66.      * @param emp 
  67.      */  
  68.     @Update(  
  69.             {"<script>" +  
  70.             "update emp" +  
  71.             "<trim prefix='set' prefixOverrides=''  suffix='' suffixOverrides=',' >" +  
  72.             "<if test='ename!=null'> ename=#{ename},</if>" +  
  73.             "<if test='sal!=null'> sal=#{sal},</if>" +  
  74.             "</trim>" +  
  75.             "where empno=#{empno}" +  
  76.             "</script>"  
  77.             }  
  78.     )  
  79.     public void updateEmpTrimSuffix(Emp emp);  
  80.       
  81.       
  82.     /** 
  83.      * set 
  84.      * 条件符合增加前缀 set 
  85.      * 并把最后的,替换成空字符串 
  86.      * @param emp 
  87.      */  
  88.     @Update(  
  89.             {"<script>" +  
  90.             "update emp" +  
  91.             "<set>" +  
  92.             "<if test='ename!=null'> ename=#{ename},</if>" +  
  93.             "<if test='sal!=null'> sal=#{sal},</if>" +  
  94.             "</set>" +  
  95.             "where empno=#{empno}" +  
  96.             "</script>"  
  97.             }  
  98.     )  
  99.     public void updateEmpSet(Emp emp);  
  100.       
  101.     /** 
  102.      * set形状添加set 结尾去掉逗号 
  103.      * open就是字符串拼接的开头,那这里便是( 
  104.      * close就是字符串拼接的结尾,那这里便是) 
  105.      * collection要遍历的集合 
  106.      * item迭代变量 
  107.      * separator分隔符 
  108.      *  
  109.      * @param emp 
  110.      */  
  111.     @Select(  
  112.             {"<script>" +  
  113.             "select * from emp where empno in" +  
  114.             "<foreach collection='list' open='('  close=')' separator=',' item='myVar'>" +  
  115.             "#{myVar}" +  
  116.             "</foreach>" +  
  117.             "</script>"  
  118.             }  
  119.     )  
  120.     public List<Emp> queryEmpByForeach(List list);  
  121.       
  122.       
  123.       
  124. }  



测试类:

[java]  view plain  copy
  1. package cn.et.mybatis.lesson04.dynamicSql;  
  2.   
  3. import java.io.InputStream;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10. import org.junit.Test;  
  11.   
  12. public class TestMybatis {  
  13.       
  14.     public static SqlSession getSession(){  
  15.         String resource = "/cn/et/mybatis/lesson04/mybatis.xml";  
  16.         InputStream inputStream = TestMybatis.class.getResourceAsStream(resource);  
  17.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  18.         //打开会话  
  19.         SqlSession session = sqlSessionFactory.openSession();  
  20.         return session;  
  21.     }  
  22.       
  23.     /** 
  24.      * 测试动态Where 
  25.      */  
  26. //  @Test  
  27.     public void testWhere(){  
  28.         SqlSession session = getSession();  
  29.         EmpMapper emp = session.getMapper(EmpMapper.class);  
  30.         Emp oEmp = new Emp();  
  31.   
  32.         oEmp.setEname("SMITH");  
  33.         oEmp.setSal("800");  
  34.         List result = emp.queryEmpWhere(oEmp);  
  35.         for (Object object : result) {  
  36.             System.out.println(object);  
  37.         }  
  38.     }  
  39.       
  40.     /** 
  41.      * 测试动态trim 
  42.      */  
  43. //  @Test  
  44.     public void testTrim(){  
  45.         SqlSession session = getSession();  
  46.         EmpMapper emp = session.getMapper(EmpMapper.class);  
  47.         Emp oEmp = new Emp();  
  48. /* 
  49.         oEmp.setEname("SMITH"); 
  50.         oEmp.setSal("800");*/  
  51.         List result = emp.queryEmpTrim(oEmp);  
  52.         for (Object object : result) {  
  53.             System.out.println(object);  
  54.         }  
  55.     }  
  56.       
  57.     /** 
  58.      * 测试动态trim的suffix 
  59.      */  
  60. //  @Test  
  61.     public void testTrimSuffix(){  
  62.         SqlSession session = getSession();  
  63.         EmpMapper emp = session.getMapper(EmpMapper.class);  
  64.         Emp oEmp = new Emp();  
  65.   
  66.         //oEmp.setEname("SMITH");  
  67.         oEmp.setSal("20");  
  68.         oEmp.setEmpno("7839");  
  69.         emp.updateEmpTrimSuffix(oEmp);  
  70.           
  71.         session.commit();  
  72.     }  
  73.       
  74.     /** 
  75.      * 测试动态set 
  76.      */  
  77. //  @Test  
  78.     public void testSet(){  
  79.         SqlSession session = getSession();  
  80.         EmpMapper emp = session.getMapper(EmpMapper.class);  
  81.         Emp oEmp = new Emp();  
  82.   
  83.         //oEmp.setEname("SMITH");  
  84.         oEmp.setSal("100");  
  85.         oEmp.setEmpno("7839");  
  86.         emp.updateEmpSet(oEmp);  
  87.         session.commit();  
  88.     }  
  89.       
  90.     /** 
  91.      * 测试动态foreach 
  92.      */  
  93.     @Test  
  94.     public void testForeach(){  
  95.         SqlSession session = getSession();  
  96.         EmpMapper emp = session.getMapper(EmpMapper.class);  
  97.           
  98.         List list = new ArrayList();  
  99.         list.add("8000");  
  100.         list.add("8001");  
  101.         list.add("8002");  
  102.         list.add("8003");  
  103.           
  104.         List listEmp = emp.queryEmpByForeach(list);  
  105.           
  106.         for (Object object : listEmp) {  
  107.             System.out.println(object);  
  108.         }  
  109.           
  110.     }  
  111. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值