mybatis 和 mybatis-plus

mybatis

配置

1.新建MAVEN项目

2.配置mybatis依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>DemoMybatis</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--        连接数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!--        mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.12</version></dependency></dependencies><build><!--    配置idea扫描xml或者properties文件 --><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource></resources></build></project>

3.创建表

REATE TABLE IF NOT EXISTS users \id INT AUTO_INCREMENT PRIMARY KEY, \name VARCHAR(100), \email VARCHAR(150));

4.创建数据源database.properties文件

resources 目录下 创建 database.properties文件:用于mybatis配置文件读取数据库信息

driver=com.mysql.cj.jdbc.Driver
url= jdbc:mysql://127.0.0.1:3306/mydatabase?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username=root
password=123456

5.编写mybatis-config.xml配置文件

resources 目录下 创建 mybatis-config.xml配置文件: 用于配置数据库连接和 MyBatis 运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性、映射文件的位置。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><!-- mybatis的主配置文件 -->
<configuration><!-- 引入外部资源: database.properties 配置文件--><properties resource="database.properties"/><!-- 配置环境:有助于将 SQL 映射应用于多种数据库之中 --><environments default="mysql"><!-- 配置环境id:mysql--><environment id="mysql"><!-- 配置事务的类型:使用JDBC的事务--><transactionManager type="JDBC"/><!-- 配置数据源(连接池)type="POOLED说明是使用连接池方式,节省资源 --><dataSource type="POOLED"><!-- 配置连接数据库的4个基本信息 --><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments></configuration>

6.连接测试

package org.example;
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 java.io.IOException;
import java.io.Reader;public class Main {public static void main(String[] args) {// mybatis-config.xml 路径String mybatisConfig = "mybatis-config.xml";try {// 加载配置文件Reader config = Resources.getResourceAsReader(mybatisConfig);// 构建会话SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(config);SqlSession sqlSession = sqlSessionFactory.openSession();System.out.println(sqlSession.getConfiguration());sqlSession.close();}catch (IOException e){e.printStackTrace();}}
}

使用

1.映射类

创建entity/User类:用于跟数据库字段做映射。

注意:与数据库中字段名、类型一致

package org.example.user;import lombok.Data;@Data
public class UserEntity {private int id;private String name;private String email;
}

2.Mapper接口

创建mapper/IUserMapper接口: 用于操作数据库CURD的方法

package org.example.mapper;import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.example.entity.User;import java.util.List;
import java.util.Map;public interface IUserMapper {List<User> queryUser();//    @Select("SELECT * FROM users")
//    List<User> queryUser();String getNameById(@Param("id") Long id);List<User> queryUserByMap(Map<String, Object> param);List<User> queryUserEntity(User user);int insertUser(@Param("user") User user);int updateUser(@Param("user") User user);int deleteUser(@Param("id") Long id);}

3.mapper.xml文件

resources 目录下 org/example/mapper创建IUserMapper.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">
<!--namespace=绑定一个对应的Mapper接口-->
<mapper namespace="org.example.mapper.IUserMapper"><!--查询所有用户--><!--<select> 标签表明这是一条查询语句,属性id用来标识这条SQL;resultType表示返回的是一个userEntity类型的值。 --><select id="queryUser" resultType="org.example.entity.User">select * from users;</select><select id="getNameById" resultType="string">select name from users where id = #{id};</select><select id="queryUserByMap" parameterType="map" resultType="org.example.entity.User">select * from users where id = #{id};</select><select id="queryUserEntity" parameterMap="org.example.entity.User" resultType="org.example.entity.User">select * from users where id = #{id};</select><insert id="insertUser" keyProperty="id" useGeneratedKeys="true">insert into users (name, email)values (#{user.name}, #{user.email})</insert><update id="updateUser">update users set email=#{user.email} where id = #{user.id}</update><delete id="deleteUser">delete from users where id = #{id}</delete></mapper>

注意:

mapper接口和mapper.xml之间需要遵循一定规则,才能成功的让mybatis将mapper接口和mapper.xml绑定起来

  • mapper接口和mapper.xml的命名要一样;
  • mapper接口的全限定名,要和mapper.xml的namespace属性一致;
  • mapper接口中的方法名,要和mapper.xml中的SQL标签的id一致;
  • mapper接口中的方法入参类型,要和mapper.xml中SQL语句的入参类型一致;
  • mapper接口中的方法出参类型,要和mapper.xml中SQL语句的返回值类型一致。 

Java框架:Mybatis【详细】_java mybatis-CSDN博客

mybatis-plus

MyBatis Plus 和 MyBatis 的区别
MyBatis Plus 与原始的 MyBatis 框架有以下主要区别:

功能增强:MyBatis Plus 在 MyBatis 的基础上提供了更多的功能,如通用的 CRUD 操作、分页查询、条件构造器等。这些功能减少了开发人员的工作量,提高了开发效率。

注解支持:MyBatis Plus 引入了一系列注解,如@TableName、@TableId、@TableField等,使得实体类的映射更加灵活和方便,不再需要 XML 映射文件。

更强大的条件构造器:MyBatis Plus 的条件构造器允许我们以更加直观和链式的方式构建 SQL 查询条件,而不必担心拼接 SQL 字符串。

自动代码生成:MyBatis Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类和 Mapper 接口,极大地简化了开发过程。

总的来说,MyBatis Plus 是 MyBatis 的增强版,旨在提供更多便捷的特性,减少开发工作,同时保留了 MyBatis 的灵活性和强大性能。

1. 实体类注解
@TableName:用于指定数据库表的名称。
@TableId:用于指定主键字段。
@TableField:用于指定非主键字段的属性配置。
2. 逻辑删除注解
@TableLogic:用于实现逻辑删除。
3. 字段填充注解
@TableField:其中的 fill 属性可以用于指定字段的自动填充策略,如插入和更新时自动填充时间戳等。

SpringBoot中使用mybatis-plus

 1.新建SpringBoot项目

2.配置mybatis-plus依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>MySpringBoot</artifactId><version>0.0.1-SNAPSHOT</version><name>MySpringBoot</name><description>MySpringBoot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3.创建表

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`email` varchar(150) DEFAULT NULL,`status` int(10) DEFAULT '1',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4.配置数据库

application.properties文件中配置数据库连接信息:

spring.application.name=MySpringBoot
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#debug=true

5.配置 MapperScan 注解

MySpringBootApplication.java

package org.example.myspringboot;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("org.example.myspringboot.**.mapper")  // 配置 MapperScan 注解
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}}

6.映射类

Users.java

package org.example.myspringboot.accounts.domain;
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.Data;import java.time.LocalDateTime;@Data
@TableName("users")
public class Users {@TableId(value = "id", type = IdType.AUTO)private Long id;@TableField("name")private String name;@TableField("email")private String email;@TableField("status")private Long status;@TableField("create_time")private LocalDateTime create_time;@TableField("update_time")private LocalDateTime update_time;//    @TableField("isMarried")
//    private Boolean isMarried;
}

7.Mapper映射

UsersMapper.java

package org.example.myspringboot.accounts.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.myspringboot.accounts.domain.Users;@Mapper
public interface UsersMapper extends BaseMapper<Users> {
}

8.CURD

UserContorller.java

package org.example.myspringboot.accounts.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.myspringboot.accounts.domain.Users;
import org.example.myspringboot.accounts.mapper.UsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.List;@RequestMapping("/users")
@RestController
public class UserContorller {@Autowiredprivate UsersMapper usersMapper;@RequestMappingpublic ResponseEntity<List<Users>> list(){// 查询所有// List<Users>  usersList = usersMapper.selectList(null);// 分页查询Page<Users> page = new Page<>(1, 10);IPage<Users> usersPage = usersMapper.selectPage(page, null);List<Users> usersList = usersPage.getRecords();return ResponseEntity.ok().body(usersList);}@RequestMapping("/add")public ResponseEntity<Users> add(){Users users = new Users();users.setName("admin");users.setEmail("admin@example.com");users.setStatus(1L);int row = usersMapper.insert(users);System.out.println(row);return ResponseEntity.ok().body(users);}@RequestMapping("/get")public ResponseEntity<List<Users>> getUser(){//Users users = usersMapper.selectById(1L);HashMap<String, Object> map = new HashMap<>();// 查找 name=admin and status=0map.put("name", "admin");  // 查找name=adminmap.put("status", "0");  // 查找status=0List<Users> userList = usersMapper.selectByMap(map);return ResponseEntity.ok().body(userList);}@RequestMapping("/update")public ResponseEntity<String> update(){Users users = new Users();users.setId(1L);// 修改用户邮箱和statususers.setEmail("admin@xxxxx.com");  // 修改id=1的用户邮箱users.setStatus(0L);  // 修改id=1的 statusint row = usersMapper.updateById(users);System.out.println(row);return ResponseEntity.ok("OK");}public ResponseEntity<String> delete(){int row = usersMapper.deleteById(1L);return ResponseEntity.ok("OK");}
}

【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置_mybatisplus-CSDN博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式面试学习笔记(入门1)

目录 指针的大小问题 sizeof和strlen C语言分配内存的方式 数组&#xff08;的&#xff09;指针和指针&#xff08;的&#xff09;数组 union 指针的大小问题 指针对于不少新手而言是一道难关&#xff0c;但是不必恐惧于指针。他的本质其实就是一个地址。请冷静下来仔细思…

人工智能开发实战辅助诊断应用解析

内容导读 项目分析预备知识项目实战 一、项目分析 1、提出问题 随着人们生活水平的提升和健康意识的增强&#xff0c;民众定期进行身体健康体检已成为常态&#xff0c;这种早期的疾病检测和筛查可以及早发现身体里已经出现的异常体征信息&#xff0c;做出正确诊断和有效处理…

信息安全数学基础(15)欧拉定理

前言 欧拉定理是数论中的一个重要定理&#xff0c;它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用&#xff0c;特别是在公钥密码体制&#xff08;如RSA加密算法&#xff09;中。 一、表述 设 n 是一个正整数&#xff0c;a 是一个与 n 互…

万字长文——ConvNeXt(2022CVPR),卷积网络的顶峰之作,在Transformer盛行的当下,卷积网络还能再战!

ConvNext:A ConvNet for the 2020s ConvNext:2020 年代的卷积神经网络 论文地址: https://arxiv.org/pdf/2201.03545 自从Transformer成功应用在视觉领域并且取得显著成绩后,很多人开始抛弃卷积网络架构,转而使用Transformer。然而有的大佬不认为卷积过时了,于是有了这篇…

Sigmoid引发的梯度消失爆炸及ReLU引起的神经元参数失效问题思考

Sigmoid和ReLU激活函数思考&#xff09; 引文Sigmoid函数梯度消失问题梯度爆炸问题解决方案 ReLU函数简化模型示例场景设定前向传播对反向传播的影响总结 内容精简版 引文 梯度消失和梯度爆炸是神经网络训练中常见的两个问题&#xff0c;特别是在使用Sigmoid激活函数时。这些问…

图形化编程012(变量-倒计时)

案例展示 点击绿旗&#xff0c;使用空格键控制鳐鱼&#xff0c;按下空格向上游&#xff0c;松开下落。 在舞台右侧会出现障碍物从右向左移动&#xff0c;移动到左侧边缘发出声音并隐藏。 鳐鱼碰到障碍停止全部脚本&#xff0c;坚持60秒程序结束。 一、逻辑思维 通过读题将大…

鸿蒙媒体开发系列09——OpenSL ES音频录制

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、概述 OpenSL ES全称为Open Sound Library for Embedded Systems&#xff0c;是一…

【我的 PWN 学习手札】tcache extend

目录 前言 一、利用手法 二、流程演示 &#xff08;1&#xff09;三块物理相邻的堆块 &#xff08;2&#xff09;溢出修改 size &#xff08;3&#xff09;释放该 chunk &#xff08;4&#xff09;重新申请该 chunk &#xff08;5&#xff09;释放第三块 chunk&#x…

vcs/verdi常用命令(持续更新)

1. 操作rtl 1.1 加载rtl命令 verdi -dbdir simv.daidir的目录 1.2 显示某时刻rtl的值 首先鼠标左键在波形上选中某个特定时刻&#xff0c;然后鼠标选中rtl代码文件&#xff0c;按x就会显示&#xff0c;再按x就会退出显示。 1.3 查找字符串 按/ 1.4 vcs将rtl的信号加载到…

DNS是什么?怎么设置

NS是什么意思?有什么用呢?专业的说DNS就是域名系统 (Domain Name System)的简称&#xff0c;也就是IT人士常说的域名解析系统。主要是让用户在互联网上通过域名找到域名对应的IP地址&#xff0c;因为IP地址都是一串数字(例如&#xff1a;192.168.0.1)不方便记忆&#xff0c;便…

与 CESS Network 共探去中心化创新:重塑数据基础设施,驱动未来变革

随着互联网的快速发展和数据量的爆炸式增长&#xff0c;如何有效管理、存储和保护数据成为了一个日益重要的课题。传统的中心化平台&#xff0c;如 YouTube&#xff0c;虽然为用户提供了便捷的服务&#xff0c;但数据的所有权和控制权往往掌握在平台手中&#xff0c;用户的内容…

口腔检测系统源码分享

口腔检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Memory Controller Unit (MCU)内存控制器介绍

文章目录 Memory Controller Unit (MCU)内存控制器介绍1. MCU基本概念和功能地址映射读写操作缓存控制内存刷新1.1 地址映射1.2 读写操作1.3 缓存控制1.4 内存刷新 2. MCU的工作原理接收CPU的请求地址转换执行操作管理缓存 3. MCU的类型SDRAM控制器DDR控制器Flash控制器 4. MCU…

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

与姜妍同款冰箱,容声516WILL养鲜冰箱领“鲜”上市

9月20日&#xff0c;容声冰箱在“养鲜新净界”——2024年容声新品上市发布会上推出了WILL系列的最新力作——516WILL养鲜冰箱。 据「TMT星球」了解&#xff0c;此次新品搭载了升级版的WILL自然养鲜技术&#xff0c;并以60CM整机平嵌一体&#xff0c;完美融入现代家居美学&…

Mapper代理开发

目的 解决原生方式中的硬编码简化后期执行SQL 步骤 1&#xff0c; 整体目录结构 2&#xff0c; UserMapper.xml 设置SQL映射文件的namespace属性为Mapper接口全限定名 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC &quo…

P9235 [蓝桥杯 2023 省 A] 网络稳定性

*原题链接* 最小瓶颈生成树题&#xff0c;和货车运输完全一样。 先简化题意&#xff0c; 次询问&#xff0c;每次给出 &#xff0c;问 到 的所有路径集合中&#xff0c;最小边权的最大值。 对于这种题可以用kruskal生成树来做&#xff0c;也可以用倍增来写&#xff0c;但不…

程序员工作中经常使用的C/C++开源库

Bundle 项目地址&#xff1a;GitHub - r-lyeh-archived/bundle: :package: Bundle, an embeddable compression library: DEFLATE, LZMA, LZIP, BZIP2, ZPAQ, LZ4, ZSTD, BROTLI, BSC, CSC, BCM, MCM, ZMOLLY, ZLING, TANGELO, SHRINKER, CRUSH, LZJB and SHOCO streams in a …

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧&#xff0c;原因&#xff1a;在实际中&#xff0c;因为某种不可控的因素&#xff0c;测出来的样本点肯定是有误差的。如果样本数据点都在模型上&#xff0c;则说明在建立模型时&#xff0c;把误差也考虑进去了&#xff0c;这就是我们说…