MyBatis3_[tp_38~]_动态sql_if_判断&OGNL_where标签_
笔记要点
出错分析与总结
/** 笔记:
* 查询的时候,如果某些条件,没带可能SQL拼装会有问题;
* 1.-->给where 后面加上 1=1, 以后的条件都and XXX
* 2. <where> </where> 标签加上后,就不用写SQL的 where 条件语句!
*/
工程组织
数据库组织
0.重新修改Bean类
1.定义接口
EmployeeMapper_DynamicSQL
package com.dao;
import com.bean.Employee;
import java.util.List;
public interface EmployeeMapper_DynamicSQL {
public Employee getEmpsByConditionIf(int id);
public List<Employee> getEmpsByConditionIf(Employee e);
}
2.定义XML映射文件
<?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">
<!--动态SQL几个主要模块:-->
<!--if 标签
test="判断表达式,OGNL语法(参照PPT)"
:从传入的参数中取值判断,
遇见特殊符号,写转义字符!-> and : && "" : ""
或者写单引号也可以!!
网址: W3CSchool->html教程->ISO-8859-> ASCII编码
OGNL : 会进行字符串与数字的转换判断 "0"==0 ,"1"==1 ;
-->
<!--where 标签
查询的时候,如果某些条件,没带可能SQL拼装会有问题;
给where 后面加上 1=1, 以后的条件都and XXX
2.mybatis 使用where 标签来将所有的查询条件包含在内,
自动去掉拼接后的SQL 的前面的多出来的and 或者or ;在后面的就不可以了!
-->
<!--choose (when, otherwise)-->
<!--trim (where, set)-->
<!--foreach-->
<mapper namespace="com.dao.EmployeeMapper_DynamicSQL">
<!--1.查询员工,要求,携带了那个字段查询条件就带上那个条件的值;
传入两个条件进行模糊查询-->
<select id="getEmpsByConditionIf" resultType="com.bean.Employee">
select * from tbl_employee <where>
<if test="lastName !=null and lastName !='jerry' ">
and last_name like #{lastName}
</if>
<if test="id != null">
and id=#{id}
</if>
</where>
</select> </mapper>
3.编写测试代码
package com.test; import com.bean.Employee;
import com.dao.EmployeeMapper_DynamicSQL;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; /** 笔记:
* 查询的时候,如果某些条件,没带可能SQL拼装会有问题;
* 1.-->给where 后面加上 1=1, 以后的条件都and XXX
* 2. <where> </where> 标签加上后,就不用写SQL的 where 条件语句!
*/
public class test_tp38 {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void test08() throws Exception { SqlSession openSession = getSqlSessionFactory().openSession();
try {
System.out.println("++++++++++---- 1.测试 动态SQL元素:if关键字!");
EmployeeMapper_DynamicSQL mapper = openSession.getMapper(EmployeeMapper_DynamicSQL.class);
Employee employee = new Employee(1, "%e%", null, null);
List<Employee> emps = mapper.getEmpsByConditionIf(employee);
for (Employee e:emps)
System.out.println(e);
openSession.commit();
} finally {
openSession.close();
} } }
测试结果:
++++++++++---- 1.测试 动态SQL元素:if关键字!
DEBUG 12-04 16:18:20,585 ==> Preparing: select * from tbl_employee WHERE last_name like ? and id=? (BaseJdbcLogger.java:145)
DEBUG 12-04 16:18:20,608 ==> Parameters: %e%(String), 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 12-04 16:18:20,620 <== Total: 1 (BaseJdbcLogger.java:145)
Employee{id=1, lastName='jerry', email='jerry@163.com', gender='1', dept=null}
MyBatis3_[tp_38~]_动态sql_if_判断&OGNL_where标签_的更多相关文章
- Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)
Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...
- 判断是否联网_检测网络的类型为3G、2G、wap、wifi
判断是否联网_检测网络的类型为3G.2G.wap.wifi 判断是否联网: /*** * judge Internet is available * * @author wei-spring * @ ...
- 如何判断img标签是否有src属性
前几天,写一个小项目,需要判断img标签是否有src属性,想了半天,只能想到用jq实现,如下: if($(".img").attr("src")==undefi ...
- 毕业设计---jQuery动态生成的a标签的事件绑定
这几天在毕业设计的前端设计阶段,准备放弃使用jsp,完全通过html+ajax+SSH进行网站的编写,在前端的页面显示我准备使用jQuery来实现数据的动态绑定.但是遇到动态添加的a标签无法直接通过$ ...
- Jquery判断某个标签 Id是否存在
query判断某个标签 Id是否存在, 如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的 if($("#id")){}else{} 因为 $(“#id”) 不管对象 ...
- js动态添加和删除标签
html代码 <h1>动态添加和删除标签</h1> <div id="addTagTest"> <table> <thead& ...
- BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆
BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子 ...
- MyBatis入门3_mapper.xml优化(parameterType简写_NameSpace简写_sql片段_特殊字符处理)_动态SQL
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 优化 1.起别名(一般不用,写全方便查看类出处) 以前 ...
- jquery判断一个标签是否包含另外一个标签
jquery判断一个标签是否包含另外一个标签 一.总结 一句话总结: jquery的find方法配合length属性:if($("#video_md_9_1").find(&quo ...
随机推荐
- Jupyter notbook 修改默认路径
打开 cmd 输入命令 jupyter notebook --generate-config 2.打开配置文件 3.修改路径 转自: https://blog.csdn.net/zw__chen ...
- windows下 pip下载包到指定目录
pip download -r requirements.txt -d G:\PythonVirtualenv\packages python setup.py install
- beyond Compare 30天过期后的处理办法
打开Beyond Compare 4,提示已经超出30天试用期限制,解决方法: 修改C:\Program Files\Beyond Compare 4\BCUnrar.dll,这个文件重命名或者直接删 ...
- social engineering toolkit
1. freebuf介绍 http://www.freebuf.com/sectool/73409.html 2. github https://github.com/trustedsec/socia ...
- 如何理解MVC
在面试的时候,MVC这个概念考的次数很多,有许多人只能把三个字母解释成三个单词:model,view,controller,但是如果往深处说就说不出来什么东西了,对这个概念模糊不清,今天闲来无事看了一 ...
- xsy 2414【CF587C】Duff in the Army
Description [题目描述]: 最近有一场战争发生,Duff是战争里一名士兵,Malek是她的长官. 他们的国家——Andarz Gu有n个城市(编号为1到n),总共有n-1条道路,每条道路连 ...
- 15-16 ICPC europe J Saint John Festival (graham扫描法+旋转卡壳)
题意:给n个大点,m个小点$(n<=1e5,m<=5e5),问有多少个小点,存在3个大点,使小点在三个大点组成的三角形内. 解题思路: 首先,易证,若该小点在某三大点行成的三角形内,则该小 ...
- iview前台端口设置,跨域端口设置
前台启动默认端口: 跨域端口: 完毕
- es6☞对象的解构赋值
变量必须与属性同名 let {name, age} = {name: 'wang', age: 22}; console.log(name, age); //wang 22 let {name} = ...
- ubuntu下安装软件时报错解决:Unmet dependencies. Try 'apt-get -f install' with no packages
在错误后面运行以下代码,补全依赖项: sudo apt-get -f install