当前位置: 首页 > article >正文

Springboo 和ORM整合

Springboot-Mybatis集成

MyBatis 是一个持久层框架,它简化了 Java 应用程序与数据库之间的交互。通过 MyBatis,开发者可以专注于 SQL 语句的编写,而不需要处理繁琐的 JDBC 代码。以下是关于 MyBatis 的一些关键概念和使用技巧:

核心组件

  • SQL 映射文件 (Mapper XML):这是 MyBatis 中定义 SQL 语句的地方,可以包含查询、插入、更新和删除等操作。
  • 接口(Mapper Interface):映射到 SQL 映射文件的方法,通常每个方法对应一条 SQL 语句。
  • SqlSessionFactory:负责创建 SqlSession 对象,它是 MyBatis 的核心类,用于执行命令。
  • SqlSession:提供了与数据库交互的方法,比如 selectOneselectListinsertupdate 和 delete

Springboot配置文件

MyBatis 的配置可以通过 XML 文件或者 Java 配置类完成。主要配置包括数据源、事务管理器、类型别名、插件和其他设置。

<dependencies>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.3</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter-test</artifactId>
        <version>3.0.3</version>
        <scope>test</scope>
    </dependency>
</dependencies>

application.yml配置

server:
  port: 8000
spring:
  application:
    name: springboot-mybatis-demo
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
mybatis:
  mapper-locations: classpath:/mapper/*.xml
logging:
  level:
    com.coderlk.demo.mapper: debug

示例

Employee 实体类

package com.coderlk.interceptor.demo.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hiredate;
    private Float sal;
    private Float comm;
    private Integer deptno;
}

EmployeeMapper

package com.coderlk.interceptor.demo.mapper;

import com.coderlk.interceptor.demo.entity.Employee;

import java.util.List;

public interface EmployeeMapper {
    List<Employee> selectAll();
}

EmployeeMapper.xml

/resources/mapper/EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.coderlk.interceptor.demo.mapper.EmployeeMapper">
    <select id="selectAll" resultType="com.coderlk.interceptor.demo.entity.Employee">
        select * from emp
    </select>
</mapper>

测试

package com.coderlk.interceptor.demo.mapper;

import com.coderlk.interceptor.demo.InterceptorDemoApplication;
import com.coderlk.interceptor.demo.entity.Employee;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest(classes = InterceptorDemoApplication.class)
@Slf4j
class EmployeeMapperTest {
    @Resource
    private EmployeeMapper employeeMapper;
    @Test
    void selectAll() {
        List<Employee> employees = employeeMapper.selectAll();
        log.info("{}",employees);
    }
}

执行结果

2024-12-20T10:54:23.482+08:00  INFO 88800 --- [interceptor-demo] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-12-20T10:54:23.567+08:00  INFO 88800 --- [interceptor-demo] [           main] c.c.i.demo.mapper.EmployeeMapperTest     : [Employee(empno=7369, ename=SMITH, job=CLERK, mgr=7902, hiredate=Wed Dec 17 00:00:00 CST 1980, sal=800.0, comm=null, deptno=20), Employee(empno=7499, ename=ALLEN, job=SALESMAN, mgr=7698, hiredate=Fri Feb 20 00:00:00 CST 1981, sal=1600.0, comm=300.0, deptno=30), Employee(empno=7521, ename=WARD, job=SALESMAN, mgr=7698, hiredate=Sun Feb 22 00:00:00 CST 1981, sal=1250.0, comm=500.0, deptno=30), Employee(empno=7566, ename=JONES, job=MANAGER, mgr=7839, hiredate=Thu Apr 02 00:00:00 CST 1981, sal=2975.0, comm=null, deptno=20), Employee(empno=7654, ename=MARTIN, job=SALESMAN, mgr=7698, hiredate=Mon Sep 28 00:00:00 CST 1981, sal=1250.0, comm=1400.0, deptno=30), Employee(empno=7698, ename=BLAKE, job=MANAGER, mgr=7839, hiredate=Fri May 01 00:00:00 CST 1981, sal=2850.0, comm=null, deptno=30), Employee(empno=7782, ename=CLARK, job=MANAGER, mgr=7839, hiredate=Tue Jun 09 00:00:00 CST 1981, sal=2450.0, comm=null, deptno=10), Employee(empno=7788, ename=SCOTT, job=ANALYST, mgr=7566, hiredate=Mon Jul 13 00:00:00 CDT 1987, sal=3000.0, comm=null, deptno=20), Employee(empno=7839, ename=KING, job=PRESIDENT, mgr=null, hiredate=Tue Nov 17 00:00:00 CST 1981, sal=5000.0, comm=null, deptno=10), Employee(empno=7844, ename=TURNER, job=SALESMAN, mgr=7698, hiredate=Tue Sep 08 00:00:00 CST 1981, sal=1500.0, comm=null, deptno=30), Employee(empno=7876, ename=ADAMS, job=CLERK, mgr=7788, hiredate=Mon Jul 13 00:00:00 CDT 1987, sal=1100.0, comm=null, deptno=20), Employee(empno=7900, ename=JAMES, job=CLERK, mgr=7698, hiredate=Thu Dec 03 00:00:00 CST 1981, sal=950.0, comm=null, deptno=30), Employee(empno=7902, ename=FORD, job=ANALYST, mgr=7566, hiredate=Thu Dec 03 00:00:00 CST 1981, sal=3000.0, comm=null, deptno=20), Employee(empno=7934, ename=MILLER, job=CLERK, mgr=7782, hiredate=Sat Jan 23 00:00:00 CST 1982, sal=1300.0, comm=null, deptno=10)]

Springboot-MybatisPlus集成

MyBatis-Plus (简称 MP) 是 MyBatis 的增强工具,旨在简化开发人员在使用 MyBatis 时的一些重复性工作。它提供了许多便捷的功能,如代码生成器、分页插件、条件构造器等,使得数据库操作更加高效和简单。以下是关于 MyBatis-Plus 的一些关键特性和使用方法:

核心特性

  1. 无侵入:只做增强不做改变,引入它不会对现有 MyBatis 的代码产生影响。
  2. 性能敏感:内置全局配置可选择是否开启 SQL 性能分析插件,防止全表更新与删除。
  3. 开箱即用:提供默认的 CRUD 操作,无需编写 XML 文件。
  4. 支持 ActiveRecord:允许直接在实体类中调用持久层方法。
  5. 内置分页插件:可以轻松实现分页查询。
  6. 多租户支持:通过简单的配置即可实现多租户功能。
  7. 代码生成器:快速生成 Mapper、Service 等基础代码。
添加依赖

对于 Maven 项目,在 pom.xml 中添加 MyBatis-Plus 的依赖xml

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.2</version>
        </dependency>
使用 MyBatis-Plus提供的接口

继承 BaseMapper<T> 接口以获得基本的 CRUD 方法,或者使用 IService<T>ServiceImpl<M, T> 来获取更高级的服务方法。

java

package com.coderlk.interceptor.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.coderlk.interceptor.demo.entity.Employee;

import java.util.List;

public interface EmployeeMapper  extends BaseMapper<Employee> {

}
 

java

package com.coderlk.interceptor.demo.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.coderlk.interceptor.demo.entity.Employee;
import com.coderlk.interceptor.demo.mapper.EmployeeMapper;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService extends ServiceImpl<EmployeeMapper, Employee> {
    //可添加外部依赖逻辑
}
分页查询

使用 Page<T> 对象来进行分页查询。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;


IPage<Employee> page = new Page<>(currentPage, pageSize);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
IPage<Employee> employeePage = userMapper.selectPage(page, queryWrapper);

其他特性

  • 自动填充:可以通过注解或配置类来设置字段的自动填充规则。
  • 乐观锁:支持基于版本号的乐观锁机制。
  • 逻辑删除:可以配置使某些记录被标记为已删除而不是物理删除。
  • 条件构造器:提供了一套流畅 API 来构建复杂的查询条件。

测试建表使用的mysql表

DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp`  (
                        `empno` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
                        `ename` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
                        `job` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
                        `mgr` int(10) UNSIGNED NULL DEFAULT NULL,
                        `hiredate` date NULL DEFAULT NULL,
                        `sal` decimal(7, 2) NULL DEFAULT NULL,
                        `comm` decimal(7, 2) NULL DEFAULT NULL,
                        `deptno` int(10) UNSIGNED NULL DEFAULT NULL,
                        PRIMARY KEY (`empno`) USING BTREE,
                        INDEX `deptno`(`deptno`) USING BTREE                      
) ENGINE = InnoDB;


http://www.kler.cn/a/445700.html

相关文章:

  • RunCam WiFiLink连接手机图传测试
  • springboot453工资信息管理系统(论文+源码)_kaic
  • html 中 表格和表单的关系与区别
  • C05S07-Tomcat服务架设
  • web3跨链桥协议-Nomad
  • 微信小程序实现画板画布自由绘制、选择画笔粗细及颜色、记录撤回、画板板擦、清空、写字板、导出绘图、canvas,开箱即用
  • 基于master开发了一个feature/new_fun分支,但是开发过程中origin/master发生更新了,此时应该怎么做?
  • 《Java核心技术I》Swing中滚动窗格
  • 疾风大模型气象系统:精准预报,引领未来
  • 我不是挂王-用python实现燕双鹰小游戏2
  • 【YOLO 项目实战】(11)YOLO8 数据集与模型训练
  • JS子页面调用父页面函数,监听刷新事件
  • jdk 离线安装脚本
  • DL作业11 LSTM
  • 2024年全球安全护栏行业总体规模、主要企业国内外市场占有率及排名
  • Android上传到Minio本地存储
  • php学习资料分享
  • U-Boot的编译与烧写
  • vue el-dialog实现可拖拉
  • RabbitMQ全局流量控制
  • 基于字节大模型的论文翻译(含免费源码)
  • CPU性能优化-磁盘空间和解析时间
  • 谷歌浏览器的扩展市场使用指南
  • 共享模型之无锁(乐观锁,CAS,原子类,LongAdder)
  • postman-9.12.2–安装包及汉化
  • 轨迹优化 | 基于Savitzky-Golay滤波的无约束路径平滑(附ROS C++/Python仿真)