Spring boot 实战指南(二):Mybatis、动态绑定、多数据源、分页插件、Mybatis-Plus

Spring Boot 实战指南(二):Mybatis、动态绑定、多数据源、分页插件、Mybatis-Plus Spring boot 实战指南(二):Mybatis、动态绑定、多数据源、分页插件、Mybatis-Plus 阅读详情

文章目录

  • 二、整合 Mybatis 多数据源
  • 三、整合分页插件 PageHelper
    • 1.搭建数据库、项目配置
    • 3.在代码中使用PageHelper

Mybatis在整个体系中的作用是负责连接并访问数据库层。搞过开发的同学都知道,没有数据库的项目一无是处,所以Mybatis的学习是很有必要的。

准备工作:

  • 数据库:在进入正式学习前,先确保Mysql已经在电脑上安装好了,最好再安装一个可视化管理工具Navicat Premium for mysql。当然,你还要会mysql的语法和基本操作等。
  • spring boot项目创建以及一些前置知识:可以看我上一篇博客

一、整合Mybatis

整合Mybatis可以基于注解,也可以基于xml文件, 二者的区别:

1.搭建数据库环境

新建一个数据库boot_demo,然后执行以下sql语句:

-- 创建表
USE `boot_demo`;
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user`  (
  `user_id` int(11) NOT NULL ,
  `user_name` varchar(20)  DEFAULT NULL,
  `user_age` int(11)  DEFAULT NULL,
   PRIMARY KEY (`user_id`)
) ENGINE = InnoDB;

-- 插入数据
REPLACE INTO `tb_user` (`user_id`, `user_name`, `user_age`) VALUES ('100', 'test01', '100');

2.基于注解整合Mybatis

(1)创建项目

项目信息填写如下:

选择初始依赖:

完善目录结构:

在main/java/com/tracy/mybatisdemo下依次新建 entity 、dao 和 controller 文件夹。一般来说,应该再创建一个service包,前端调用controller接口,controller调用service,service再调用dao,但这章为了简化操作省去了service部分,到后面项目实战的时候我会创建更完善的目录结构。

(2)具体代码实现

  • 实体类User:

在entity包下创建User类,代码如下:

package com.tracy.mybatisdemo.entity;

import lombok.Data;

//此注解来源于Lombok插件,运行时会自动为类添加 Getter、Setter 、有参构造、toString 、equals 和 hashCode 方法
@Data
public class User {
 
    private Integer userId;
    private String userName;
    private Integer userAge;
}
  • 持久层UserDao接口:

在dao包下创建UserDao接口:

package com.tracy.mybatisdemo.dao;

import com.tracy.mybatisdemo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDao {
 
    @Select("select user_id,user_name,user_age from tb_user")
    List<User> findAll();

    @Select("select user_id,user_name,user_age from tb_user where user_id = #{userId}")
    User findById(Integer userId);

    @Insert("insert into tb_user (user_id,user_name,user_age) values (#{userId},#{userName},#{userAge})")
    Integer insert(User user);

    @Update("update tb_user set user_name=#{userName},user_age=#{userAge} where user_id = #{userId}")
    Integer update(User user);

    @Delete("delete from tb_user where user_id=#{userId}")
    Integer delete(Integer userId);
}
  • 配置包扫描:

为了使每个dao接口都被扫描到,可以在每个dao接口上加上@Mapper注解,但当dao接口比较多的时候,推荐直接在启动类上通过注解 @MapperScan("com.tracy.mybatisdemo.dao") 的形式扫描整个dao包:

@SpringBootApplication
@MapperScan("com.tracy.mybatisdemo.dao")
public class MybatisDemoApplication {
 

    public static void main(String[] args) {
 
        SpringApplication.run(MybatisDemoApplication.class, args);
    }

}
  • 控制层UserController类:

在controller包下创建UserController类:

package com.tracy.mybatisdemo.controller;

import com.tracy.mybatisdemo.dao.UserDao;
import com.tracy.mybatisdemo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
 
    @Autowired
    private UserDao userDao;

    @GetMapping("/findAll")
    public List<User> findAll(){
 
        return userDao.findAll();
    }

    @GetMapping("/findById")
    public User findById(Integer userId){
 
        return userDao.findById(userId);
    }

    @PostMapping("/insert")
    public String insert(User user){
 
        userDao.insert(user);
        return "插入成功后的数据为" + userDao.findById(user.getUserId());
    }

    @PutMapping("/update")
    public String update(User user){
 
        userDao.update(user);
        return "更新成功后的数据为" + userDao.findById(user.getUserId());
    }

    @DeleteMapping("/delete")
    public String delete(Integer userId){
 
        userDao.delete(userId);
        return "删除成功的id" + userId;
    }
}
  • 添加数据库配置:

在application.yml中添加以下配置:

# 数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/boot_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    username: root
    password: 你的密码

# Mybatis配置
# 开启驼峰式命名规则自动转换
mybatis:
  configuration:
    map-underscore-to-camel-case: true

(3)测试

测试工具我使用的是postman,怎么安装和使用可以网上百度一下。

  • 测试 localhost:8080/user/findAll GET

  • 测试 localhost:8080/user/findById GET

  • 测试 localhost:8080/user/insert POST

  • 测试 localhost:8080/user/update PUT

  • 测试 localhost:8080/user/delete DELETE

成功!

3.基于xml整合Mybatis

基于注解的Mybatis使用只能应付一些比较简单的数据库查询语句,虽然省事,但在一定程度上也丧失了灵活性,因此,有必要学习一下基于xml整合Mybatis。

  • 首先,请先删除UserDao接口中每个方法上的注解语句:
package com.tracy.mybatisdemo.dao;

import com.tracy.mybatisdemo.entity.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDao {
 
    List<User> findAll();
    
    User findById(Integer userId);

    Integer insert(User user);

    Integer update(User user);

    Integer delete(Integer userId);
}

 

  • 添加xml映射文件:

在resources目录下创建目录mapper,仔仔mapper目录下创建UserMapper.xml文件:

注意 mapper namespace=“com.tracy.mybatisdemo.dao.UserDao” 一定要与dao包下的接口对应起来。

<?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.tracy.mybatisdemo.dao.UserDao">
    <!--查询所有用户-->
    <select id="findAll" resultType="user">
        select * from tb_user
    </select>
    <!--根据id查询单个用户-->
    <select id="findById" parameterType="int" resultType="user">
        select * from tb_user where user_id = #{
 userId}
    </select>
    <!--插入用户-->
    <insert id="insert" parameterType="user">
        insert into tb_user (user_id,user_name,user_age) values (#{
 userId},#{
 userName},#{
 userAge})
    </insert>
    <!--更新用户信息-->
    <update id="update" parameterType="map">
        update tb_user set user_name = #{
 userName}, user_age = #{
 userAge}
        where user_id = #{
 userId}
    </update>
    <!--删除用户-->
    <delete id="delete" parameterType="int">
        delete from tb_user where user_id = #{
 userId}
    </delete>
</
从实战项目看中高级Java测试开发核心能力与工程化实践 测试开发是软件工程中保障质量与提升效能的关键环节,其核心在于将开发能力与测试思维深度融合。从原理上看,它通过构建自动化测试框架、测试平台及CI/CD流水线,实现测试活动的工程化与智能化。其技术价值在于提升测试效率、保障交付质量并推动研发流程的持续改进。在应用场景上,广泛应用于微服务测试、持续集成、测试数据管理及质量门禁等。本文以一套高质量的Java测试开发实战代码为样本,深入剖析了其如何通过设计模式、多线程编程、自定义注解、测试执行引擎等【热词】技术,系统性地构建了覆盖自动化测试、测试平台开发与DevOps 阅读详情

相关推荐

Jeecg AI低代码平台开源版解析与实战

低代码开发平台通过可视化编程和模块化组件,显著提升企业应用开发效率。其核心技术原理在于抽象化业务逻辑,将常见功能封装为可复用组件,配合自动化代码生成引擎实现快速交付。在AI技术迅猛发展的背景下,现代低代码平台开始深度集成机器学习能力,形成智能辅助开发的新范式。Jeecg作为国内领先的开源低代码平台,其最新v1.0.0版本创新性地融合了AI知识库构建和智能体开发能力,支持开发者通过拖拽方式配置包含AI决策节点的业务流程。该平台采用Spring Cloud微服务架构,前端基于Vue3+Ant Design Vu

weixin_34277853的博客 372

MyBatis多数据源配置及动态切换——搭建多个数据源并动态切换

随着互联网的发展、移动互联网的兴起和需求的增加,网站应用的规模也越来越庞大。由于业务不同,每个站点会存在不同的数据库,所以在同一个系统中,需要配置多个数据库连接。而 MyBatis 是目前主流的开源持久层框架之一,它的多数据源支持就显得尤为重要。本文将详细介绍 MyBatis 的多数据源配置及动态切换,并结合实际案例实现三个数据库的动态切换。MyBatis 是一款优秀的持久层框架,它可以很方便地通过简单的 XML 或注解的方式来完成对数据库的操作。

AI天才研究院 3397

基于Spring Boot与Vue.js的多角色在线学习系统全栈开发实战

在线学习平台是当前教育信息化和混合式教学改革的核心技术支撑,其本质是一个典型的多角色、多模块的Web应用系统。从技术原理上看,这类系统通常采用前后端分离架构,后端通过RESTful API提供数据服务,前端负责用户交互,以实现高效协同开发。其技术价值在于通过清晰的权限模型(如RBAC)和模块化设计,解决了传统教学管理中信息孤岛和流程繁琐的痛点,提升了教、学、管各环节的效率。在应用场景上,它广泛服务于高校教学、职业培训等领域,需要处理课程管理、作业考试、实时互动等复杂业务。本文聚焦于如何运用Spring Bo

weixin_42476987的博客 249

外卖CPS小程序源码落地避坑指南:从技术选型到金融级佣金实现

外卖CPS(Cost Per Sale)是一种基于成交付费的推广模式,其核心在于用户行为、订单闭环与分润逻辑的强耦合。理解CPS模型需先厘清微信生态规则、平台API差异及《禁止传销条例》合规边界;技术实现上依赖高并发事务一致性、Redis原子操作与闭包表关系建模;价值体现在可配置分润策略引擎——支持按品类/阶梯/冻结期动态计算佣金,并确保金融级精度(BigDecimal四舍五入到分)。典型应用场景包括本地生活推广、商户联盟裂变与SaaS化分销中台搭建。本文聚焦真实部署中的支付验签、三级关系激活、设备指纹防刷

weixin_33816821的博客 411

SpringBoot+Vue+MySQL车辆违章管理系统全栈开发实战

在现代Web应用开发中,前后端分离架构已成为主流范式,其核心在于通过RESTful API实现前后端解耦与高效协作。SpringBoot凭借其约定大于配置的理念和丰富的Starter生态,能够快速构建稳健的后端服务,而Vue.js以其渐进式框架特性和响应式数据绑定,极大地简化了前端复杂交互界面的开发。这种技术组合在实现业务闭环、提升开发效率方面展现出巨大价值,尤其适用于需要快速迭代、数据驱动型的管理系统。车辆违章管理系统正是这一技术栈的典型应用场景,它涉及车辆、车主、违章记录等核心实体的增删改查、状态流转与

weixin_34640289的博客 314

信贷风控分析—征信数据源

详解企业和个人征信报告,以及信贷风控之指标构造案例参考

csdnbt的博客 3644

无监督低照度增强实战:用ZeroDCE和SCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCE和SCI两大代表性模型的核心原理与实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 490

Autodesk全家桶安装总报错1603?一个服务设置搞定3dsMax和CAD安装回滚问题

本文详细解析了Autodesk全家桶安装过程中常见的1603错误,特别是3ds Max和CAD安装回滚问题。通过调整AdskLicensingService服务的账户权限,提供四步修复法和安装流程优化策略,帮助用户彻底解决安装难题,提升Autodesk软件的安装成功率。

weixin_30955617的博客 1128

19. OTA功能 - 1

耳机采用AB分区的OTA方式,AB分区详见分区表,通过手机蓝牙下发更新文件。

雪飞_海 649

用 Custom Entity 打造 RAP Value Help:从能跑到好用的深度踩坑笔记

本文介绍了在RAP项目中实现Value Help(Fiori输入帮助)的完整流程。通过Custom Entity方式,开发者可以灵活构建不依赖数据库实体的值帮助功能,但需手动实现CDS原本提供的过滤、排序、分页等能力。文章以一个典型场景为例,详细说明了如何为Partner维护界面的City字段创建可搜索的值帮助,包括创建查询实现类、绑定CDS Custom Entity、服务发布等关键步骤,并特别指出了处理排序分页请求等常见问题。最后强调在ABAP Cloud环境下需要自行实现查询能力,而非依赖传统工具类。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 142

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6642

AI自瞄原理剖析(四)从Yolo推理坐标到屏幕坐标:基于FOV视角与焦距的坐标变换与精准瞄准

从Yolo推理框架得到的坐标到屏幕坐标的转换是一个涉及到FOV视角、焦距以及分辨率的复杂过程。通过数学公式,我们可以将推理框坐标反推为游戏内的实际坐标,并最终映射到屏幕坐标系中。利用这些信息,AI自瞄系统能够精确计算出准星从当前位置移动到敌人位置的距离,实现精准的自动瞄准。通过这种方法,AI自瞄系统能够在不同的游戏环境下灵活应对,提供高度精确的操作体验。在AI自瞄系统中,目标检测仅仅是第一步,获取到预测框的坐标后,我们还需要将这些坐标转换为实际屏幕上的精确位置。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1334

题解:AcWing 6051 看病

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。后面没有输入,但需要你输出。

团爸讲算法 589

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: SpringSecurity+JWT认证流程解析
下一篇: MySQL约束和事务知识归纳。
java_lujj
博客等级 码龄4年 18粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值