07_动态SQL与模糊查询

1 需求

实现多条件查询用户

  • 姓名模糊匹配
  • 年龄在指定的最小值到最大值之间

2 准备表和数据

  1. create table d_user(
  2. id int primary key auto_increment,
  3. name varchar(10),
  4. age int(3)
  5. );
  6. insert into d_user(name,age) values(‘Tom‘,12);
  7. insert into d_user(name,age) values(‘Bob‘,13);
  8. insert into d_user(name,age) values(‘Jack‘,18);

3 ConditionUser(查询条件实例类)

  1. private String name;
  2. private int minAge;
  3. private int maxAge;

4 userMapper.xml(映射文件)

  1. <mapper namespace="cn.imentors.mybatis.test7.userMapper">
  2. <!--
  3. 实现多条件查询用户(姓名模糊匹配, 年龄在指定的最小值到最大值之间)
  4. -->
  5. <select id="getUser" parameterType="ConditionUser" resultType="User">
  6. select * from d_user where
  7. <if test=‘name != "%null%"‘>
  8. name like #{name} and
  9. </if>
  10. age between #{minAge} and #{maxAge}
  11. </select>
  12. </mapper>

5 测试

  1. @Test
  2. public void test(){
  3. SqlSessionFactory factory = MybatisUtils.getFactory();
  4. SqlSession session = factory.openSession();
  5. String statement = "cn.imentors.mybatis.test7.userMapper.getUser";
  6. String name = "o";
  7. name = null;
  8. ConditionUser parameter = new ConditionUser("%"+name+"%", 13, 18);
  9. List<User> list = session.selectList(statement, parameter);
  10. System.out.println(list);
  11. session.close();

6 MyBatis中可用的动态SQL标签

6.1 if

6.2 choose

  1. <select id=”findActiveBlogLike”parameterType=”Blog” resultType=”Blog”>
  2. SELECT * FROM BLOG WHERE state = ?ACTIVE?
  3. <choose>
  4. <when test=”title != null”>
  5. AND title like #{title}
  6. </when>
  7. <when test=”author != null and author.name != null”>
  8. AND title like #{author.name}
  9. </when>
  10. <otherwise>
  11. AND featured = 1
  12. </otherwise>
  13. </choose>
  14. </select>

6.3 where

  1. <select id=”findActiveBlogLike” parameterType=”Blog” resultType=”Blog”>
  2. SELECT * FROM BLOG
  3. <where>
  4. <if test=”state != null”>
  5. state = #{state}
  6. </if>
  7. <if test=”title != null”>
  8. AND title like #{title}
  9. </if>
  10. <if test=”author != null and author.name != null”>
  11. AND title like #{author.name}
  12. </if>
  13. </where>
  14. </select>

6.4 set

  1. <update id="updateAuthorIfNecessary"
  2. parameterType="domain.blog.Author">
  3. update Author
  4. <set>
  5. <if test="username != null">username=#{username},</if>
  6. <if test="password != null">password=#{password},</if>
  7. <if test="email != null">email=#{email},</if>
  8. <if test="bio != null">bio=#{bio}</if>
  9. </set>
  10. where id=#{id}
  11. </update>

6.5 foreach

  1. <select id="selectPostIn" resultType="domain.blog.Post">
  2. SELECT *
  3. FROM POST P
  4. WHERE ID in
  5. <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
  6. #{item}
  7. </foreach>
  8. </select>

注:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键

捐赠我们
    良师益友工作室一直在致力于帮助编程爱好更加快速方便地学习编程,如果您对我们的成果表示认同并且觉得对你有所帮助,欢迎您对我们捐赠^_^。

时间: 2024-10-09 09:57:08

07_动态SQL与模糊查询的相关文章

Mybatis学习笔记-动态SQL与模糊查询

需求:实现多条件查询用户(姓名模糊匹配, 年龄在指定的最小值到最大值之间) User.java实体类 public class User { private int id; private String name; private int age; //... } ConditionUser.java public class ConditionUser { private String name; private int minAge; private int maxAge; //... }

动态SQL之模糊查询

模糊查询学习了三种: DAO层 // 可以使用 List<User> wherelike01(String user_name); // 忘记 List<User> wherelike02(Map<String, Object> map); // 推荐使用 List<User> wherelike03(String user_name) 测试类 @Test public void where语句测试01() { SqlSession sqlSession =

MyBatis动态SQL与模糊查询

sqlxml <?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="PersonCondition"&

SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数

(二) SQL语句  模糊查询  空值处理  聚合函数 自己学习笔记,转载请注明出处,谢谢!---酸菜 SQL :结构化查询语言(Structured Query Language),关系数据库管理系统的标准语言. Sybase与Mircosoft对标准SQL做了扩展:T-SQL (Transact-SQL); 注:①SQL对大小写的敏感取决于排序规则,一般不敏感; ②SQL对单引号的转义,用两个单引号来表示一个单引号; ③SQL执行顺序: 1→2→3→4 select  * ---------

SQL的模糊查询

SQL的模糊查询 在进行数据库查询时,有完整查询和模糊查询之分.一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来.另外

SQL like 模糊查询

SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚

SQL的模糊查询(转载)

本文由转载而来: 原文地址链接:http://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html 在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user

sql语句模糊查询

SQL语句实现模糊查询,有些东西老是既不清楚,现在做个笔记吧. 我们可以在where子句中使用like来达到模糊查询的效果:在Where子句中,可以对datetime.char.varchar字段类型的列用Like子句配合通配符选取那些"很像..."的数据记录,以下是可使用的通配符: %   零或者多个字符 _    单一任何字符(下划线) \     特殊字符 []     在某一范围内的字符,如[0-9]或者[aeth] [^]    不在某范围内的字符,如[^0-9]或者[^ae

MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询

p.p4 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "PingFang SC" } p.p6 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New"; color: #4f76cb } p.p7 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New" }