6.1 Mybatis实现动态SQL——if/if使用

2024-05-16 07:18

本文主要是介绍6.1 Mybatis实现动态SQL——if/if使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们用模糊匹配某字段时,在mybatis可以通过动态sql来实现。
例如users表如下:
这里写图片描述
下面在mybatis中实现

SELECT * FROM users WHERE name LIKE '%z%' AND age>15 AND age<30

1、建立users表对应的User类

package com.lzj.mybaits.test1;public class User {private int id;private String name;private float age;public User() {super();}public User(int id, String name, float age) {super();this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getAge() {return age;}public void setAge(float age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";}}

2、在select查询语句中,有三个条件:name的取值,age的最小值,age的最大值,下面把查询条件封装成一个条件类

package com.lzj.mybaits.test1;public class UserCondition {private String name;private float minAge;private float maxAge;public UserCondition() {super();}public UserCondition(String name, float minAge, float maxAge) {super();this.name = name;this.minAge = minAge;this.maxAge = maxAge;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getMinAge() {return minAge;}public void setMinAge(float minAge) {this.minAge = minAge;}public float getMaxAge() {return maxAge;}public void setMaxAge(float maxAge) {this.maxAge = maxAge;}@Overridepublic String toString() {return "UserCondition [name=" + name + ", minAge=" + minAge + ", maxAge=" + maxAge + "]";}}

3、定义sql的userMapper.xml映射文件

<?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.lzj.mybaits.test1.userMapper"><select id="getUsers" parameterType="UserCondition" resultType="User">select * from users where <!--该if条件中的第一个name和第三个name对应UserCondition类中的属性:第1个name相当于java中的代码,不需要加#{},第3个name代表引用传入UserCondition对象中的name属性,需要加#{};第2个name 为sql中的字段名--><if test='name != "%null%"'>name like #{name} and</if><!--当传入的UserCondition对象中的name属性值为"%null%"时,sql语句中就只按age的条件进行查询--><if test='name == "%null%"'></if>age between #{minAge} and #{maxAge}</select></mapper>

4、创建测试类

package com.lzj.mybaits.test1;
import java.io.InputStream;
import java.util.List;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MybaitsTest {public static void main(String[] args) throws Exception {String resource = "conf.xml";InputStream in = MybaitsTest.class.getClassLoader().getResourceAsStream(resource);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);/*自动提交事务*/SqlSession session = factory.openSession(true);String statement = "com.lzj.mybaits.test1.userMapper.getUsers";String name = "z";/*如果String name = null;* 在创建UserCondition对象后,对象中的name值为"%null%",所以在映射文件中要与"%null%"判断*/List<User> users = session.selectList(statement, new UserCondition("%" + name + "%", 15, 30));System.out.println(new UserCondition("%" + name + "%", 15, 30));System.out.println(users);session.close();}}

输出结果

UserCondition [name=%z%, minAge=15.0, maxAge=30.0]
[User [id=3, name=lzj, age=25.0], User [id=4, name=zhangsan, age=21.0], User [id=5, name=zhangsan, age=21.0]]

这篇关于6.1 Mybatis实现动态SQL——if/if使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994232

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主