SpringBoot整合MybatisPlus

目录(可点击直接跳转,但还是建议按照顺序观看,四部分具有一定的关联性):

实现基础的增删改查

实现自动填充功能

实现逻辑删除

实现分页

首先给出四部分完整的项目结构

一、实现基础的增删改查功能

1.创建项目、选择依赖

选择Spring Web、JDBC API、MyBatis Framework、MySQL Driver




2.在pom文件中引入相关依赖

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <!-- 修改jdbc版本 -->
  5. <version>5.1.47</version>
  6. <scope>runtime</scope>
  7. </dependency>
  8. <!-- 引入MybatisPlus的启动器 -->
  9. <dependency>
  10. <groupId>com.baomidou</groupId>
  11. <artifactId>mybatis-plus-boot-starter</artifactId>
  12. <version>3.3.2</version>
  13. </dependency>
  14. <!-- 引入lombok -->
  15. <dependency>
  16. <groupId>org.projectlombok</groupId>
  17. <artifactId>lombok</artifactId>
  18. </dependency>
  19. <!-- 引入druid连接池 -->
  20. <dependency>
  21. <groupId>com.alibaba</groupId>
  22. <artifactId>druid</artifactId>
  23. <version>1.2.6</version>
  24. </dependency>
  25. <!-- 引入log4j -->
  26. <dependency>
  27. <groupId>log4j</groupId>
  28. <artifactId>log4j</artifactId>
  29. <version>1.2.17</version>
  30. </dependency>

3.建库、建表、插入数据

  1. CREATE DATABASE db_mybatisplus;
  2. USE db_mybatisplus;
  3. CREATE TABLE tab_teacher(
  4. pk_teacher_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '老师主键id,起始为1',
  5. teacher_name VARCHAR(10) COMMENT '老师姓名',
  6. teacher_sex CHAR(1) COMMENT '老师性别',
  7. teacher_salary DOUBLE(6,1) COMMENT '老师工资'
  8. );
  9. -- 反复执行多次,随机插入多条数据
  10. INSERT INTO tab_teacher VALUES(
  11. NULL,
  12. SUBSTR(MD5(RAND()), 1, 5),
  13. IF(RAND()>0.5, '男', '女'),
  14. RAND()*10000+1000
  15. );
  16. SELECT * FROM tab_teacher;

4.配置核心配置文件

  1. # 配置连接数据库的四大参数
  2. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  3. spring.datasource.url=jdbc:mysql://192.168.133.139/db_mybatisplus?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
  4. spring.datasource.username=root
  5. spring.datasource.password=root
  6. # 指定连接池的类型
  7. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  8. # 显示SQL语句
  9. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

5.创建实体类

  1. package cn.byuan.entity;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableField;
  4. import com.baomidou.mybatisplus.annotation.TableId;
  5. import com.baomidou.mybatisplus.annotation.TableName;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8. import lombok.NoArgsConstructor;
  9. import lombok.experimental.Accessors;
  10. import java.io.Serializable;
  11. @NoArgsConstructor// 创建无参的构造方法
  12. @AllArgsConstructor// 创建满参的构造方法
  13. @Accessors(chain = true)// 使用链式方法
  14. @Data// 重写toString方法等方法
  15. @TableName("tab_teacher")// 对应表名
  16. public class Teacher implements Serializable {
  17. @TableId(value = "pk_teacher_id", type = IdType.AUTO)// 主键必须有TableId注解
  18. private Integer teacherId;
  19. @TableField("teacher_name")
  20. private String teacherName;
  21. @TableField("teacher_sex")
  22. private String teacherSex;
  23. @TableField("teacher_salary")
  24. private Double teacherSalary;
  25. }

6.创建Teacher类的dao接口,继承BaseMapper接口,使用BaseMapper接口的方法

这里我省去了mapper层,直接让dao层接口继承BaseMapper

这里要牢记一个原则:在启动类对继承BaseMapper的类进行扫描,谁继承BaseMapper类就对它进行扫描

  1. package cn.byuan.dao;
  2. import cn.byuan.entity.Teacher;
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. import org.springframework.stereotype.Repository;
  5. @Repository
  6. public interface TeacherDao extends BaseMapper<Teacher> {
  7. }

7.创建service接口及实现类

接口:

  1. import cn.byuan.entity.Teacher;
  2. import java.util.List;
  3. public interface TeacherService {
  4. // 添加一位老师
  5. Integer addOneTeacher(Teacher teacher);
  6. // 根据id删除一位老师
  7. Integer deleteOneTeacherByTeacherId(Integer teacherId);
  8. // 修改一位老师的信息
  9. Integer updateOneTeacher(Teacher teacher);
  10. // 根据id查询一位老师
  11. Teacher getOneTeacherByTeacherId(Integer teacherId);
  12. // 获取所有老师
  13. List<Teacher> getAllTeacher();
  14. }

实现类:

  1. package cn.byuan.service;
  2. import cn.byuan.dao.TeacherDao;
  3. import cn.byuan.entity.Teacher;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class TeacherServiceImp implements TeacherService{
  9. @Autowired
  10. private TeacherDao teacherDao;
  11. // 添加一位老师
  12. public Integer addOneTeacher(Teacher teacher){
  13. return teacherDao.insert(teacher);
  14. }
  15. // 根据id删除一位老师
  16. public Integer deleteOneTeacherByTeacherId(Integer teacherId){
  17. return teacherDao.deleteById(teacherId);
  18. }
  19. // 修改一位老师的信息
  20. public Integer updateOneTeacher(Teacher teacher){
  21. return teacherDao.updateById(teacher);
  22. }
  23. // 根据id查询一位老师
  24. public Teacher getOneTeacherByTeacherId(Integer teacherId){
  25. return teacherDao.selectById(teacherId);
  26. }
  27. // 获取所有老师
  28. public List<Teacher> getAllTeacher(){
  29. return teacherDao.selectList(null);
  30. }
  31. }

8.在启动类对继承BaseMapper的类配置扫描

谁继承了BaseMapper就对谁进行扫描,因为之前我省去了mapper层,直接让dao层接口继承BaseMapper,因此这里扫描的是dao包

  1. package cn.byuan;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @SpringBootApplication
  6. @MapperScan("cn.byuan.dao")// 那一层继承了BaseMapper就对那一层进行扫描
  7. public class Test005SpringbootMybatisplusApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(Test005SpringbootMybatisplusApplication.class, args);
  10. }
  11. }

9.在测试类进行测试

  1. package cn.byuan;
  2. import cn.byuan.entity.Teacher;
  3. import cn.byuan.service.TeacherService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. @SpringBootTest
  8. class TeacherDaoOneTests {
  9. @Autowired
  10. private TeacherService teacherService;
  11. @Test
  12. void addOneTeacherTest(){
  13. Teacher teacher = new Teacher()
  14. .setTeacherName("test2")
  15. .setTeacherSex("女")
  16. .setTeacherSalary(9876.5);
  17. teacherService.addOneTeacher(teacher);
  18. }
  19. @Test
  20. void deleteOneTeacherByTeacherIdTest(){
  21. teacherService.deleteOneTeacherByTeacherId(2);
  22. }
  23. @Test
  24. void updateOneTeacher(){
  25. Teacher teacher = new Teacher()
  26. .setTeacherId(1)
  27. .setTeacherName("qwe12")
  28. .setTeacherSex("女")
  29. .setTeacherSalary(1234.5);
  30. teacherService.updateOneTeacher(teacher);
  31. }
  32. @Test
  33. void getOneTeacherByTeacherId(){
  34. teacherService.getOneTeacherByTeacherId(1);
  35. }
  36. @Test
  37. void getAllTeacher(){
  38. teacherService.getAllTeacher();
  39. }
  40. }

测试结果:

二、实现自动填充功能

自动填充功能一般可以用作记录操作发生时间,如某列的最后修改时间等,本部分代码基于第一部分:实现基础的增删改查、

1.修改数据库中的表结构

  1. -- 修改数据库中表结构
  2. ALTER TABLE tab_teacher ADD create_time TIMESTAMP COMMENT '记录插入时间';
  3. ALTER TABLE tab_teacher ADD update_time TIMESTAMP COMMENT '记录修改时间';
  4. -- 更新所有表中数据
  5. UPDATE tab_teacher SET create_time=NOW();
  6. UPDATE tab_teacher SET update_time=NOW();
  7. SELECT * FROM tab_teacher;

2.修改实体类

这一步简单来说就是将增加的两列添加进Teacher类的属性中,其余与第一部分保持一致;

为实现自动填充还应在新加入的两个属性的TableField中增加"fill"属性

  1. package cn.byuan.entity;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableField;
  4. import com.baomidou.mybatisplus.annotation.TableId;
  5. import com.baomidou.mybatisplus.annotation.TableName;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8. import lombok.NoArgsConstructor;
  9. import lombok.experimental.Accessors;
  10. import java.io.Serializable;
  11. import java.util.Date;
  12. @NoArgsConstructor// 创建无参的构造方法
  13. @AllArgsConstructor// 创建满参的构造方法
  14. @Accessors(chain = true)// 使用链式方法
  15. @Data// 重写toString方法等方法
  16. @TableName("tab_teacher")// 对应表名
  17. public class Teacher implements Serializable {
  18. @TableId(value = "pk_teacher_id", type = IdType.AUTO)// 主键必须有TableId注解
  19. private Integer teacherId;
  20. @TableField("teacher_name")
  21. private String teacherName;
  22. @TableField("teacher_sex")
  23. private String teacherSex;
  24. @TableField("teacher_salary")
  25. private Double teacherSalary;
  26. // 增加的两列属性
  27. @TableField(value = "create_time", fill = FieldFill.INSERT)// 插入时自动填充
  28. private Date createTime;
  29. @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)// 插入和修改时自动填充
  30. private Date updateTime;
  31. }

3.创建handler层,实现MetaObjectHandler接口,重写insertFill与updateFill方法,指定填充的字段及属性值

  1. package cn.byuan.handler;
  2. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  3. import org.apache.ibatis.reflection.MetaObject;
  4. import org.springframework.stereotype.Component;
  5. import java.util.Date;
  6. @Component
  7. public class TeacherHandler implements MetaObjectHandler {
  8. @Override
  9. public void insertFill(MetaObject metaObject) {
  10. this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
  11. this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
  12. }
  13. @Override
  14. public void updateFill(MetaObject metaObject) {
  15. this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
  16. }
  17. }

4.进行测试

这里我们只测试增加和修改两个方法

  1. package cn.byuan;
  2. import cn.byuan.entity.Teacher;
  3. import cn.byuan.service.TeacherService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. @SpringBootTest
  8. class TeacherDaoTwoTests {
  9. @Autowired
  10. private TeacherService teacherService;
  11. @Test
  12. void addOneTeacherTest(){
  13. Teacher teacher = new Teacher()
  14. .setTeacherName("test2")
  15. .setTeacherSex("女")
  16. .setTeacherSalary(9876.5);
  17. teacherService.addOneTeacher(teacher);
  18. }
  19. @Test
  20. void updateOneTeacher(){
  21. Teacher teacher = new Teacher()
  22. .setTeacherId(1)
  23. .setTeacherName("wer23")
  24. .setTeacherSex("女")
  25. .setTeacherSalary(1234.5);
  26. teacherService.updateOneTeacher(teacher);
  27. }
  28. }

从SQL语句可以看出,在执行update方法时,已自动为我们填充字段

数据库中新插入数据也没有问题

三、实现逻辑删除功能

数据是无价的,因此一般而言我们不会直接删除数据。对于"删除"我们一般的做法是定义一个字段来记录本行数据的可见性

1.修改数据库中的表结构

添加一个字段作为标记

  1. -- 修改数据库中表结构, 添加一个字段作为标记
  2. ALTER TABLE tab_teacher ADD visibility TINYINT COMMENT "0表示未删除,1表示删除";
  3. -- 更新表中所有数据, 全部设置为未删除
  4. UPDATE tab_teacher SET visibility=0;

2.在实体类中添加字段,并添加TableField和TableLogic两个注解

  1. package cn.byuan.entity;
  2. import com.baomidou.mybatisplus.annotation.*;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. import lombok.experimental.Accessors;
  7. import java.io.Serializable;
  8. import java.util.Date;
  9. @NoArgsConstructor// 创建无参的构造方法
  10. @AllArgsConstructor// 创建满参的构造方法
  11. @Accessors(chain = true)// 使用链式方法
  12. @Data// 重写toString方法等方法
  13. @TableName("tab_teacher")// 对应表名
  14. public class Teacher implements Serializable {
  15. @TableId(value = "pk_teacher_id", type = IdType.AUTO)// 主键必须有TableId注解
  16. private Integer teacherId;
  17. @TableField("teacher_name")
  18. private String teacherName;
  19. @TableField("teacher_sex")
  20. private String teacherSex;
  21. @TableField("teacher_salary")
  22. private Double teacherSalary;
  23. @TableField(value = "create_time", fill = FieldFill.INSERT)// 插入时自动填充
  24. private Date createTime;
  25. @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)// 插入和修改时自动填充
  26. private Date updateTime;
  27. // 新添加进来的字段
  28. @TableField(value = "visibility", fill = FieldFill.INSERT)
  29. @TableLogic(value = "0", delval = "1")// 指定次字段为逻辑删除字段, 默认0是未删除, 1是已删除
  30. private Integer visibility;
  31. }

3.在TeacherHandler中指定visibility字段的初始值

  1. package cn.byuan.handler;
  2. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  3. import org.apache.ibatis.reflection.MetaObject;
  4. import org.springframework.stereotype.Component;
  5. import java.util.Date;
  6. @Component
  7. public class TeacherHandler implements MetaObjectHandler {
  8. @Override
  9. public void insertFill(MetaObject metaObject) {
  10. this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
  11. this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
  12. // 新添加的字段
  13. this.strictInsertFill(metaObject, "visibility", Integer.class, 0);
  14. }
  15. @Override
  16. public void updateFill(MetaObject metaObject) {
  17. this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
  18. }
  19. }

4.进行测试

这里只测试两个方法,一个是删除指定id值的老师,一个是根据被删除的老师id查询该老师是否可以被查询

  1. package cn.byuan;
  2. import cn.byuan.entity.Teacher;
  3. import cn.byuan.service.TeacherService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. @SpringBootTest
  8. class TeacherDaoThreeTests {
  9. @Autowired
  10. private TeacherService teacherService;
  11. @Test
  12. void deleteOneTeacherByTeacherIdTest(){
  13. // 删除id为1的老师
  14. teacherService.deleteOneTeacherByTeacherId(1);
  15. }
  16. @Test
  17. void getOneTeacherByTeacherId(){
  18. // 查询id为1的老师
  19. teacherService.getOneTeacherByTeacherId(1);
  20. }
  21. }

可以看到,当我们执行delete方法时,实际上执行的是update方法

而查询语句并没有查询到该老师

数据库中id为1的老师信息依然存在

四、实现分页功能

1.创建一个配置类,通过方法返回一个PaginationInterceptor

  1. package cn.byuan.conf;
  2. import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. @MapperScan("cn.byuan.dao")
  8. public class PageConfig {
  9. @Bean
  10. public PaginationInterceptor PaginationInterceptor(){
  11. return new PaginationInterceptor();
  12. }
  13. }

2.在service中根据selectPage方法进行分页

这里展示两种分页方式,对表中所有数据进行分页以及根据条件进行分页

接口:

  1. package cn.byuan.service;
  2. import cn.byuan.entity.Teacher;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import java.util.List;
  5. public interface TeacherService {
  6. // 添加一位老师
  7. Integer addOneTeacher(Teacher teacher);
  8. // 根据id删除一位老师
  9. Integer deleteOneTeacherByTeacherId(Integer teacherId);
  10. // 修改一位老师的信息
  11. Integer updateOneTeacher(Teacher teacher);
  12. // 根据id查询一位老师
  13. Teacher getOneTeacherByTeacherId(Integer teacherId);
  14. // 获取所有老师
  15. List<Teacher> getAllTeacher();
  16. // 该部分增加的方法
  17. // 对表中所有信息进行分页, 传入参数为要查询的页数
  18. Page<Teacher> getAllTeacherPage(Integer pageNumber);
  19. // 按条件(性别)进行分页
  20. Page<Teacher> getAllTeacherByTeacherSexPage(Integer pageNumber, String teacherSex);
  21. }

实现类:

  1. package cn.byuan.service;
  2. import cn.byuan.dao.TeacherDao;
  3. import cn.byuan.entity.Teacher;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import java.util.List;
  9. @Service
  10. public class TeacherServiceImp implements TeacherService{
  11. @Autowired
  12. private TeacherDao teacherDao;
  13. // 添加一位老师
  14. public Integer addOneTeacher(Teacher teacher){
  15. return teacherDao.insert(teacher);
  16. }
  17. // 根据id删除一位老师
  18. public Integer deleteOneTeacherByTeacherId(Integer teacherId){
  19. return teacherDao.deleteById(teacherId);
  20. }
  21. // 修改一位老师的信息
  22. public Integer updateOneTeacher(Teacher teacher){
  23. return teacherDao.updateById(teacher);
  24. }
  25. // 根据id查询一位老师
  26. public Teacher getOneTeacherByTeacherId(Integer teacherId){
  27. return teacherDao.selectById(teacherId);
  28. }
  29. // 获取所有老师
  30. public List<Teacher> getAllTeacher(){
  31. return teacherDao.selectList(null);
  32. }
  33. // 该部分增加的方法
  34. // 对表中所有信息进行分页, 传入参数为要查询的页数
  35. public Page<Teacher> getAllTeacherPage(Integer pageNumber){
  36. QueryWrapper<Teacher> teacherQueryWrapper = new QueryWrapper<>();
  37. Page<Teacher> teacherPage = new Page<>(pageNumber, 5);// 每页大小为5
  38. teacherDao.selectPage(teacherPage, teacherQueryWrapper);
  39. return teacherPage;
  40. }
  41. // 按条件(性别)进行分页
  42. public Page<Teacher> getAllTeacherByTeacherSexPage(Integer pageNumber, String teacherSex){
  43. QueryWrapper<Teacher> teacherQueryWrapper = new QueryWrapper<>();
  44. teacherQueryWrapper.eq("teacher_sex", teacherSex);// 根据条件进行分页, 这里填写的是表中的列名
  45. Page<Teacher> teacherPage = new Page<>(pageNumber, 5);
  46. teacherDao.selectPage(teacherPage, teacherQueryWrapper);
  47. return teacherPage;
  48. }
  49. }

3.进行测试

  1. package cn.byuan;
  2. import cn.byuan.entity.Teacher;
  3. import cn.byuan.service.TeacherService;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. @SpringBootTest
  9. class TeacherDaoFourTests {
  10. @Autowired
  11. private TeacherService teacherService;
  12. @Test
  13. void getAllTeacherPageTest(){
  14. // 查看第三页
  15. Page<Teacher> teacherPage = teacherService.getAllTeacherPage(3);
  16. teacherPage.getRecords().forEach(System.out::println);
  17. }
  18. @Test
  19. void getAllTeacherByTeacherSexPageTest(){
  20. // 查询男生第1页的内容
  21. Page<Teacher> teacherPage = teacherService.getAllTeacherByTeacherSexPage(1, "男");
  22. teacherPage.getRecords().forEach(System.out::println);
  23. }
  24. }

测试结果

附:Page对象的一些常用方法

  1. Page<Object> page = new Page<>(1, 6);// 指定当前页, 每页记录数
  2. page.getCurrent();// 获取当前页
  3. page.getTotal();// 获取总记录数
  4. page.getSize();// 获取每页的记录数
  5. page.getRecords();// 获取当前页数据的集合
  6. page.getPages();// 获取总页数
  7. page.hasNext();// 是否存在下一页
  8. page.hasPrevious();// 是否存在上一页

源码地址:https://github.com/byuan98/springboot-integration/tree/master/test005_springboot_mybatisplus

5、SpringBoot整合之SpringBoot整合MybatisPlus的更多相关文章

  1. springboot+jpa+mysql+swagger整合

    Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency>      < ...

  2. java框架之SpringBoot(12)-消息及整合RabbitMQ

    前言 概述 大多数应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦的能力. 消息服务中两个重要概念:消息代理(message broker)和目的地(destination).当消息发送者发送 ...

  3. java框架之SpringBoot(13)-检索及整合Elasticsearch

    ElasticSearch介绍 简介 我们的应用经常需要使用检索功能,开源的 Elasticsearch 是目前全文搜索引擎的首选.它可以快速的存储.搜索和分析海量数据.SpringBoot 通过整合 ...

  4. Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...

  5. SpringBoot Druid整合,SpringBoot 集成Druid

    SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...

  6. SpringBoot+SpringMVC+MyBatis快速整合搭建

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  7. SpringBoot:4.SpringBoot整合Mybatis实现数据库访问

    在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...

  8. SpringBoot与PageHelper的整合示例详解

    SpringBoot与PageHelper的整合示例详解 1.PageHelper简介 PageHelper官网地址: https://pagehelper.github.io/ 摘要: com.gi ...

  9. SpringBoot学习- 4、整合JWT

    SpringBoot学习足迹 1.Json web token(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于 ...

  10. SpringBoot学习- 3、整合MyBatis

    SpringBoot学习足迹 1.下载安装一个Mysql数据库及管理工具,同类工具很多,随便找一个都可以,我在windows下做测试项目习惯使用的是haosql 它内部集成了MySql-Front管理 ...

随机推荐

  1. Sqoop 安装部署

    1. 上传并解压 Sqoop 安装文件 将 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 安装包上传到 node-01 的 /root/ 目录下并将其解压 [root@no ...

  2. 创建第一个django工程

    一.环境搭建 使用anaconda + pycharm的环境. 1.创建虚拟环境并安装django1.8的包 # 创建虚拟环境 conda create -n django python=3.6 # ...

  3. 3.socket编程示例

    #block_server.py 非阻塞IO示例#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决from socket import *from time impo ...

  4. CSS(2)盒子模型、定位浮动

    盒子模型 盒子模型:一个盒子中主要的属性就5个.width与height.padding.border.margin.盒子模型标准有两种为标准盒模型和IE盒模型.学习上以标准盒子模型为主 width和 ...

  5. 防火墙 firewall iptables

    firewalld FirewallD 使用服务service 和区域zone来代替 iptables 的规则rule和链chain,默认情况下,有以下的区域zone可用: drop – 丢弃所有传入 ...

  6. Django Admin后台管理功能使用

    前言 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: 1 2 3 4 5 from django.contrib im ...

  7. Linux(CentOS7)下二进制安装MySQL5.7.26

    记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单 ...

  8. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  9. Step By Step(Lua迭代器和泛型for)

    Step By Step(Lua迭代器和泛型for) 1. 迭代器与Closure:    在Lua中,迭代器通常为函数,每调用一次函数,即返回集合中的"下一个"元素.每个迭代器都 ...

  10. IoU、GIoU、DIoU、CIoU损失函数

    IoU.GIoU.DIoU.CIoU损失函数 目标检测任务的损失函数由Classificition Loss和Bounding Box Regeression Loss两部分构成.目标检测任务中近几年 ...