mybatis学习笔记四(动态sql)
直接贴图,注解在代码上,其他的配置文件在学习一中就不贴了
1 数据库

2 实体类
package com.home.entity; /**
* 此类是: 用户实体类
* @author hpc
* @2017年1月15日下午2:16:27
*/
public class User {
private Integer user_id;// 用户id
private String user_name;// 用户名称
private String user_pwd;// 用户密码 public User(Integer user_id, String user_name, String user_pwd) {
super();
this.user_id = user_id;
this.user_name = user_name;
this.user_pwd = user_pwd;
}
public User(){}
public Integer getUser_id() {
return user_id;
}
public void setUser_id(Integer user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_pwd() {
return user_pwd;
}
public void setUser_pwd(String user_pwd) {
this.user_pwd = user_pwd;
}
@Override
public String toString() {
return "User [user_id=" + user_id + ", user_name=" + user_name + ", user_pwd=" + user_pwd + "]";
} }
3.动态sql配置
<?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="com.home.mapper">
<!-- mybatis中的动态标签和struts,JSTL标签十分相似,如果学习过的话,很容易就理解了 -->
<select id="loadUser" resultType="user" parameterType="user">
<!-- 如果user_id 等于4 就执行这条sql语句,
test中的是实体类的属性,是通过反射获取出来的,
所以我们这里传进来的参数是一个实体类对象 -->
<if test="user_id == 4">
select *
from users u
where u.user_id=#{user_id}
</if>
<!-- 如果user_id不等于空和不等于4 就进入这一个,
逻辑运算符
and,or
==,!=
>,>=
<,<= ...等
-->
<if test="user_id != null and user_id !=4">
<!-- choose相当于java中的switch -->
<choose>
<!-- when 相当于case -->
<!-- 只有当user_id不等于空的时候才查找对应的user信息 -->
<when test="user_id > 4">
select *
from users u
where u.user_id=#{user_id} </when>
<!-- 相当于default -->
<!-- 当user_id等于空就执行下面这条sql,查询名字为hpc的用户 -->
<otherwise>
select *
from users
where user_name='hpc'
</otherwise>
</choose>
</if>
</select>
</mapper>
4.测试类
package com.home.mybatis;
import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import com.home.entity.User;
public class TestApp {
public static void main(String[] args) throws IOException {
// 我将获取session的代码封装成了一个工具类,直接用工具类来获取session
SqlSession session = SessionUtils.getSession("mybatis.xml");
String loadUser = "com.home.mapper.loadUser";
// 看会不会动态的去获取,按理论应该是执行if标签的sql,用户为id为4的
User user = session.selectOne(loadUser, new User(4, null, null));
System.out.println("看会不会动态的去获取,按理论应该是执行if标签的sql,用户为id为4的");
System.out.println(user);
// 看会不会动态的去获取,按理论应该是执行otherwise标签的sql,用户为hpc的
user = session.selectOne(loadUser, new User(2, null, null));
System.out.println("看会不会动态的去获取,按理论应该是执行otherwise标签的sql,用户为hpc的");
System.out.println(user);
// 看会不会动态的去获取,按理论应该是执行when标签的sql,用户为5的
user = session.selectOne(loadUser, new User(5, null, null));
System.out.println("看会不会动态的去获取,按理论应该是执行when标签的sql,用户为5的");
System.out.println(user);
// 将数据属性到数据中去
session.commit();
// 关闭session
session.close();
}
}
5 .结果
看会不会动态的去获取,按理论应该是执行if标签的sql,用户为id为4的
User [user_id=4, user_name=zll, user_pwd=123]
看会不会动态的去获取,按理论应该是执行otherwise标签的sql,用户为hpc的
User [user_id=3, user_name=hpc, user_pwd=123]
看会不会动态的去获取,按理论应该是执行when标签的sql,用户为5的
null
mybatis学习笔记四(动态sql)的更多相关文章
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL
- Mybatis学习笔记(六) —— 动态sql
通过mybatis提供的各种标签方法实现动态拼接sql. 需求:根据性别和名字查询用户 查询sql: SELECT id, username, birthday, sex, address FROM ...
- Mybatis学习笔记之---动态sql中标签的使用
动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...
- 1.3(Mybatis学习笔记)动态SQL
一.<if> 使用<if>可以根据具体情况来拼接SQL语句,使其更加灵活更加适应我们的需求. <if>的标签体中是需要拼接的语句,满足条件才会将其进行拼接. < ...
- Mybatis学习笔记14 - 动态sql之foreach标签
一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...
- Mybatis学习笔记10 - 动态sql之if判断
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import java.util.List; public ...
- Mybatis学习笔记13 - 动态sql之set标签
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapp ...
- Mybatis学习笔记12 - 动态sql之choose(when otherwise)标签
choose (when, otherwise):分支选择:带了break的swtich-case 示例代码: 接口定义: package com.mybatis.dao; import com.my ...
- Mybatis学习笔记11 - 动态sql之trim标签
trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...
随机推荐
- jquery 分页控件2
jquery 分页控件(二) 上一章主要是关于分页控件的原理,代码也没有重构.在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释.为了测试这个插件是能用的 ...
- Lazy Scheduler
Lazy Scheduler:我的轻量级任务调度框架 一.背景 工作中经常涉及任务调度,一直都是采用while(true) => if hitted DO => Thread.Slee ...
- [原]iOS Makefile Template
export DEVELOPER_DIR := $(shell xcode-select --print-path) PLATFORM="$(DEVELOPER_DIR)/Platforms ...
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
[字符串与数组] Q:Write a method to decide if two strings are anagrams or not 题目:写一个算法来判断两个字符串是否为换位字符串.(换位字 ...
- ××校招:前端线上笔试题--页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动
题目: 请让页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动: 原理: 1.页面上画一个圆,画一个圆心.在这个圆的圆周上面画一个点,我们就让这个点绕着圆周跑: 2.怎 ...
- selenium webdriver (python)2
selenium webdriver (python) 第二版 前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发 ...
- arcengine 实现调用arctoolbox中的dissolove
ESRI.ArcGIS.Geoprocessor.Geoprocessor geoprocessor = new Geoprocessor(); ESRI.ArcGIS.DataManagementT ...
- 关于PDF.NET开发框架对Mysql Sqlite PostgreSQL数据库分页支持的个人看法
关于PDF.NET开发框架的名字由来 在设计www.pwmis.com站点的时候,考虑到架构的兼容性和将来升级的可能性,最重要的是没有足够的时间去为网站添加和维护很多复杂的程序,所以在借鉴前人成功经 ...
- jquery选择器之属性过滤选择器
<style type="text/css"> /*高亮显示*/ .highlight{ background-color: gray } </style> ...
- 跨平台C/C++集成开发环境-Code::Blocks-内置GCC
Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. 相比于基于Delphi的Dev-C++共享C++IDE,Code::Blocks是开放源码软件.Code::Block ...