Mybatis动态SQL注解开发操作数据库

通过Mybatis的动态注解开发,只需要在映射文件中使用注解来配置映射关系,从而无需编写XML映射文件。常用的注解有@Select,@Update,@Insert,@Delete等,它们分别用于配置查询,更新,插入和删除操作。

方式一:在mapper文件中使用@Select,@Update,@Insert,@Delete注解

1、定义数据模型类Person.java

package com.lingyi.mybatis.bean;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "person")
public class Person {@TableId(value = "id",type = IdType.AUTO)private Integer id;private Integer age;private Date birthday;private String email;private String name;private String gender;private Double salary;
}

2、编写Mapper接口

创建一个PersonMapper接口,用于定义用户与数据库的相关操作,在接口方法上使用Mybatis的注解完成SQL操作。其中PersonMapper接口可以继承mybatis的BaseMapper,也可以不继承BaseMapper。下面在原有工程的PersonMapper下添加如下内容:

package com.lingyi.mybatis.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lingyi.mybatis.bean.Person;
import org.apache.ibatis.annotations.*;/**** BaseMapper是MyBatisPlus内置的通用Mapper,提供了很多的方法* 如果它提供的方法不能满足业务需求,我们可以在这里开发新的方法*/
//这里可以不需要填写@Mapper注解,因为在Applicaton.java的入口文件指明扫描了Mapper文件所在的包@MapperScan(basePackages = {"com.lingyi.mybatis.mapper"})
@Mapper
public interface PersonMapper extends BaseMapper<Person> {//mapper中自定义操作数据库的方法,通过xml方式,在xml文件中定义。public  Person getPersonById(Integer id);//mybatis动态SQL方式操作数据库@Select("select * from person where id = #{id}")Person getPersonByIdFromDynamicSql(@Param( "id") int id);@Insert("insert into person (age,birthday,email,gender,name,salary) Values(#{age},#{birthday},#{email},#{gender},#{name},#{salary})")int insertPesonByDynamicSql(Person person);@Update("update person set age = #{age} where id = #{id}")int updatePersonByDynamicSql(Person person);@Delete("delete from person where id = #{id}")int deletePersonByDynamicSql(Person person);}

3、编写测试用例

在原有工程的TestPersonMapper.java文件中添加测试用例

package com.lingyi.mybatis;import com.lingyi.mybatis.bean.Person;
import com.lingyi.mybatis.mapper.PersonMapper;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class TestPersonMapper {@Autowiredprivate PersonMapper personMapper;/*** 测试mybatis中xml方式操作数据库*/@Testpublic  void testPersonMapper(){Person person = personMapper.selectById(1);System.out.println(person);}/*** 测试mybatis动态SQL语法*/@Testpublic  void testSelectPersonByDynamicSql(){Person person =  personMapper.getPersonByIdFromDynamicSql(1);System.out.println(person);}@Testpublic  void testInsertPersonByByDynamicSql(){Person person = new Person();person.setAge(45);person.setName("lisi");person.setGender("男");person.setSalary(30000.0);person.setEmail("1234@qq.com");personMapper.insertPesonByDynamicSql(person);}@Testpublic void testUpdatePersonByDynamicSql(){Person person = new Person();person.setAge(35);person.setId(1);personMapper.updatePersonByDynamicSql(person);}@Testpublic  void testDeletePersonByDynamicSql(){Person person = new Person();person.setId(16);personMapper.deletePersonByDynamicSql(person);}
}

方式二:在Mapper接口中使用@SelectProvider或者@InsertProvider,@UpdateProvider,@DeleteProvider注解来实现动态生成SQL语句。

以下是一个使用@Select注解和Provider接口来动态生成SELECT语句的示例:

//mapper接口中
public interface PersonMapper {@SelectProvider(type = PersonSqlProvider.class, method = "getPersonFromProviderById")User getPersonFromProviderById(Long id);
}//PersonSqlProvider类中
public class PersonSqlProvider {public String getPersonFromProviderById(Long id) {return "SELECT * FROM person WHERE id = " + id;}
}

在上面的示例中,@SelectProvider注解指定了Provider接口的类型和方法,Provider接口中包含了生成SELECT语句的方法getPersonFromProviderById。在Provider接口的getPersonFromProviderById方法中,可以根据传入的参数动态生成SELECT语句。

通过这种方式,开发者可以根据不同的条件动态生成SELECT语句,从而实现更灵活的数据库查询操作。

在MyBatis中,可以使用动态SQL注解来实现动态生成SQL语句。以下是一些常用的动态SQL注解以及它们的使用方法:

1、@SelectProvider:用于动态生成SELECT语句的注解。

@SelectProvider(type = UserSqlProvider.class, method = "getUserById")
User getUserById(Long id);

在这个例子中,@SelectProvider注解指定了Provider接口的类型和方法,Provider接口中包含了生成SELECT语句的方法getUserById。

2、@InsertProvider:用于动态生成INSERT语句的注解。

@InsertProvider(type = UserSqlProvider.class, method = "insertUser")
void insertUser(User user);

在这个例子中,@InsertProvider注解指定了Provider接口的类型和方法,Provider接口中包含了生成INSERT语句的方法insertUser。

3、@UpdateProvider:用于动态生成UPDATE语句的注解。

@UpdateProvider(type = UserSqlProvider.class, method = "updateUser")
void updateUser(User user);

在这个例子中,@UpdateProvider注解指定了Provider接口的类型和方法,Provider接口中包含了生成UPDATE语句的方法updateUser。

4、@DeleteProvider:用于动态生成DELETE语句的注解。

@DeleteProvider(type = UserSqlProvider.class, method = "deleteUser")
void deleteUser(Long id);

在这个例子中,@DeleteProvider注解指定了Provider接口的类型和方法,Provider接口中包含了生成DELETE语句的方法deleteUser。

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

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

相关文章

Linux系统安全

作为一种开放源代码的操作系统&#xff0c;linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。 账号安全控制 用户账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号 才能进入计算机.在Linux系统中&#xff0c;提…

MIGO向成本中心发料,从成本中心收货

向成本中心发料&#xff0c;首先在MM03查看物料是否有库存&#xff0c;物料的计价标准和产成品的计价标准价是否同一种&#xff0c;S价或者V价 首先&#xff0c;“会计1”视图&#xff0c;查看物料库存 “成本2”视图查看标准成本发布 1、MIGO发货&#xff0c;选&#xff1a;A…

Solid Converter 10.1(PDF转换器)软件安装包下载及安装教程

Solid Converter 10.1下载链接&#xff1a;https://docs.qq.com/doc/DUkdMbXRpZ255dXFT 1、选中下载好的安装包右键解压到【Solid Converter 10.1.11102.4312】文件夹。 2、选中"solidconverter"右键以管理员身份运行 3、选择”自定义安装”&#xff0c;勾选”我已阅…

MySql 1170-BLOB/TEXT 错误

MySql 1170-BLOB/TEXT column idused in key specification without a key length 原因&#xff1a;由于将主键id设置为 text类型&#xff0c;所以导致主键 的长度&#xff0c;没有设置。 解决方案&#xff1a;方案1&#xff1a;将主键id设置为varchar 类型的,设置对应的长度…

如何通过Python将各种数据写入到Excel工作表

在数据处理和报告生成等工作中&#xff0c;Excel表格是一种常见且广泛使用的工具。然而&#xff0c;手动将大量数据输入到Excel表格中既费时又容易出错。为了提高效率并减少错误&#xff0c;使用Python编程语言来自动化数据写入Excel表格是一个明智的选择。Python作为一种简单易…

揭秘人工智能:探索智慧未来

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是人工智能?二. 人工智能的关键技术2.1 机器学习2.2 深度学习2.1 计算机…

《系统架构设计师教程(第2版)》第3章-信息系统基础知识-05-专家系统(ES)

文章目录 1. 先了解人工智能2.1 人工智能的特点2.2 人工智能的主要分支2. ES概述2.1 概述2.2 和一般系统的区别1)第一遍说了5点(理解为主)2)第二遍说的3点(主要记这个)3. ES的特点4. ES的组成4.1 知识库4.2 综合数据库4.3 推理机4.4 知识获取模块4.5 解释程序4.6 人一机接…

linux泡妞大法之Nginx网站服务

技能目标 学会 Nginx 网站服务的基本构建 了解 Nginx 访问控制实现的方法 掌握 Nginx 部署虚拟主机的方法 学会 LNMP 架构部署及应用的方法 在各种网站服务器软件中&#xff0c;除了 Apache HTTP Server 外&#xff0c;还有一款轻量级…

授权策略(authorize方法)

authorize方法&#xff08;授权策略的使用示例&#xff09; $this->authorize(destroy, $status) 要实现这个功能&#xff0c;你需要执行以下步骤&#xff1a; 1、创建一个授权策略&#xff1a; 在Laravel中&#xff0c;授权策略是用于定义用户对特定操作的权限的类。你可…

我是一片骂声中成长起来的专家,RocketMQ消息中间件实战派上下册!!

曾几何&#xff0c;我的技术真的很烂&#xff0c;烂到技术主管每次都是点名要Review我的业务代码。 曾几何&#xff0c;我对技术沉淀没有一点自我意识&#xff0c;总是觉得临时抱一下佛脚就可以了。 曾几何&#xff0c;我也觉得技术无用&#xff0c;看看那些业务领导&#xf…

每日一道算法题day-two(备战蓝桥杯)

今天带来的题目是&#xff1a; 填充 有一个长度为 n的 0101 串&#xff0c;其中有一些位置标记为 ?&#xff0c;这些位置上可以任意填充 0 或者 1&#xff0c;请问如何填充这些位置使得这个 0101 串中出现互不重叠的 00 和 11 子串最多&#xff0c;输出子串个数。 输入格式…

【Kubernetes】Kubernetes ConfigMap 实战指南

ConfigMap 是 Kubernetes 中一种用于存储配置信息的资源对象,它允许您将配置与应用程序解耦,轻松管理和更新配置。在这个实战指南中,我们将涵盖创建、更新、删除 ConfigMap,并探讨其原理、优点、不足。最后,我们将通过一个实际案例演示如何在 Node.js 应用程序中使用 Conf…

Spring框架-Spring Bean管理

文章目录 Spring Bean管理Spring Bean配置方式&#xff1a;使用XML配置方式&#xff1a;User.javaapplicationContext.xmlUserTest.java 使用注解配置方式&#xff1a;ComponentServiceRepositoryConfigurationScopeValueQualifierPrimary Bean的作用域和生命周期&#xff1a;B…

2023年广东省网络安全A模块(笔记详解)

模块A 基础设施设置与安全加固 一、项目和任务描述&#xff1a; 假定你是某企业的网络安全工程师&#xff0c;对于企业的服务器系统&#xff0c;根据任务要求确保各服务正常运行&#xff0c;并通过综合运用登录和密码策略、流量完整性保护策略、事件监控策略、防火墙策略等多…

企业数据资源入表,对数商企业有什么变化?释放了什么信号?

不是必须的&#xff0c;二者没有必然联系。 数据资产入表的专业术语是数据资产会计核算。在《企业数据资源相关会计处理暂行规定》出台之前&#xff0c;很多企业的数据产品研究和开发阶段所产生的支出大都是费用化&#xff0c;直接计入损益表&#xff0c;但企业有一部分数据产…

Linux习题4

解析&#xff1a; 用二进制表示 rwx&#xff0c;r 代表可读&#xff0c;w 代表可写&#xff0c;x 代表可执行。如果可读&#xff0c;权限二进制为 100&#xff0c;十进制是4&#xff1b;如果可写&#xff0c;权限二进制为 010&#xff0c;十进制是2&#xff1b; 如果可执行&a…

如何在Linux上部署1Panel面板并远程访问内网Web端管理界面

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

JAVA那些事(八)异常处理

异常处理机制 Java中的异常处理机制是Java程序设计中非常重要的一个特性&#xff0c;它允许程序在出现错误或意外情况时进行适当的响应&#xff0c;而不是直接导致程序崩溃。异常处理遵循“捕获或者声明”原则&#xff0c;这意味着程序员要么捕获并处理可能发生的异常&#xf…

ReactNative 常见问题及处理办法(加固混淆)

文章目录 摘要 引言 正文ScrollView内无法滑动RN热更新中的文件引用问题RN中获取高度的技巧RN强制横屏UI适配问题低版本RN&#xff08;0.63以下&#xff09;适配iOS14图片无法显示问题RN清理缓存RN navigation参数取值pod install 或者npm install 443问题处理 打开要处理的…

2023中国PostgreSQL数据库生态大会-核心PPT资料下载

一、峰会简介 大会以“极速进化融合新生”为主题&#xff0c;探讨了PostgreSQL数据库生态的发展趋势和未来方向。 在大会主论坛上&#xff0c;专家们就PostgreSQL数据库的技术创新、应用实践和生态发展进行了深入交流。同时&#xff0c;大会还设置了技术创新&云原生论坛、…