MyBatis的动态SQL!!!

一.if和where的使用。

1.首先在UserMapper接口中声明一个方法:

package com.by.mapper;import com.by.pojo.User;import java.util.List;/*** <p>Project: mybatis - UserMapper</p>* <p>Powered by scl On 2023-12-22 15:52:05</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public interface UserMapper {/*** 动态SQL的练习 if/where* @return*/List<User> findAllById(User user);}

2.在UserMapper.xml文件中实现这个接口:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper"><!--动态SQL练习 if/where--><select id="findAllById" parameterType="user" resultType="user">select * from user<where><if test="id!=null">and id=#{id}</if><if test="username!=null and username!=''">and username=#{username}</if><if test="sex!=null and sex!=''">and sex=#{sex}</if></where></select>
</mapper>

3.测试类:

/** Copyright (c) 2020, 2023,  All rights reserved.**/
package com.by;import com.by.mapper.AccountMapper;
import com.by.mapper.RoleMapper;
import com.by.mapper.UserMapper;
import com.by.pojo.Account;
import com.by.pojo.Role;
import com.by.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** <p>Project: mybatis - MyBatisTest</p>* <p>Powered by scl On 2023-12-18 11:44:53</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class MyBatisTestRole {private InputStream inputStream;private SqlSession sqlSession;@Beforepublic void init() throws IOException {// 加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);// 创建sqlSessionFActorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获得数据的绘画实例sqlSession = sessionFactory.openSession();}/*** 动态SQL if/where** @throws IOException*/@Testpublic void findUserById() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("李星云");user.setSex("男");user.setId(42);List<User> userList = userMapper.findAllById(user);for (User user1 : userList) {System.out.println(user1);}}@Afterpublic void close() throws IOException {inputStream.close();sqlSession.close();}}

4.结果展示:

二. set的使用

1.首先在UserMapper接口中声明一个方法:

package com.by.mapper;import com.by.pojo.User;import java.util.List;/*** <p>Project: mybatis - UserMapper</p>* <p>Powered by scl On 2023-12-22 15:52:05</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public interface UserMapper {/*** 动态SQL的练习  set*/void updateUser(User user);}

2.在UserMapper.xml文件中实现这个方法:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper"><!--动态SQL练习 set--><update id="updateUser" parameterType="user">update user<set><if test="username!=null and username!=''">username=#{username},</if><if test="sex!=null and sex!=''">sex=#{sex},</if></set>where id=#{id}</update></mapper>

3.实现类:

/** Copyright (c) 2020, 2023,  All rights reserved.**/
package com.by;import com.by.mapper.AccountMapper;
import com.by.mapper.RoleMapper;
import com.by.mapper.UserMapper;
import com.by.pojo.Account;
import com.by.pojo.Role;
import com.by.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** <p>Project: mybatis - MyBatisTest</p>* <p>Powered by scl On 2023-12-18 11:44:53</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class MyBatisTestRole {private InputStream inputStream;private SqlSession sqlSession;@Beforepublic void init() throws IOException {// 加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);// 创建sqlSessionFActorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获得数据的绘画实例sqlSession = sessionFactory.openSession();}/*** 动态SQL set** @throws IOException*/@Testpublic void updateUser() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("侯卿");user.setSex("男");user.setId(42);userMapper.updateUser(user);}@Afterpublic void close() throws IOException {inputStream.close();sqlSession.close();}}

4.结果展示:

三.trim的使用

1.首先在User Mapper接口中声明方法:

package com.by.mapper;import com.by.pojo.User;import java.util.List;/*** <p>Project: mybatis - UserMapper</p>* <p>Powered by scl On 2023-12-22 15:52:05</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public interface UserMapper {/*** 动态SQL练习 trim*/void insertUser(User user);
}

2.在UserMapper.xml文件中实现这个方法:、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper"><!--动态SQL练习 trim--><insert id="insertUser" parameterType="user">insert into user<trim prefix="(" suffix=")" suffixOverrides=","><if test="username!=null and username !=''">username,</if><if test="sex!=null and sex !=''">sex,</if><if test="address!=null and address !=''">address,</if><if test="birthday!=null ">birthday,</if></trim><trim prefix="values(" suffix=")" suffixOverrides=","><if test="username!=null and username !=''">#{username},</if><if test="sex!=null and sex !=''">#{sex},</if><if test="address!=null and address !=''">#{address},</if><if test="birthday!=null ">#{birthday},</if></trim></insert></mapper>

3.实现类:

/** Copyright (c) 2020, 2023,  All rights reserved.**/
package com.by;import com.by.mapper.AccountMapper;
import com.by.mapper.RoleMapper;
import com.by.mapper.UserMapper;
import com.by.pojo.Account;
import com.by.pojo.Role;
import com.by.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** <p>Project: mybatis - MyBatisTest</p>* <p>Powered by scl On 2023-12-18 11:44:53</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class MyBatisTestRole {private InputStream inputStream;private SqlSession sqlSession;@Beforepublic void init() throws IOException {// 加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);// 创建sqlSessionFActorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获得数据的绘画实例sqlSession = sessionFactory.openSession();}/*** 动态SQL trim** @throws IOException*/@Testpublic void insertUser() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("侯卿");user.setSex("男");userMapper.insertUser(user);}@Afterpublic void close() throws IOException {inputStream.close();sqlSession.close();}}

4.结果展示:

四.foreach的使用

1.UserMapper接口中定义方法:

/*** 动态SQL练习 foreach*/void deleteUserByIds(@Param("arrIds") Integer[] arrIds);

2.UserMapper.xml文件中实现方法:

 <!--动态sql  foreach--><delete id="deleteUserByIds" parameterType="int[]">delete from user where id in<foreach collection="arrIds" open="(" close=")" separator="," item="id">#{id}</foreach></delete>

3.测试类:

/*** 动态SQL foreach** @throws IOException*/@Testpublic void deleteUserByIds() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//List<Integer> list=new ArrayList<>();//list.add(41);//list.add(42);//list.add(43);Integer[] integers = new Integer[]{41,42,43};userMapper.deleteUserByIds(integers);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295091.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯搬运 solidworks 2021卸载方法,怎么完全彻底卸载删除清理干净solidworks 2021各种残留注册表和文件?

纯搬运 solidworks 2021卸载方法&#xff0c;怎么完全彻底卸载删除清理干净solidworks 2021各种残留注册表和文件&#xff1f; 网址&#xff1a; solidworks 2021卸载方法&#xff0c;怎么完全彻底卸载删除清理干净solidworks 2021各种残留注册表和文件&#xff1f; solidworks…

推荐给前端开发的 5 款 Chrome 扩展

工欲善其事&#xff0c;必先利其器。Chrome 可能是前端开发中使用最多的浏览器。在日常开发中&#xff0c;下列几款 Chrome 扩展也许能让你的开发工作事半功倍 &#x1f680; Vue.js devtools ⚙️ vue 官方专为 vue 应用开发的调试工具。 通过使用它&#xff0c;你可以快速查看…

Iceberg:ZOrder的实现及执行流程分析

ZOrder简介 使用Z-Order索引&#xff0c;可以按任意维度对数据进行排序&#xff0c;以获得更加高效且均衡地范围查询。它即可以作为一级索引&#xff0c;直接影响底层数据组织形式&#xff0c;甚至可以取代二索引&#xff08;更加节省内存&#xff0c;吞吐量也理更高&#xff…

SUSE Linux服务器使用zypper安装nginx

SUSE Linux 的云服务器用户&#xff0c;不能yum,安装软件&#xff0c;可通过 zypper 快速安装软件。 使用 root 账号登录 openSUSE 操作系统的云服务器。 执行 zypper service-list 或 zypper sl 命令 列出软件源 安装软件包 执行 zypper search 或 zypper se 命令&#…

【Linux系统基础】(1)Linux基础命令全面详解

在计算机世界中&#xff0c;Linux操作系统以其稳定性、安全性和开源性而受到广大程序员和系统管理员的喜爱。然而&#xff0c;对于初学者来说&#xff0c;Linux的命令行界面可能会显得有些复杂和难以理解。本文将详细介绍一些常用的Linux基础命令&#xff0c;帮助你更好地理解和…

2023年软件测试已经崩盘了吗?为什么很难找到工作?

最近后台很多粉丝给我留言&#xff1a; 2023年软件测试已经崩盘了吗&#xff0c;为什么都找不到工作了&#xff1f; 确实&#xff0c;今年经济大环境不好&#xff0c;企业也都在降本增效&#xff0c;如果技术能力还在被应届生竞争岗位的阶段&#xff0c;只会越来越难。 找不…

Qt中字符串转换为JS的函数执行

简介 在 QML 中&#xff0c;将 JavaScript 字符串转换为函数通常涉及使用 Function 构造函数或 eval() 函数。但是&#xff0c;QML 的环境对 JavaScript 的支持有一定的限制&#xff0c;因此不是所有的 JavaScript 功能都可以在 QML 中直接使用。 以下介绍都是在Qt5.12.1…

Spring security之授权

前言 本篇为大家带来Spring security的授权&#xff0c;首先要理解一些概念&#xff0c;有关于&#xff1a;权限、角色、安全上下文、访问控制表达式、方法级安全性、访问决策管理器 一.授权的基本介绍 Spring Security 中的授权分为两种类型&#xff1a; 基于角色的授权&…

Nacos单机安装

采用的版本是Nacos Release 2.3.0 (Nov 30, 2023) alibaba/nacos GitHub 依赖于jdk&#xff0c;要先安装好jdk1.8。 修改配置 下载解压后&#xff0c;修改配置文件&#xff1a;conf/application.properties。 nacos.core.auth.plugin.nacos.token.secret.key 官方文档Na…

5分钟学会用pytest进行自动化测试

Pytest作为广泛使用的Python测试框架之一&#xff0c;可以用于单元测试、功能测试、性能测试等场合。自动化测试是功能测试的一种形式&#xff0c;可以使用Pytest编写并管理自动化测试用例&#xff0c;再执行相应的自动化测试。 功能测试通常包括接口测试和Web测试两种类型&am…

低代码如何助力企业数字化转型?

目录 一、低代码开发是什么&#xff1f; 二、低代码与企业数字化转型 1&#xff09;集成化 2&#xff09;智能化 3&#xff09;定制化 三、低代码开发平台对于企业数字化转型的优势 01、提供源码 02、私有化部署 03、敏捷开发 04、拓展能力 四、低代码带来的效益 以…

2023年12月GESP Python五级编程题真题解析

【五级编程题1】 【试题名称】&#xff1a;小杨的幸运数 【问题描述】 小杨认为&#xff0c;所有大于等于a的完全平方数都是他的超级幸运数。 小杨还认为&#xff0c;所有超级幸运数的倍数都是他的幸运数。自然地&#xff0c;小杨的所有超级幸运数也都是幸运数。 对于一个…