当前位置:首页 > Java技术 > Mybatis动态SQL配置

Mybatis动态SQL配置

2022年11月09日 15:19:27Java技术8

使用 if where foreach标签对映射配置文件中sql语句进行动态配置

1、首先在dao接口中设置两个查询方法

 1 package sun.dao;
 2 
 3 import sun.domain.QueryObj;
 4 import sun.domain.User;
 5 
 6 import java.util.List;
 7 
 8 public interface UserDao {
 9   
10     /**
11      * 根据已有条件进行查询(if where)
12      */
13     List<User> findUserByCondition(User user);
14 
15     /**
16      * 根据集合中的id进行查询(if where foreach)
17      */
18     List<User> findUserByList(QueryObj qobj);
19 }

2、配置映射配置文件(使用if where foreach三种标签)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="sun.dao.UserDao">
 7     <resultMap id="userMap" type="sun.domain.User">
 8         <!--主键字段对应-->
 9         <id property="user_id" column="id"></id>
10         <!--非主键关系对应-->
11         <result property="user_name" column="username"></result>
12         <result property="user_birthday" column="birthday"></result>
13         <result property="user_address" column="address"></result>
14         <result property="user_sex" column="sex"></result>
15     </resultMap>
16 
17     <!--公共sql语句抽取-->
18     <sql id="defaultSelect">
19         select * from user
20     </sql>
21 
22     <!--根据条件进行查询-->
23     <select id="findUserByCondition" resultMap="userMap" parameterType="user">
24         <include refid="defaultSelect"></include>
25         <where>
26             <if test="user_name!=null">
27                 and username=#{user_name}
28             </if>
29             <if test="user_sex!=null">
30                 and sex=#{user_sex}
31             </if>
32         </where>
33     </select>
34     <!--根据id列表进行查询-->
35     <select id="findUserByList" parameterType="queryobj" resultMap="userMap">
36         <include refid="defaultSelect"></include>
37         <where>
38             <if test="ids!=null and ids.size()>0">
39                 <foreach collection="ids" open="id in (" close=")" item="id" separator=",">
40                     #{id}
41                 </foreach>
42             </if>
43         </where>
44     </select>
45 </mapper>

在映射配置文件中可以使用sql标签对常用的sql语句进行抽取,在操作标签内如果需要使用该sql语句可使用include标签进行导入即可。

(注意:使用sql语句进行抽取时,sql语句后面不要添加分号,否则会导致在操作标签内引用后拼接sql字符串时造成错误)

 

如果在该段代码中有关于parameterType未使用全限定类名的疑惑请参考Mybatis项目构建和CURD操作博客最下面的properties标签和typeAliases标签的使用

3、测试类中进行测试

 1 package sun.test;
 2 
 3 
 4 import org.apache.ibatis.io.Resources;
 5 import org.apache.ibatis.session.SqlSession;
 6 import org.apache.ibatis.session.SqlSessionFactory;
 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 8 import org.junit.After;
 9 import org.junit.Before;
10 import org.junit.Test;
11 import sun.dao.UserDao;
12 import sun.domain.QueryObj;
13 import sun.domain.User;
14 
15 import java.io.IOException;
16 import java.io.InputStream;
17 import java.util.ArrayList;
18 import java.util.Date;
19 import java.util.List;
20 
21 public class MybatisTest {
22 
23     private InputStream in;
24     private SqlSession sqlSession;
25     private UserDao userDao;
26 
27     @Before
28     public void init() throws IOException {
29         // 读取配置文件
30         in = Resources.getResourceAsStream("SqlMapConfig.xml");
31         // 创建SqlSessionFactory
32         SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
33         SqlSessionFactory factory = builder.build(in);
34         // 使用工厂生产sqlsession对象
35         sqlSession = factory.openSession();
36         // 使用sqlsession创建UserDao接口代理对象
37         userDao = sqlSession.getMapper(UserDao.class);
38     }
39 
40     @After
41     public void destory() throws IOException {
42         sqlSession.commit();
43         sqlSession.close();
44         in.close();
45     }
46 
47 
48     @Test
49     public void conditionTest(){
50         User user = new User();
51         user.setUser_name("kelvin");
52         user.setUser_sex("女");
53         List<User> users = userDao.findUserByCondition(user);
54         for (User user1 : users) {
55             System.out.println(user1);
56         }
57     }
58 
59     @Test
60     public void ids(){
61         QueryObj queryObj = new QueryObj();
62         ArrayList<Integer> ids = new ArrayList<Integer>();
63         ids.add(51);
64         ids.add(52);
65         ids.add(53);
66         queryObj.setIds(ids);
67         List<User> users = userDao.findUserByList(queryObj);
68         for (User user : users) {
69             System.out.println(user);
70         }
71 
72     }
73 }

测试结果如下:

Mybatis动态SQL配置 _ JavaClub全栈架构师技术笔记

 

 Mybatis动态SQL配置 _ JavaClub全栈架构师技术笔记

 

作者:佛祖让我来巡山
来源链接:https://www.cnblogs.com/sun-10387834/p/13650560.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68937.html

标签: MyBatis
分享给朋友:

“Mybatis动态SQL配置” 的相关文章

Mybatis中的${}和#{}区别

一、${}与#{}的区别 1、符号类型 (1)#{}:参数占位符,即预编译 (2)${} :字符串替换符,即SQL拼接 2、防注入问题 (1)#{}:很大程度上能防止sql 注入 (2)${}:不能防止sql 注入 3、参数替换位置 DBMS:数据库管理系统(D...

SpringBoot 整合MybatisPlus 实现字段自动注入

SpringBoot 整合MybatisPlus 实现字段自动注入

最近在整合MybatisPlus,发现mybatisPlus有很多有趣并且有用的功能,今天给大家分享一个:如何使用MybatisPlus实现数据库字段自动填充的功能。 前言 在我们日常开发中,我们经常会为每个表设置一个创建时间、更新时间或者创...

从0开始完成SpringBoot+Mybatis实现增删改查

从0开始完成SpringBoot+Mybatis实现增删改查

1、准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis。 2)项目结构介绍:...

springboot+mybatis连接Postgresql数据库实例

springboot+mybatis连接Postgresql数据库实例

接上篇配好springboot+mybatis+日志。mysql的是比较基础的这里就不写了 这里写一下关于配置postgresql数据库需要改哪些 首先介绍场景需求。需要连接oushu database  有兴趣的可以看一下官网示例:http://ww...

Springboot与MyBatis简单整合

Springboot与MyBatis简单整合

之前搭传统的ssm框架,配置文件很多,看了几天文档才把那些xml的逻辑关系搞得七七八八,搭起来也是很麻烦,那时我完全按网上那个demo的版本要求(jdk和tomcat),所以最后是各种问题没成功跑起来。    今天尝试用springboot来整合,不敢相信才失败几次...

报org.mybatis.spring.MyBatisSystemException: nested exception is `***.ReflectionException解决方法!

错误描述: 1.数据库中表(se_seat)设计 字段 数据类型 seSeatId varchar seSeatName...

SpringBoot整合MyBatisPlus配置动态数据源

目录 SpringBoot整合MyBatisPlus配置动态数据源 MybatisPlu...

解决:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions

Mybatis结合Spring报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResult...

Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested

Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested

异常 在测试Spring MVC+Mybatis整合时,运行有sql操作的页面报错: 错误原因是jdbc.properties的配置文件内后空格,去掉就行,如图: 然后再重跑项目就可以了 作者:你想象不到的菜 来源链接:htt...

消息:Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested

HTTP Status 500 – Internal Server Error Type 异常报告 消息 Request processing failed; nested exception is org.mybatis.spring.MyBatisS...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。