Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)

简介: Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)

1.Mybatis注解开发之动态SQL语句


注意:Mybatis的动态sql语句开发, 可以分为三种写法:


1.脚本动态sql语句


2.方法中定义sql


3.结构化sql


2.案例环境


2.1.实体类 User(提供了Get、Set、toString方法)


20210720112538190.png


2.2.接口 IUserDao


20210720112643616.png


2.3.需求


使用动态sql, 执行IUserDao接口内的findUserByCondition方法


如果username属性有值,则查询条件中加上username=值


如果sex属性有值,则查询条件也商家 sex=值


3.动态SQL实现


3.1.脚本动态SQL语句


20210720112741453.png


把xml中的动态sql语句, 直接拷贝到注解中, 并使用script标签包括起来即可


3.2.方法中定义sql语句


3.2.1.需要定义一个专门用于生成动态sql语句的类. 并在类中定义一个专门给findUserByCondition()方法生成sql语句的方法.


20210720112821126.png

3.2.2.可以在方法中利用SELECT( ), FROM( ), WHERE( )等动态生成sql语句

20210720112848248.png

3.2.3.把该类的该方法,配置到接口的findUserByCondition()方法上,表示该方法所使用的查询的sql语句,由UserDynaSqlProvider类的findUserByConditionSql方法提供


20210720112907207.png

3.3.结构化sql语句


注意: 该方式和方式2一模一样, 只是在组装sql语句时的语法有少许区别.


3.3.1需要定义一个专门用于生成动态sql语句的类. 并在类中定义一个专门给findUserByCondition()方法生成sql语句的方法.


20210720113026978.png

3.3.2.可以在方法中利用SELECT( ), FROM( ), WHERE( )等动态生成sql语句


20210720113220926.png

3.3.3.把该类的该方法,配置到接口的findUserByCondition()方法上,表示该方法所使用的查询的sql语句,由UserDynaSqlProvider类的findUserByConditionSql方法提供

20210720113303778.png

测试


如果测试代码如下


20210720113342547.png


则程序运行产生的sql语句是:

select * from user where (username = ?)


运行结果是:


20210720113428617.png


如果测试代码如下:


20210720113438981.png


则程序运行产生的sql语句是:

select * from user where (username = ? and sex = ?)

运行结果是:


20210720113515245.png


目录
相关文章
|
4月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
291 18
|
4月前
|
SQL Java 数据库连接
SSM相关问题-1--#{}和${}有什么区别吗?--Mybatis都有哪些动态sql?能简述一下动 态sql的执行原理吗?--Spring支持的几种bean的作用域 Scope
在MyBatis中,`#{}`是预处理占位符,可防止SQL注入,适用于大多数参数传递场景;而`${}`是直接字符串替换,不安全,仅用于动态表名、列名等特殊场景。二者在安全性、性能及使用场景上有显著区别。
84 0
|
7月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`<if>`、`<where>`、`<set>`、`<foreach>`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`<sql>`和`<include>`实现代码复用,优化维护效率。
605 5
|
8月前
|
SQL Java 数据库连接
MyBatis动态SQL字符串空值判断,这个细节99%的程序员都踩过坑!
本文深入探讨了MyBatis动态SQL中字符串参数判空的常见问题。通过具体案例分析,对比了`name != null and name != ''`与`name != null and name != ' '`两种写法的差异,指出后者可能引发逻辑混乱。为避免此类问题,建议在后端对参数进行预处理(如trim去空格),简化MyBatis判断逻辑,提升代码健壮性与可维护性。细节决定成败,严谨处理参数判空是写出高质量代码的关键。
1049 0
|
9月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
9月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
9月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
9月前
|
Java 编译器 开发者
注解的艺术:Java编程的高级定制
注解是Java编程中的高级特性,通过内置注解、自定义注解及注解处理器,可以实现代码的高度定制和扩展。通过理解和掌握注解的使用方法,开发者可以提高代码的可读性、可维护性和开发效率。在实际应用中,注解广泛用于框架开发、代码生成和配置管理等方面,展示了其强大的功能和灵活性。
215 25
|
9月前
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
262 0
|
10月前
|
SQL XML Java
九、MyBatis动态SQL
九、MyBatis动态SQL
168 2