MyBatis映射文件深入

简介: MyBatis映射文件深入

MyBatis映射文件深入

MyBatis映射文件深入

1.1 动态sql语句

1. 动态sql语句概述
Mybatis的映射文件中,前面我们的SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的SQL是动态变化的,
此时在前面的学习中我们的SQL 就不能满足要求了。
参考的官方文档,描述如下:

1.1 动态sql语句

2. 动态SQL 之
我们根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在id如果不为空时可以根据id查询,如果
username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。
< select id="findByCondition" parameterType="user" resultType="user" >
select * from User
< where >
< if test="id!=0" >
and id=#{id}
</ if >
< if test="username!=null" >
and username=#{username}
</ if >
</ where >
</ select >

1.1 动态sql语句

2. 动态SQL 之
当查询条件id和username都存在时,控制台打印的sql语句如下:
... ... ...
// 获得 MyBatis 框架生成的 UserMapper 接口的实现类
UserMapperuserMapper= sqlSession.getMapper(UserMapper. class );
User condition = new User();
condition.setId( 1 );
condition.setUsername( "lucy" );
User user= userMapper.findByCondition(condition);
... ... ...

1.1 动态sql语句

2. 动态SQL 之
当查询条件只有id存在时,控制台打印的sql语句如下:
... ... ...
// 获得 MyBatis 框架生成的 UserMapper 接口的实现类
UserMapperuserMapper= sqlSession.getMapper(UserMapper. class );
User condition = new User();
condition.setId( 1 );
User user= userMapper.findByCondition(condition);
... ... ...

1.1 动态sql语句

3. 动态SQL 之
循环执行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。
< select id="findByIds" parameterType="list" resultType="user" >
select * from User
< where >
< foreach collection="array" open="id in(" close=")" item="id" separator="," >
#{id}
</ foreach >
</ where >
</ select >

1.1 动态sql语句

3. 动态SQL 之
测试代码片段如下:
… … …
// 获得 MyBatis 框架生成的 UserMapper 接口的实现类
UserMapperuserMapper= sqlSession.getMapper(UserMapper. class );
int [] ids = new int []{ 2 , 5 };
List<User> userList= userMapper.findByIds(ids);
System. out .println(userList);
... ... ...

1.1 动态sql语句

3. 动态SQL 之
foreach标签的属性含义如下:
<foreach>标签用于遍历集合,它的属性:
  • collection:代表要遍历的集合元素,注意编写时不要写#{}
  • open:代表语句的开始部分
  • close:代表结束部分
  • item:代表遍历集合的每个元素,生成的变量名
  • sperator:代表分隔符

1.2 SQL片段抽取

Sql中可将重复的sql提取出来,使用时用include 引用即可,最终达到sql重用的目的
<!-- 抽取 sql 片段简化编写 -->
< sqlid="selectUser" select * from User</ sql >
< select id="findById" parameterType="int" resultType="user" >
< include refid="selectUser" ></ include > where id=#{id}
</ select >
< select id="findByIds" parameterType="list" resultType="user" >
< include refid="selectUser" ></ include >
< where >
< foreachcollection="array" open="id in(" close=")" item="id" separator="," >
#{id}
</ foreach >
</ where >
</ select >

MyBatis映射文件配置:

<select>:查询
<insert>:插入
<update>:修改
<delete>:删除
<where>:where条件
<if>:if判断
<foreach>:循环
<sql>:sql片段抽取

1.3 知识小结

目录
相关文章
|
6月前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
403 0
|
6月前
|
SQL
Mybatis.xml文件中大于小于等于
Mybatis.xml文件中大于小于等于
70 0
|
12天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
89 3
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
71 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
4月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
4月前
|
Java 数据库连接 Maven
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失