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 ...
随机推荐
- mysql开启缓存、设置缓存大小、缓存过期机制
目录 一.开启缓存 1.修改配置文件my.ini 2.命令方式 二.查看是否生效 1.query_cache_type 使用查询缓存的方式 2.have_query_cache 设置查询缓存是否可用 ...
- php面向对象(目录操作)
目录操作 创建目录 Mkdir(目录地址,权限,是否递归创建=false); Rmdir(目录地址) 删除目录 仅仅可以删除空目录.(不支持递归删除) 移动(改名) Rename(旧地址,新地址) 该 ...
- 教你使用Webpack搭建环境 TypeScript (2)
一. 环境搭建1.1. TypeScript环境安装已经配置好的环境,大家可以直接下载:https://github.com/coderwhy/HYLearnTS.git在上一个章节中我们说过,T ...
- 用pytorch1.0搭建简单的神经网络:进行回归分析
搭建简单的神经网络:进行回归分析 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib.pyplot as p ...
- ElasticSearch RestHighLevelClient 通用操作
项目中使用到ElasticSearch作为搜索引擎.而ES的环境搭建自然是十分简单,且本身就适应于分布式环境,因此这块就不多赘述.而其本身特性和查询语句这篇博文不会介绍,如果有机会会深入介绍. 所 ...
- java当中JDBC当中请给出一个SQLServer DataSource and SingleTon例子
[学习笔记] 5.SQLServer DataSource and SingleTon: import net.sourceforge.jtds.jdbcx.*;import java.sql.*;i ...
- (3)Spring Boot日志
文章目录 选择哪一种日志框架 日志的使用 Spring Boot 日志使用 选择哪一种日志框架 市面上日志门面有: JCL(Jakart Commons Logging) .SLF4J(Simple ...
- 利用Python进行数据分析 第6章 数据加载、存储与文件格式(2)
6.2 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一,是使用Python内置的pickle序列化. pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle ...
- Scratch编程:躲开鲨鱼(五)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了用鼠标控制一条小海星在水里游 ...
- javascript-state-machine
import StateMachine from 'javascript-state-machine' import EventEmitter from 'events' /** * 上传的文档的状态 ...