直接贴图,注解在代码上,其他的配置文件在学习一中就不贴了

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)的更多相关文章

  1. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)——动态SQL

  2. Mybatis学习笔记(六) —— 动态sql

    通过mybatis提供的各种标签方法实现动态拼接sql. 需求:根据性别和名字查询用户 查询sql: SELECT id, username, birthday, sex, address FROM ...

  3. Mybatis学习笔记之---动态sql中标签的使用

    动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...

  4. 1.3(Mybatis学习笔记)动态SQL

    一.<if> 使用<if>可以根据具体情况来拼接SQL语句,使其更加灵活更加适应我们的需求. <if>的标签体中是需要拼接的语句,满足条件才会将其进行拼接. < ...

  5. Mybatis学习笔记14 - 动态sql之foreach标签

    一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...

  6. Mybatis学习笔记10 - 动态sql之if判断

    示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import java.util.List; public ...

  7. Mybatis学习笔记13 - 动态sql之set标签

    示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapp ...

  8. Mybatis学习笔记12 - 动态sql之choose(when otherwise)标签

    choose (when, otherwise):分支选择:带了break的swtich-case 示例代码: 接口定义: package com.mybatis.dao; import com.my ...

  9. Mybatis学习笔记11 - 动态sql之trim标签

    trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...

  10. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...

随机推荐

  1. 如何让Fortran生成不同的随机数

    用Fortran生成随机数的方法很简单,就是: call random_seed ()call random_number (rd) 生成随机数组可以这样: do k = 1,10 call rand ...

  2. swfupload多文件上传[附源码]

    swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示.这次我们演示利用swfupload多文件上传,项 ...

  3. C# 订单流水号生成

    例如流水号格式如下:XX201604120001,2位前缀加8位日期加4位流水号 首先各种搜索出现如下解决方案 public class SerialNoHelper { /// <summar ...

  4. 你的flume-ng的第一篇博客

    我在flume-ng 1.1.0 孵化版的时候就开始接触了,自己也搞了一段时间,没事扯扯心得吧. 先说在前面,flume-ng 后面的版本,我没仔细读change log ,比较农民 , 不知道新添了 ...

  5. 关于Django模板引擎的研究

    原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not found.1其原因是没有给视 ...

  6. c/c++中typedef详解

    1. typedef 最简单使用 typedef long byte_4; // 给已知数据类型long起个新名字,叫byte_4 你可以在任何需要 long 的上下文中使用 byte_4.注意 ty ...

  7. TPL相关

    C#中的Timer System.Windows.Forms.TimerSystem.Threading.Timer System.Timers.Timer 1.System.Windows.Form ...

  8. jquery设置元素的readonly和disabled【转】

    Jquery的api中提供了对元素应用disabled和readonly属性的方法,在这里记录下.如下: 1.readonly    $('input').attr("readonly&qu ...

  9. Ogre源码编译教程

    最近突然发现Ogre引擎更新到2.1版本了,既然依旧是代码开源,本着学习的精神就下载下来弄弄.但是官网提供的SDK版本只有1.9的,考虑到学习的便利性,因此最好从Source版本开始弄,这样的话以后想 ...

  10. [置顶] 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 上周为360全景项目引入了图片缓存模块.因为是在Android4.0平台以上运作,出于 ...