【SpringBoot 2】(十)数据库相关

写在前面在这里插入图片描述🛫更多知识总结见SpringBoot 2专栏
🚕本篇知识点总结自尚硅谷雷神的视频
🚒博主对于该知识尚在学习阶段
🚄如果发现存在问题请毫不吝啬的指出
🚀🚀扎哇太枣糕的博客首页🚀🚀

文章目录

  • 1 数据库连接
    • 1.1 配置数据库连接信息
    • 1.2 整合Druid数据源
  • 2 SpringBoot整合MyBatis
    • 2.1 配置文件开发
    • 2.2 纯注解开发
  • 3 SpringBoot整合MyBatis-Plus
    • 3.1 普通的CRUD方法
    • 3.2 MyBatis-plus的分页实现

1 数据库连接

1.1 配置数据库连接信息

  如果想要使用数据库连接池连接数据库进行SQL操作的话,在SpringBoot中需要经过如下三个步骤:
第一步: 导入jdbc开发的启动场景

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

第二步: 导入数据库驱动
  之所以框架底层没有自动导入数据库的驱动,是因为不同的数据库使用的驱动不同,这需要用户根据自己的需要来进行选择。虽然框架没有对指定数据库驱动进行自动导入,但是对不同数据库驱动的版本都进行了版本仲裁,也就是说我们可以直接导入无需定义版本号。当然也可以自定义版本号,maven会根据自身的就近依赖原则导入自定义的版本

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version>
</dependency>

第三步: 配置数据库连接的配置文件

# 设置数据库
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: rootpassword: "123456"

1.2 整合Druid数据源

  SpringBoot框架中默认使用的是Hikari数据源,这也就意味着如果要是想要修改数据源的话,无非就是两种方法:自定义配置类、引入相应的启动器依赖再配置配置文件

第一步: 引入Druid的启动器依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version>
</dependency>

第二步: 配置配置文件(选学,框架一般都有默认的配置)

spring:datasource:url: jdbc:mysql://localhost:3306/db_accountusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverdruid:aop-patterns: com.atguigu.admin.*  #监控SpringBeanfilters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)stat-view-servlet:   # 配置监控页功能enabled: truelogin-username: adminlogin-password: adminresetEnable: falseweb-stat-filter:  # 监控webenabled: trueurlPattern: /*exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'filter:stat:    # 对上面filters里面的stat的详细配置slow-sql-millis: 1000logSlowSql: trueenabled: truewall:enabled: trueconfig:drop-table-allow: false

2 SpringBoot整合MyBatis

  mybatis开发的时候有两种开发模式:使用配置文件进行开发、纯注解开发,二者各有优点。使用配置文件进行开发在处理更加复杂的SQL语句的时候逻辑更加清晰,纯注解开发比较适合简单的SQL语句,于是我们可以在开发的时候混合使用两种方法,这样可以大大提升开发效率。

2.1 配置文件开发

第一步: 引入启动器依赖
  小知识:SpringBoot官方的所有技术启动器的命名都是spring-boot-starter-xxx而第三方技术的启动器命名则是xxx-spring-boot-starter。值得注意的是:MyBatis的启动器内部引用了dbc开发的启动场景,所以无需重复引用

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version>
</dependency>

第二步: 编写mapper接口并标注@Mapper注解

@Mapper
public interface StuMapper {Stu queryBySid(int sid);
}

第三步: 编写映射文件并绑定mapper接口

<?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.xiaochen.mapper.StuMapper"><select id="queryBySid" resultType="com.xiaochen.domain.Stu">select * from stu where sid=#{sid}</select></mapper>

第四步: 在配置文件中指定之前MyBatis配置文件的各种信息

# mybatis的所有配置
mybatis:mapper-locations: classpath:com.xiaochen.mapper/*.xml# 所有的全局配置文件的配置项在这下面配置configuration:# 开启驼峰命名数据库中字段值的下划线‘_’加字母会被认为是大写map-underscore-to-camel-case: true

2.2 纯注解开发

第一步: 引入启动器依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version>
</dependency>

第二步: 编写mapper接口并标注@Mapper注解,使用对应的注解进行SQL语句操作

@Mapper
public interface StuMapper {@Select("select * from stu where sid=#{sid}")Stu queryBySid(int sid);
}

3 SpringBoot整合MyBatis-Plus

3.1 普通的CRUD方法

  MyBatis-plus的启动器内部不止引用了dbc开发的启动场景,还导入了MyBatis的启动器,所以这两个都无需再重复引用
第一步: 引入启动器依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version>
</dependency>

mapper层:

  编写mapper接口标注@Mapper注解,并继承BaseMapper类。这是MyBatis-plus的独有方式,这样做的好处是继承之后直接使用父类中已经写好的简单CRUD方法,但是一些复杂的SQL业务还是需要使用映射文件来实现的,进一步提高了代码开发的效率

@Mapper
public interface StuMapper extends BaseMapper<Stu> {}

  MyBatis-plus进行数据库表的增删改查的时候,默认把继承BaseMapper类时传进去的泛型名称当做表名去查找,如果泛型与数据库中的表名不对应的话,可以在实体类使用注解标识,除此之外注解还可以用来标识主键和非表中字段属性

@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("stu")
public class Stu {// 表名该字段是定义的临时变量,并不存在于数据库的表中@TableField(exist = false)private String gender;// 标明表的主键@TableIdprivate int sid;private String sname;private String age;private String course;private int cardid;
}

  编写映射文件并绑定mapper接口(如果有的话)。MyBatis-plus自动配置好了默认的mapper-locations,也就是映射文件的存放位置为classpath:/mapper/**/*.xml,于是我们就按照它的默认规则在静态资源路径下mapper文件夹下。本案例中没有映射文件,于是就不创建

  如果有需要的话,还可以在配置文件中指定MyBatis-plus配置文件的各种信息

service层:
  service接口继承IService类

public interface StuService extends IService<Stu> {}

  service的实现类先是继承ServiceImpl并传两个泛型(mapper接口,实体类),然后实现service接口

@Service
public class StuServiceImpl extends ServiceImpl<StuMapper, Stu> implements StuService {}

controller层: 直接使用service继承类的简单方法

@Controller
public class TableController {@AutowiredStuServiceImpl stuService;/*** 点击Advanced table按钮,进行页面转发,并携带一个表格数据* @param model 用于存储数据* @return 页面转发forward 到 /table/dynamic_table.html*/@GetMapping("/dynamic_table")public String dynamic_table(Model model) {// 从数据库中查出user表进行展示List<Stu> list = stuService.list();model.addAttribute("stus", list);return "/table/dynamic_table";}
}

3.2 MyBatis-plus的分页实现

  MyBatis-plus的分页功能实现需要先自定义一个配置类,向容器中注册一个Interceptor

@Configuration
public class MyBatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setOverflow(true);paginationInnerInterceptor.setMaxLimit(500L);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}

然后就可以像普通的CRUD操作一样,直接使用service继承类的分页的相关方法即可

@GetMapping("/dynamic_table")
public String dynamic_table(@RequestParam(value = "pn", defaultValue = "1")Integer pn,  Model model) {// 分页从数据库中查出stu表的所有数据,当前页、总页数、总条数……Page<Stu> stuPage = new Page<>(pn, 1);Page<Stu> page = stuService.page(stuPage);model.addAttribute("page", page);return "/table/dynamic_table";
}

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

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

相关文章

【SpringBoot 2】(十一)单元测试JUnit 5 指标监控

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

多个containers 共用一个pvc_2020阜新PVC-UH市政管厂家-烟台塑胶

2020阜新PVC-UH市政管厂家烟台金沃泉塑胶有限公司主要产品PVC-U、PVC-M、PVC-UH聚氯乙烯给给水管材、HDPE高密度聚乙烯给水管材、CPVC氯化聚氯乙烯、MPP高压电力电缆护套管、PERT-Ⅱ型热力管道、高分子托辊管、水处理膜壳管。公司为电网、南方电网、电建集团、建筑集团、五矿集…

【SpringBoot 2】(十二) profile功能 自定义starter

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?

一二年级&#xff0c;考试上九十分很轻松。但是&#xff0c;不少小朋友一上三年级&#xff0c;成绩就落下来了。那么&#xff0c;我们来看看三年级起&#xff0c;考试还能够保持在90分以上的孩子是怎么学习数学的吧&#xff01;第一&#xff0c;计算能力过关通过这两张图片的对…

快速上手Mybatis-Plus 入门案例

写在前面&#x1f6eb;更多知识总结见Mybatis-Plus专栏 &#x1f695;内容总结自尚硅谷杨博超老师的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

黑苹果 选择语言 点不了_什么是天然的“黑钻”?—科普贴

天然黑钻也被成为“碳酸氢”&#xff0c;具有与白钻相同的化学成分&#xff0c;然而黑钻石的晶体结构是不同的&#xff0c;这意味着它们由许多小晶体组成&#xff0c;它们以随机的形式粘在一起&#xff0c;而不是一个具有可识别自然线的固体锥形。天然黑钻石有极高的含物&#…

sim卡没坏但苹果手机无服务_解决手机插SIM卡后都显示“无SIM卡”的故障问题

故障现象顾客描述手机插SIM卡后都显示“无SIM卡”。维修过程引起插入SIM卡却显示“无SIM卡”的故障&#xff0c;除了可能是SIM卡座的供电、时钟、复位及SIM卡插入检测信号不正常导致外&#xff0c;还有可能是基带不正常导致的。插上手机卡&#xff0c;左上角提示“无SIM卡”&am…

Mybatis-Plus实现简单的增删改查 实体类上的注解

写在前面&#x1f6eb;更多知识总结见Mybatis-Plus专栏 &#x1f695;内容总结自尚硅谷杨博超老师的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

conda失败说没有写权限_爱情中,为什么男生表白失败,女生还说可以继续做朋友,想过没有...

在爱情中&#xff0c;不是每个男生都是幸运的&#xff0c;也不是每次的表白都是如你所愿的。有成功总有失败&#xff0c;成功是喜悦的&#xff0c;但是失败却是痛苦的。不过有的时候男生和女生表白以后&#xff0c;女生对男生说了这样的一段&#xff0c;其实我希望以后我们还是…

Mybatis-Plus中Wrapper条件构造器的使用

写在前面 &#x1f6eb;更多知识总结见Mybatis-Plus专栏 &#x1f695;内容总结自尚硅谷杨博超老师的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680…

springboot设置默认值_线上Bug无法复现?老司机教你一招,SpringBoot远程调试不用愁!...

前言在部署线上项目时&#xff0c;相信大家都会遇到一个问题&#xff0c;线上的 Bug 但是在本地不会复现&#xff0c;多么无奈。此时最常用的就是取到前端传递的数据用接口测试工具测试&#xff0c;比如 POSTMAN&#xff0c;复杂不&#xff0c;难受不&#xff1f;今天陈某教你一…

Mybatis-Plus的分页 乐观锁插件 通用枚举 多数据源

写在前面&#x1f6eb;更多知识总结见Mybatis-Plus专栏 &#x1f695;内容总结自尚硅谷杨博超老师的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

等待的操作过时_不会过时的6种网站seo优化操作

SEO优化一直在变化&#xff0c;百度和谷歌的算法也在不断的迭代更新&#xff0c;所以竞争永远不会停止。今天小编就来给大家分享一下&#xff0c;6种不会过时的网站seo优化操作。1.保持正常优化为网站访客提供高质量的内容、卓越的用户体验和安全性以及卓越的技术网站。这可能需…

java的for循环取出数据只是拿到最后一个_一问SQL优化就无从藏身?那只是你对原理的精髓掌握不深

​曾几何时&#xff0c;我信誓旦旦的认为只要 SQL 写的好&#xff0c;面试过程永不倒。结果在一次又一次的征途中&#xff0c;「最终还是以完败落下帷幕」。结果都源于注重使用而忽略原理&#xff0c;从而不知也不了解「SQL」优化应如何面对。读文的你&#xff0c;如今可有这样…

SpringBoot前后端分离解决跨域问题的三种解决方案

&#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;** 文章目录&#x1f34a;什么是跨域&#x1f34a;跨域问题的解决策略&#x1f34a;三种解决方法&#x1f34a;什么是跨域 想要知道什么是跨域的话&#xff0c;我们可以通过一个小案例简单了解一下跨…

ant design vue 树形控件_官宣!vue.ant.design 低调上线

点击右上方&#xff0c;关注开源中国OSC头条号&#xff0c;获取最新技术资讯官宣&#xff01;官宣&#xff01;官宣&#xff01;是的&#xff0c;你没看错就是那个 https://vue.ant.design。至此&#xff0c;Ant Design 已经全面覆盖了 React、Angular、Vue 三大前端框架&#…

哪款笔记本电脑好_扫地机器人哪个牌子好?口碑最好的扫地机器人

随着智能家居的普及&#xff0c;让我们的生活变得越来越智能。扫地机器人的出现完美解决了宠物的毛发问题&#xff0c;为自己腾出了大量的时间。扫地机器人绝对能提升你的生活品质&#xff0c;通过机器内建的智能清洁模式、自定义规划区域进行打扫&#xff0c;使用手机APP进行控…

使用mybatisplus的通用枚举实现存储显示相分离

狡兔尚且三窟&#xff0c;多学一招总没错吧&#xff1f; &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680; &#x1f30f; 抛出问题 如果让你实现这么一个功能&#xff1a;将性别使用数字存储到数据库中&#xff0c;但是前端需要获取到的是具体的性…

JDK和JRE的区别?main方法的注意点?强制和自动类型转换?

&#x1f4a1;涉及的知识点速通&#x1f6eb; JDK和JRE傻傻分不清?&#x1f6eb; HelloWorld的输出都经历了啥&#xff1f;&#x1f6eb; Java的三个版本都是啥&#xff1f;&#x1f6eb; 关于main方法你都知道啥&#xff1f;&#x1f6eb; 强制and自动类型转换都是啥?各位小…

安卓10不支持qmc解码_Root神器支持安卓10 面具Magisk v20.4+Magisk Manager v7.5.1

Magisk的功能和xposed框架的功能差不多&#xff0c;也有很多插件可安装&#xff0c;而且自带root&#xff0c;刷入这个Magisk后你的rom同时也就有root了(支持安卓7.0&#xff0c;7.1&#xff0c;8.0&#xff0c;8.1,9,10)这也是目前安装8.1root的普遍方法&#xff0c;因为目前s…