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

浙公网安备 33010602011771号