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语句动态的组装能力,而且他只有 ...
随机推荐
- WXPP QuickFramework V2.0
微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github 用了一个多星期的时间,把微信快速开发框架进行了改进,之前1.0版本针对的是普通订阅号,V2. ...
- javaFile循环列出指定目录下的所有文件(源代码)
package javatest.basic22; import java.io.File; import java.io.IOException; public class FileTest { p ...
- iOS基础 - 控制器管理
一.Container 一个iOS的app很少只由一个ViewController组成,除非这个app极其简单.当app中有多个ViewController的时候,我们就需要对这些ViewContro ...
- exit与_exit
一.main函数: 先从程序的执行开始谈起,C程序总是从main函数开始执行,当内核执行C程序时(使用了一个exec函数),在调用main函数前先调用一个特殊的启动例程.可执行程序 文件将此启动例程指 ...
- 用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(上)
一.本程序的起源 当我决定去中科院实习的时候,我给刘奎恩老师发了封邮件.我对此事是非常看重的,因此经常使用浏览器,打开gmail去查看刘老师有没有给我回复.因为gmail的新邮件推送的功能仅限于打开浏 ...
- Debian 7.1设置中文环境
之前在Chinaunix上看过一个人写过博客,是关于介绍Debian设置中文环境的,在这里我针对Debian 7来补全一下. Debian是非常经典而优秀的Linux发行版了,Debian是个很大的家 ...
- 【转】Install Oracle Jdbc driver in your Maven local repository
Install Oracle Jdbc driver in your Maven local repository If you are using Oracle, you must first in ...
- ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS
ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS 背景 LESS确实不错,只是每次写完LESS都要手工编译一下有点麻烦(VS插件一直没有安装好),昨天 ...
- flask tutorial => make a blog :) flask 搭建博客系统从零开始!
please follow the tutorial from the official site :) http://flask.pocoo.org/docs/ You could download ...
- docker的网络-Container network interface(CNI)与Container network model(CNM)
Overview 目前围绕着docker的网络,目前有两种比较主流的声音,docker主导的Container network model(CNM)和社区主导的Container network in ...