mybatis-plus编程接口

简介

使用Java语言对数据库进行操作,通常需要继承一些依赖Spring容器的ORM框架。在后端项目中非常高效且稳定。但对于一些客户端或者一些临时任务,非Spring环境下想对数据库进行简单的CRUD通常需要使用JDBC来实现,这种方式要自己拼接SQL,效率低且容易出错。直接使用ORM框架的编程接口来进行数据库操作,可以弥补Java语言在客户端类任务的数据库操作短板。

使用步骤

下述示例介绍了使用mybatis-plus的接口来实现数据库的操作。

  1. 在application.properties中新增数据库相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://<DB_IP>:<DB_PORT>/<DB_NAME>?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=<USER_NAME>
spring.datasource.password=<PASSWORD>
  1. 引入相关依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version>
</dependency>
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version>
</dependency>
  1. 新建工具类:MybatisPlusUtil
public class MybatisPlusUtil {private static SqlSessionFactory sqlSessionFactory;public static <P, R> R getMapperAndExec(Class<P> clazz, Function<P, R> function) {if (sqlSessionFactory == null) {initSqlSessionFactory();}try (SqlSession sqlSession = sqlSessionFactory.openSession()) {R r = function.apply(sqlSession.getMapper(clazz));sqlSession.commit();return r;}}@SneakyThrowsprivate static DataSource getDataSource() {Properties props = new Properties();props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"));String url = props.getProperty("spring.datasource.url");String username = props.getProperty("spring.datasource.username");String password = props.getProperty("spring.datasource.password");String driver = props.getProperty("spring.datasource.driver-class-name");HikariConfig config = new HikariConfig();config.setJdbcUrl(url);config.setUsername(username);config.setPassword(password);config.setDriverClassName(driver);return new HikariDataSource(config);}private static synchronized void initSqlSessionFactory() {if (sqlSessionFactory == null) {SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();MybatisConfiguration configuration = new MybatisConfiguration();configuration.setMapUnderscoreToCamelCase(true);configuration.setUseGeneratedKeys(true);configuration.addInterceptor(getPageInterceptor());configuration.addMappers("<MAPPER_PACKAGE>");configuration.setEnvironment(new Environment("development", new JdbcTransactionFactory(), getDataSource()));sqlSessionFactory = builder.build(configuration);}}private static Interceptor getPageInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setDbType(DbType.MYSQL);paginationInnerInterceptor.setOverflow(true);paginationInnerInterceptor.setMaxLimit(500L);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}

测试

  1. 准备数据库表、Mapper以及Entity文件
// UserMapper.java
@MyBatisDao
public interface UserMapper extends BaseMapper<UserEntity>  {}// UserEntity.java
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("t_user")
public class UserEntity {@TableId(value = "id", type = IdType.AUTO)private Long id;private String username;private String password;
}
  1. 新建一个main方法用于测试
public static void main(String[] args) {UserEntity user = new UserEntity(null, "jack", "123456");MybatisPlusUtil.getMapperAndExec(UserMapper.class, mapper -> mapper.insert(user));
}

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

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

相关文章

C语言中static和volatile关键字的作用

static 作用&#xff1a; 1 修饰局部变量&#xff1a;表示该局部变量只初始化一次&#xff0c;地址空间不释放 2 修饰全局变量&#xff1a;表示该全局变量只在此文件中使用&#xff0c;别的文件无法访问此变量 3 修饰函数&#xff1a; 表示修饰的函数只在此文件中使用&#xff…

RCE学习(一)

一.知识点 RCE&#xff1a;远程命令/代码执行漏洞&#xff0c;简称为RCE漏洞&#xff0c;可以直接向服务器后台远程注入操作系统的命令或者代码&#xff0c;从而拿到服务器后台的权限。RCE分为远程执行命令&#xff08;执行ping命令&#xff09;和远程代码执行eval 简单来说就…

VMware导入ova/ovf虚拟机文件

1.文件-打开-ova文件 2.为新虚拟机起名称 3.等待导入 4.导入完成&#xff0c;可以开始使用 参考链接&#xff1a;VMware导入ova/ovf虚拟机文件

浅谈Session和Cookie

各位大佬光临寒舍&#xff0c;希望各位能赏脸给个三连&#xff0c;谢谢各位大佬了&#xff01;&#xff01;&#xff01; 目录 1.Cookie 2.Sesssion&#xff08;会话&#xff09; 3.Session和Cookie的联系 4.总结 1.Cookie Cookie是客户端存储数据的机制&#xff0c;一般是…

洛谷P10397题解

题目描述 给定一条 std::freopen 语句&#xff0c;输出其操作的文件名称。 形式化地&#xff0c;std::freopen 语句都应该恰好是 std::freopen("<title>","<mode>",<stream>);其中 <title> 为其操作的文件名称。其至少包含一个…

英语学习笔记5——Nice to meet you.

Nice to meet you. 很高兴见到你。 词汇 Vocabulary Mr. 先生 用法&#xff1a;自己全名 / 姓 例如&#xff1a;Mr. Zhang Mingdong 或 Mr. Zhang&#xff0c;绝对不能是 Mr. Mingdong&#xff01; Miss 女士&#xff0c;小姐 未婚 用法&#xff1a;自己全名 / 姓 例如&#…

java本地锁与分布式锁-个人笔记 @by_TWJ

目录 1. 本地锁1.1. 悲观锁与乐观锁1.2. 公平锁与非公平锁1.3. CAS1.4. synchronized1.5. volatile 可见性1.6. ReentrantLock 可重入锁1.7. AQS1.8. ReentrantReadWriteLock 可重入读写锁 2. 分布式锁3. 额外的3.1. synchronized 的锁升级原理3.2. synchronized锁原理 1. 本地…

Spring Task 定时任务没有定时执行是为什么?

目录 SpringBoot 定时任务的原理任务一直阻塞会怎么样&#xff1f;多个定时任务的执行具有相同表达式的定时任务&#xff0c;它们的执行顺序如何&#xff1f;Spring Task 和 Linux crontab 的 cron 语法区别&#xff1f;在 cron 语法中容易犯的错误Async 异步注解原理及作用并发…

优化sqlserver中的 not like

如果你想要优化一个查询&#xff0c;特别是当使用 NOT LIKE 来排除包含某个字符&#xff08;如 ;&#xff09;的记录时&#xff0c;确保查询能够高效执行的关键是索引和查询结构。但是&#xff0c;对于 NOT LIKE 操作符来说&#xff0c;特别是当模式以通配符 % 开头时&#xff…

【ROMA核心特性数据、服务、消息、设备集成及统一运维】

1、数据集成 FDI旨在解决多种数据源的快速灵活集成能力&#xff0c;您可以在任意时间、任意地点、任意系统之间实现实时数据订阅和定时增量数据迁移。 &#xff08;1&#xff09;数据集成任务的生命周期管理 &#xff08;2&#xff09;FDI支持修改数据集成任务的信息、查看数…

初识Node.js-认识node(安装Node.js环境配置)

目录 一、node介绍 1.概念和特点 2.核心功能 3.应用场景 二、Node初使用 1.安装node配置 windows上安Node.js 1.windows安装包&#xff08;.msi&#xff09; 2、Windows 二进制文件 (.exe)安装 Linux 上安装 Node.js 直接使用已编译好的包 Ubuntu 源码安装 Node.js …

【JVM】垃圾回收机制(Garbage Collection)

目录 一、什么是垃圾回收&#xff1f; 二、为什么要有垃圾回收机制&#xff08;GC&#xff09;&#xff1f; 三、垃圾回收主要回收的内存区域 四、死亡对象的判断算法 a&#xff09;引用计数算法 b&#xff09;可达性分析算法 五、垃圾回收算法 a&#xff09;标记-清除…

GDPU 天码行空11

&#xff08;一&#xff09;实验目的 1、掌握JAVA中IO中各种类及其构造方法&#xff1b; 2、重点掌握IO中类所具有的IO操作方法&#xff1b; 3、熟悉软件中登录模块的开发方法&#xff1b; 4、掌握IO中读写常用方法。 5、进一步熟悉正则规则的使用方法。 &#xff08;二&…

上岸武汉顶级985!苦尽甘来的那一天,山河星月都作贺礼。

今天分享经验的同学是小马哥梦马强化班的学员&#xff0c;一战高分上岸武汉大学&#xff01; 经验分享 很高兴有机会在这里给大家分享我的考研历程。 首先介绍一下我自己&#xff0c;我本科就读于吉林大学空间信息与数字技术&#xff0c;成绩不是很好。六级是在考研期间12月…

C语言逻辑语句

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.何为控制语句2.控制语句-分支语句2.1.if2.2.switch3.控制语句-循环语句3.1.while3.2.do...while3.3.for4.控制语句-转向…

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析&#xff1a; 游戏中角色不会只有一种武器&#xff0c;不同武器需要不同模型&#xff0c;甚至可能需要角色持握武器的不同位置&#xff0c;因此需要添加专门的武器类&#xff0c;方便武器后续更新&#xff0c;建立一个武器类。 2.操作实现&#xff1a; 1.在ue5中新建…

如何用DeepDiff测接口数据源变更?

开发同学最近变更了部分业务查询接口底层的数据源&#xff0c;希望测试同学能够针对这些接口进行一些回归验证&#xff0c;校验底层数据源更新前后业务查询接口返回的一致性&#xff0c;保证更新后对正常业务没有影响。 这个回归测试和一般接口测试有所区别&#xff0c;不仅仅…

C++基础-编程练习题2

文章目录 前言一、查找“支撑数”二、数组元素的查找三、爬楼梯四、数字交换五、找高于平均分的人 前言 C基础-编程练习题和答案 一、查找“支撑数” 【试题描述】 在已知一组整数中&#xff0c; 有这样一种数非常怪&#xff0c; 它们不在第一个&#xff0c; 也不在最后一个&…

使用Simulink Test进行单元测试

本文摘要&#xff1a;主要介绍如何利用Simulink Test工具箱&#xff0c;对模型进行单元测试。内容包括&#xff0c;如何创建Test Harness模型&#xff0c;如何自动生成excel格式的测试用例模板来创建测试用例&#xff0c;如何手动填写excel格式的测试用例模板来手动创建测试用例…

精通 Docker:简化开发、部署与安全保障

踏上 Docker 之旅&#xff0c;每一条命令都是高效与可靠的新境界。Docker 彻底改变了软件开发&#xff0c;为构建、部署和保障应用程序提供了前所未有的便利。从打造精益敏捷的镜像到编排复杂的微服务架构&#xff0c;Docker 让开发人员和运维人员都倍感轻松。让我们深入探索 D…