MyBatis框架——动态SQL

本文介绍了动态SQL中的where+if、choose+when、trim、set和foreach标签在Mybatis中的应用,展示了如何根据变量动态构建SQL查询,以及这些标签的特点和使用场景,帮助开发者高效处理不确定条件的数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态SQL

  • 应用场景:有时候对数据库的操作条件并不确定,例如在进行条件查询时,条件的个数我们不能预先确定,需要根据实际情况,动态调整
  • 动态SQL配置主要元素有:if、where、trim、foreach、choose等

where+if标签

<select id="listEmp" parameterType="Emp" resultType="Emp">
	select * from emp
	<where>
		<if test="empno!=null and empno!=''">
			and empno = #{empno}
		</if>
		<if test="sal !=null and sal!=''">
			and sal =#{sal}
		</if>
	</where>
	order by empno
</select>

总结:
if+where:
1、自动添加where
2、每一个if条件前都有and,不需要考虑where后面出现and,mybatis自动处理。
3、不需要考虑空格,mybatis自动处理。
4、没有else标签,当然也没有else if标签。
5、if中判断,test="empno!=null and empno!=‘’,只可以判断属性值是否为空,不能判断属性值是否等于某个值,empno!=7788错误。

choose+when标签

<select id="listEmp" parameterType="Emp" resultType="Emp">
	select * from emp
	<where>
		<choose>
		<when test="empno!=null and empno!=''">
			and empno = #{empno}
		</when>
		<when test="sal !=null and sal!=''">
			and sal =#{sal}
		</when>
			<otherwise>
			</otherwise>
		</choose>
	</where>
	order by empno
</select>

总结:
choose标签:
1、多个when标签,只能执行一个。当一个when条件满足并执行后,其它的when将不在执行。
2、如果所有when标签不满足,就执行otherwise。

trim标签

  • prefix属性可添加前缀,suffix属性可添加后缀。prefixOverrides属性可以去掉指定的前缀,sufixOverrides可以去掉指定的后缀
<update id="updateEmp" parameterType="Emp">
	update emp
	<trim prefix="set" suffix="where empno=#{empno}" suffixOverrides=",">
		<if test="ename!=null and ename !=''">ename = #{ename},</if>
		<if test="job!=null and job !=''">job = #{job},</if>
		<if test="sal!=null and sal !=''">sal = #{sal},</if>
		<if test="comm!=null and comm !=''">comm = #{comm},</if>
		<if test="deptno!=null and deptno !=''">deptno = #{deptno},</if>
	</trim>
</update>

总结:
trim:
1、prefix、sufix可以在SQL语句拼接出一对小括号。
2、sufixOverrides将包含内容最后一个逗号去掉。(可用于去除多余后缀)

set标签

<update id="updateEmp" parameterType="Emp">
	update emp
	<set>
		<if test="ename!=null and ename !=''">ename = #{ename},</if>
		<if test="job!=null and job !=''">job = #{job},</if>
		<if test="sal!=null and sal !=''">sal = #{sal},</if>
		<if test="comm!=null and comm !=''">comm = #{comm},</if>
		<if test="deptno!=null and deptno !=''">deptno = #{deptno},</if>
	</set>
	where empno=#{empno}
</update>

总结:
set标签:
1、set标签可以在SL语句中自动加上set关键词
2、set标签自动去掉 内容后面 ,逗号
3、上面写法,必须保证最少有一个if成立。

foreach标签

  • 该标签主要用于循环迭代一个集合或数组,主要用于in
<!-- 批量删除
	delete from emp where empno in (7778,7900,8080) 
-->
<delete id="deleteEmpByArray" parameterType="int"> <!-- 传入的参数类型为 int[] 数组类型 -->
	delete from emp where empno in
	<foreach collection="array" item="empno" open="(" close=")"separator=",">
		#{empno}
	</foreach>
</delete>

总结:
foreach:
1、collection 需要遍历类型: array、list
2、item 表示需要遍历出来对象的对象名
3、open 表示语句的开始部分
4、close 表示语句的结束部分
5、separator 表示每次迭代之间以上面符号进行分隔
6、index 每次迭代索引

### SpringBoot 整合 MyBatis 框架 SQL 示例教程 #### 添加依赖项 为了使Spring Boot项目能够与MyBatis框架顺利整合并执行SQL操作,需在`pom.xml`文件中加入必要的依赖项。除了Spring Boot自带的JDBC支持外,还需引入由MyBatis官方提供的启动器。 ```xml <dependencies> <!-- JDBC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- MyBatis Starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> </dependencies> ``` 上述代码展示了如何通过Maven来管理这些依赖关系[^2]。 #### 配置Application Properties 接着,在项目的资源目录下找到或创建名为`application.yml`(或`.properties`)的应用程序配置文件,并设置MyBatis的相关参数: ```yaml # application.yml mybatis: mapper-locations: classpath:mapper/*.xml # 映射XML文件的位置 type-aliases-package: com.example.demo.domain # 实体类所在的包名 ``` 此部分配置指定了Mapper XML文件所在位置以及实体类对应的Java包名称[^4]。 #### 创建Entity Class (实体类) 定义一个简单的用户实体类作为例子,假设该表结构已存在于数据库之中。 ```java package com.example.demo.domain; public class User { private Integer id; private String name; private int age; // Getters and Setters... } ``` #### 编写Mapper Interface 和 Mapper XML 文件 接下来编写接口形式的数据访问层——即Mapper接口;同时准备相应的Mapper XML文档用于描述具体的查询逻辑。 **UserMapper.java** ```java package com.example.demo.mapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { List<User> selectAllUsers(); void insertUser(User user); } ``` **resources/mapper/UserMapper.xml** ```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.example.demo.mapper.UserMapper"> <select id="selectAllUsers" resultType="com.example.demo.domain.User"> SELECT * FROM users ORDER BY id ASC </select> <insert id="insertUser" parameterType="com.example.demo.domain.User"> INSERT INTO users(name,age) VALUES(#{name}, #{age}) </insert> </mapper> ``` 这里分别给出了两个方法:一个是获取全部用户的列表,另一个则是向users表里新增一条记录[^1]。 #### Service Layer Implementation 最后一步是在服务层实现业务逻辑处理功能,通常会调用之前编写的DAO/Mapper完成数据存取工作。 ```java @Service public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; public List<User> getAllUsers(){ return this.userMapper.selectAllUsers(); } public boolean saveNewUser(User newUser){ try{ this.userMapper.insertUser(newUser); return true; }catch(Exception e){ logger.error(e.getMessage()); return false; } } } ``` 以上就是基于Spring Boot平台集成MyBatis框架的一个基本流程介绍及其简单应用案例说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值