mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器

这篇具有很好参考价值的文章主要介绍了mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动态SQL注解

分类

  1. 脚本动态SQL:XML配置方式的动态SQL,是用<script>的方式把它照搬过来,用注解来实现。适用于xml配置转换到注解配置
  2. 方法中构建SQL:@SelectProvider 、@InsertProvider、@UpdateProvider、@DeleteProvider 这些方法的使用
  3. SQL语句构造器:实现动态 SQL 的内容

脚本动态SQL

在sql语句中加入<script></script>标签,按照之前sqlmap中的动态sql的样式书写;增删改查都一样

@Select("<script>"
			+ "select * from student "
			+ "<where>"
			+ "<if test =\" ssex != null\">"
			+ "and ssex = #{ssex}"
			+ "</if>"
			+ "<if test =\" classId != 0\"> and classid = #{classId} </if>"
			+ "</where>"
			+ "</script>")
	public List<Student> findStudentJiaoBean(Student s);

方法中构建SQL

注解@SelectProvider@InsertProvider@UpdateProvider@DeleteProvider

用法

  1. 创建SQL语句类:该类包含需要动态生成的SQL 语句;
  2. 创建Mapper接口类:该类和配置文件的接口文件一样,用来处理数据库操作;
  3. 利用@SelectProvider:将 SQL 语句类和 Mapper 接口类关联,利用@SelectProvider 的 type 属性和 method 属性;
  4. 测试验证:编写测试类,测试动态生成的SQL 语句是否准确。
//语法
@UpdateProvider(type = 内部类名.class,method = "方法名")

eg:
@UpdateProvider(type = StudentSql.class,method = "updatestuSqlFunc")
	public int updateStudentFunc(Student s);

class StudentSql{
		public String updatestuSqlFunc(Student s) {

			String sql = "update student set ";
			String sql1 = null;
			if(s.getBirthday() != null) {
				sql += "birthday = #{birthday},";
			}
			if(s.getClassId() != 0) {
				sql += "classid = #{classId},";
			}
			if(s.getSname() != null) {
				sql += "sname = #{sname},";
			}
			if(s.getSsex() != null) {
				sql += "ssex = #{ssex},";
			}
			sql1 = sql.substring(0, sql.length()-1);
			sql1 += " where sid = #{sid}";
			return sql1;
		}
	}

在接口中定义内部类,来构建需要的动态sql语句,比使用标签的方式结构更加清晰

SQL语句构造器

sql语句构造器的常用方法文章来源地址https://www.toymoban.com/news/detail-811443.html

属性名 说明
SELECT 开始或插入到 SELECT 子句,可以被多次调用,参数也会添加到 SELECT子句。
FROM 开始或插入到 FROM 子句,可以被多次调用,参数也会添加到 FROM 子句
WHERE 插入新的 WHERE 子句条件,可以多次被调用
OR / AND 使用 OR / AND 来分隔当前的 WHERE 子句的条件
DELETE_FROM 开始一个 delete 语句并指定需要从哪个表删除的表名。
INSERT_INTO 开始一个 insert 语句并指定需要插入数据的表名
VALUES 插入到 insert 语句中。第一个参数是要插入的列名,第二个参数则是该列的值。
UPDATE 开始一个 update 语句并指定需要更新的表名
SET 针对 update 语句,插入到 “set” 列表中
语法(都一样)@UpdateProvider(type = 内部类名.class,method = "方法名")
    
eg:
//构造方法(查询)
@UpdateProvider(type = StudentSql.class,method = "selectstuGZQ")
public List<Student> selectStudentGZQ(Student s);
	
//构造方法(新增)
@InsertProvider(type = StudentSql.class, method = "insertstuGZQ")
public int insertStudentGZQ(Student s);
	
//构造方法(修改)
@UpdateProvider(type = StudentSql.class,method = "updatestuGZQ")	
public int updateStudentGZQ(Student s);
	
//构造方法(删除)
@DeleteProvider(type = StudentSql.class,method = "deletestuGZQ")
public int deleteStudentGZQ(int sid);

class StudentSql{
		public String selectstuGZQ(Student s) {
			return new SQL() {
				{
					SELECT("sid","birthday");
					SELECT("ssex","sname");
					SELECT("classid");
					FROM("Student");
					if(s.getSsex() != null) {
						WHERE("ssex = #{ssex}");
					}
					if(s.getClassId() != 0) {
						WHERE("classid = #{classId}");
					}
				}
			}.toString(); 
		}
		
		public String insertstuGZQ(Student s) {
			return new SQL() {
				{
					INSERT_INTO("student");
					if(s.getSname() != null) {
						VALUES("sname","#{sname}");						
					}
					if(s.getBirthday() != null) {
						VALUES("birthday", "#{birthday}");				
					}
					if(s.getSsex() != null) {
						VALUES("ssex", "#{ssex}");						
					}
					if(s.getClassId() != 0) {
						VALUES("classid", "#{classId}");				
					}
				}
			}.toString();
		}
		
		public String updatestuGZQ(Student s) {
			return new SQL() {
				{
					UPDATE("student");
					if(s.getSname() != null) {
						SET("sname=#{sname}");
					}
					if(s.getBirthday() != null) {
						SET("birthday=#{birthday}");
					}
					if(s.getSsex() != null) {
						SET("ssex=#{ssex}");
					}
					if(s.getClassId() != 0) {
						SET("classid=#{classId}");
					}
					WHERE("sid = #{sid}");
				}
			}.toString();
		}
		
		public String deletestuGZQ(int sid) {
			return new SQL() {
				{
					DELETE_FROM("student");
					WHERE("sid = #{v}");
				}
			}.toString();
		}
	}

到了这里,关于mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NineData:通过一个SQL语句构建实时数仓

    随着企业数据量呈现出爆炸式增长,跨部门、跨应用、跨平台的数据交互需求越来越频繁,传统的数据查询方式已经难以满足这些需求。同时,不同数据库系统之间的数据格式、查询语言等都存在差异,直接进行跨库查询十分困难。 虽然 MySQL、Oracle、PostgreSQL 等数据库系统都

    2024年02月05日
    浏览(49)
  • MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句

    目录 静态查询: 动态查询: 静态更新: 动态更新: 静态删除: 动态删除: 动态语句和静态语句在 MyBatis 中的作用如下: 静态查询: 静态查询是指在 SQL 语句中执行固定的查询操作,查询的条件和内容是预先确定的,不会随着用户输入或其他条件的改变而改变。以下是一

    2024年01月18日
    浏览(72)
  • MyBatis注解开发---实现增删查改和动态SQL

    目录 相关导读 1. 环境搭建 (1)创建持久层接口,并在接口方法上定义Sql语句  

    2023年04月18日
    浏览(45)
  • mybatis之动态sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例

    定义 :根据不同条件拼接SQLy语句,实现对数据库更准的操作。 实现方式 :映射器配置文件或者注解 常用动态SQL元素 : if元素 :判断语句,但条件分支判断 choose元素 :when、otherwise;多条件分支判断,等同于Java中的switch trim元素 :where,set;辅助元素,用于处理一些SQL拼接

    2024年02月02日
    浏览(39)
  • k8s-shell脚本判断pod状态并进入pod执行sql语句

    代码: 思路: 查看pod状态: 1、通过pod的label 获取到pod的名称(因为label总是固定的,名称不是固定的) 2、拿到pod名称,就可以确定pod的状态; 进入pod并执行sql文件: 1、创建sql文件,复制到pod内 2、通过kubectl exec 执行该脚本

    2024年02月13日
    浏览(37)
  • MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)

            批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了 1、Mapper.java中 说明: 参数是list  2、Mapper.xml中 说明: 通过trim标签拼接前后缀和

    2024年02月10日
    浏览(53)
  • MyBatis的代理开发方式、动态sql语句和typeHandlers和plugins标签实战

    接上篇博客: MyBatis基础知识和快速入门、MyBatis核心配置文件讲解,本文继续讲解MyBatis动态SQL语句、typeHandlers和plugins标签。 传统开发方式 编写UserDao接口 编写UserDaoImpl实现 mapper文件 测试传统方式 代理开发方式 代理开发方式介绍 采用 Mybatis 的代理开发方式实现 DAO 层的开发

    2023年04月27日
    浏览(43)
  • SpringBoot根据注解动态执行类中的方法

    有一个接口提供了xx的服务,有两个场景分别实现了xx的具体逻辑,标记为xx1和xx2。 然后场景一过来的时候执行xx1逻辑,场景二过来的时候执行xx2逻辑。 定义一个service层,提供xx的接口。 然后定义两个serviceImpl,@Service(name=\\\"\\\")标记不同的名称,分别提供xx的具体实现。 在使用

    2024年02月14日
    浏览(45)
  • 在Spring Boot中打印SQL语句的方法

    在Spring Boot项目中,调试和优化数据库操作是很常见的需求。通过打印SQL语句可以帮助开发人员快速了解数据库的操作情况,进而进行性能分析和调试。本文将介绍在Spring Boot中打印SQL语句的几种方法,帮助你更好地理解和优化数据库操作。 Spring Boot提供了一个配置选项,可以

    2024年02月06日
    浏览(55)
  • Oracle切割字符串的方法,SQL语句完成。

    Oracle用正则的方式循环切割字符串 需求:有一个这样子的 Str = “‘CNJ-520-180500000001|CNJ-520-181200000001|CNJ-520-190300000001|CNJ-520-190100000001|CNJ-520-181200000002’” ,然后我需要拿到每一个单号,每一个单号都要走一遍固定的逻辑。 方法: 我们需要使用oracle中的 正则表达式 进行字符匹

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包