笔记要点
出错分析与总结

  1. /** 笔记:
  2. * 查询的时候,如果某些条件,没带可能SQL拼装会有问题;
  3. * 1.-->给where 后面加上 1=1, 以后的条件都and XXX
  4. * 2. <where> </where> 标签加上后,就不用写SQL的 where 条件语句!
  5. */

工程组织
数据库组织

0.重新修改Bean类
1.定义接口 

  1. EmployeeMapper_DynamicSQL
  1. package com.dao;
  2.  
  3. import com.bean.Employee;
  4.  
  5. import java.util.List;
  6.  
  7. public interface EmployeeMapper_DynamicSQL {
  8. public Employee getEmpsByConditionIf(int id);
  9. public List<Employee> getEmpsByConditionIf(Employee e);
  10. }

2.定义XML映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <!--动态SQL几个主要模块:-->
  5. <!--if 标签
  6. test="判断表达式,OGNL语法(参照PPT)"
  7. :从传入的参数中取值判断,
  8. 遇见特殊符号,写转义字符!-> and : &amp;&amp; "" : &quot;&quot;
  9. 或者写单引号也可以!!
  10. 网址: W3CSchool->html教程->ISO-8859-> ASCII编码
  11. OGNL : 会进行字符串与数字的转换判断 "0"==0 ,"1"==1 ;
  12. -->
  13. <!--where 标签
  14. 查询的时候,如果某些条件,没带可能SQL拼装会有问题;
  15. 给where 后面加上 1=1, 以后的条件都and XXX
  16. 2.mybatis 使用where 标签来将所有的查询条件包含在内,
  17. 自动去掉拼接后的SQL 的前面的多出来的and 或者or ;在后面的就不可以了!
  18. -->
  19. <!--choose (when, otherwise)-->
  20. <!--trim (where, set)-->
  21. <!--foreach-->
  22. <mapper namespace="com.dao.EmployeeMapper_DynamicSQL">
  23. <!--1.查询员工,要求,携带了那个字段查询条件就带上那个条件的值;
  24. 传入两个条件进行模糊查询-->
  25. <select id="getEmpsByConditionIf" resultType="com.bean.Employee">
  26. select * from tbl_employee
  27.  
  28. <where>
  29. <if test="lastName !=null and lastName !='jerry' ">
  30. and last_name like #{lastName}
  31. </if>
  32. <if test="id != null">
  33. and id=#{id}
  34. </if>
  35. </where>
  36. </select>
  37.  
  38. </mapper>

3.编写测试代码

  1. package com.test;
  2.  
  3. import com.bean.Employee;
  4. import com.dao.EmployeeMapper_DynamicSQL;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. import org.junit.Test;
  10.  
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.util.List;
  14.  
  15. /** 笔记:
  16. * 查询的时候,如果某些条件,没带可能SQL拼装会有问题;
  17. * 1.-->给where 后面加上 1=1, 以后的条件都and XXX
  18. * 2. <where> </where> 标签加上后,就不用写SQL的 where 条件语句!
  19. */
  20. public class test_tp38 {
  21. public SqlSessionFactory getSqlSessionFactory() throws IOException {
  22. String resource = "mybatis-config.xml";
  23. InputStream inputStream = Resources.getResourceAsStream(resource);
  24. return new SqlSessionFactoryBuilder().build(inputStream);
  25. }
  26.  
  27. @Test
  28. public void test08() throws Exception {
  29.  
  30. SqlSession openSession = getSqlSessionFactory().openSession();
  31. try {
  32. System.out.println("++++++++++---- 1.测试 动态SQL元素:if关键字!");
  33. EmployeeMapper_DynamicSQL mapper = openSession.getMapper(EmployeeMapper_DynamicSQL.class);
  34. Employee employee = new Employee(1, "%e%", null, null);
  35. List<Employee> emps = mapper.getEmpsByConditionIf(employee);
  36. for (Employee e:emps)
  37. System.out.println(e);
  38. openSession.commit();
  39. } finally {
  40. openSession.close();
  41. }
  42.  
  43. }
  44.  
  45. }

测试结果:

  1. ++++++++++---- 1.测试 动态SQL元素:if关键字!
  2. DEBUG 12-04 16:18:20,585 ==> Preparing: select * from tbl_employee WHERE last_name like ? and id=? (BaseJdbcLogger.java:145)
  3. DEBUG 12-04 16:18:20,608 ==> Parameters: %e%(String), 1(Integer) (BaseJdbcLogger.java:145)
  4. DEBUG 12-04 16:18:20,620 <== Total: 1 (BaseJdbcLogger.java:145)
  5. Employee{id=1, lastName='jerry', email='jerry@163.com', gender='1', dept=null}

MyBatis3_[tp_38~]_动态sql_if_判断&OGNL_where标签_的更多相关文章

  1. Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)

    Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...

  2. 判断是否联网_检测网络的类型为3G、2G、wap、wifi

    判断是否联网_检测网络的类型为3G.2G.wap.wifi  判断是否联网: /*** * judge Internet is available * * @author wei-spring * @ ...

  3. 如何判断img标签是否有src属性

    前几天,写一个小项目,需要判断img标签是否有src属性,想了半天,只能想到用jq实现,如下: if($(".img").attr("src")==undefi ...

  4. 毕业设计---jQuery动态生成的a标签的事件绑定

    这几天在毕业设计的前端设计阶段,准备放弃使用jsp,完全通过html+ajax+SSH进行网站的编写,在前端的页面显示我准备使用jQuery来实现数据的动态绑定.但是遇到动态添加的a标签无法直接通过$ ...

  5. Jquery判断某个标签 Id是否存在

    query判断某个标签 Id是否存在, 如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的 if($("#id")){}else{} 因为 $(“#id”) 不管对象 ...

  6. js动态添加和删除标签

    html代码 <h1>动态添加和删除标签</h1> <div id="addTagTest"> <table> <thead& ...

  7. BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆

    BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子 ...

  8. MyBatis入门3_mapper.xml优化(parameterType简写_NameSpace简写_sql片段_特殊字符处理)_动态SQL

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 优化 1.起别名(一般不用,写全方便查看类出处) 以前 ...

  9. jquery判断一个标签是否包含另外一个标签

    jquery判断一个标签是否包含另外一个标签 一.总结 一句话总结: jquery的find方法配合length属性:if($("#video_md_9_1").find(&quo ...

随机推荐

  1. mysql开启缓存、设置缓存大小、缓存过期机制

    目录 一.开启缓存 1.修改配置文件my.ini 2.命令方式 二.查看是否生效 1.query_cache_type 使用查询缓存的方式 2.have_query_cache 设置查询缓存是否可用 ...

  2. php面向对象(目录操作)

    目录操作 创建目录 Mkdir(目录地址,权限,是否递归创建=false); Rmdir(目录地址) 删除目录 仅仅可以删除空目录.(不支持递归删除) 移动(改名) Rename(旧地址,新地址) 该 ...

  3. 教你使用Webpack搭建环境 TypeScript (2)

      一. 环境搭建1.1. TypeScript环境安装已经配置好的环境,大家可以直接下载:https://github.com/coderwhy/HYLearnTS.git在上一个章节中我们说过,T ...

  4. 用pytorch1.0搭建简单的神经网络:进行回归分析

    搭建简单的神经网络:进行回归分析 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib.pyplot as p ...

  5. ElasticSearch RestHighLevelClient 通用操作

    项目中使用到ElasticSearch作为搜索引擎.而ES的环境搭建自然是十分简单,且本身就适应于分布式环境,因此这块就不多赘述.而其本身特性和查询语句这篇博文不会介绍,如果有机会会深入介绍. ​ 所 ...

  6. java当中JDBC当中请给出一个SQLServer DataSource and SingleTon例子

    [学习笔记] 5.SQLServer DataSource and SingleTon: import net.sourceforge.jtds.jdbcx.*;import java.sql.*;i ...

  7. (3)Spring Boot日志

    文章目录 选择哪一种日志框架 日志的使用 Spring Boot 日志使用 选择哪一种日志框架 市面上日志门面有: JCL(Jakart Commons Logging) .SLF4J(Simple ...

  8. 利用Python进行数据分析 第6章 数据加载、存储与文件格式(2)

    6.2 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一,是使用Python内置的pickle序列化. pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle ...

  9. Scratch编程:躲开鲨鱼(五)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了用鼠标控制一条小海星在水里游 ...

  10. javascript-state-machine

    import StateMachine from 'javascript-state-machine' import EventEmitter from 'events' /** * 上传的文档的状态 ...