前言

本篇文章主要介绍的是SpringBoot整合mybatis-plus,实现增删改查。

GitHub源码链接位于文章底部。

建库建表

创建springboot数据库,创建t_user表,字段id主键自增,name,age。

工程结构

添加依赖

新建一个maven项目,在pom文件中添加以下依赖

org.springframework.boot

spring-boot-starter-parent

2.1.3.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

mysql

mysql-connector-java

5.1.39

com.baomidou

mybatisplus-spring-boot-starter

1.0.5

com.baomidou

mybatis-plus

2.3

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.1

org.projectlombok

lombok

1.16.20

org.apache.velocity

velocity-engine-core

2.0

src/main/java

**/*.xml

true

yml配置文件

server:

port: 8080

spring:

datasource:

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8

mybatis-plus:

mapper-locations: classpath:com/lxg/springboot/dao/mybatisplus/mapper/xml/*Mapper.xml

typeAliasesPackage: com.lxg.springboot.dao.mybatisplus

global-config:

#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID,"该类型为未设置主键类型,5, "字符串全局唯一ID"";

id-type: 0

db-column-underline: true

refresh-mapper: true

#configuration:

#这个配置会将执行的sql打印出来,在开发或测试的时候可以用

#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

主程序入口,启动类:

@SpringBootApplication

//配置mapper文件位置

@MapperScan("com.lxg.springboot.dao.mybatisplus.mapper")

public class MybatisPlusApplication {

public static void main(String[] args) {

SpringApplication.run(MybatisPlusApplication.class, args);

}

}

代码生成器

public class CodeGenerator{

/**

* @param args

* @Title: main

* @Description: 根据数据库生成表格

*/

public static void main(String[] args) {

AutoGenerator mpg = new AutoGenerator();

// 全局配置

GlobalConfig gc = new GlobalConfig();

//代码存放地址

gc.setOutputDir( "D://code4" );

gc.setFileOverride( true );

// 不需要ActiveRecord 特性的请改为false

gc.setActiveRecord( false );

// XML 二级缓存

gc.setEnableCache( false );

// XML ResultMap

gc.setBaseResultMap( true );

// XML columList

gc.setBaseColumnList( false );

// 作者

gc.setAuthor( "LXG" );

// 自定义文件命名,注意 %s 会自动填充表实体属性!

gc.setControllerName( "%sController" );

gc.setServiceName( "%sService" );

gc.setServiceImplName( "%sServiceImpl" );

gc.setMapperName( "%sMapper" );

gc.setXmlName( "%sMapper" );

mpg.setGlobalConfig( gc );

// 数据源配置

DataSourceConfig dsc = new DataSourceConfig();

dsc.setDbType( DbType.MYSQL );

dsc.setDriverName( "com.mysql.jdbc.Driver" );

dsc.setUsername( "root" );

dsc.setPassword( "root" );

dsc.setUrl( "jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL = false&serverTimezone = UTC" );

mpg.setDataSource( dsc );

// 策略配置

StrategyConfig strategy = new StrategyConfig();

// 此处可以修改为您的表前缀

strategy.setTablePrefix( new String[]{"t_"} );

// 表名生成策略

strategy.setNaming( NamingStrategy.underline_to_camel );

// 需要生成的表

strategy.setInclude( new String[]{"t_user"} );

strategy.setSuperServiceClass( null );

strategy.setSuperServiceImplClass( null );

strategy.setSuperMapperClass( null );

mpg.setStrategy( strategy );

// 包配置

PackageConfig pc = new PackageConfig();

pc.setParent( "com.lxg.springboot.dao.mybatisplus" );

pc.setController( "controller" );

pc.setService( "service" );

pc.setServiceImpl( "service/serviceImpl" );

pc.setMapper("mapper");

pc.setEntity( "entity" );

pc.setXml( "xml" );

mpg.setPackageInfo( pc );

// 执行生成

mpg.execute();

}

}

MybatisPlus配置,包括分页插件、打印SQL,打印SQL的代码只为了测试开发阶段使用,生产环境需要注释掉,否则日志文件过大。

@EnableTransactionManagement

@Configuration

public class MybatisPlusConfig {

/**

* 分页插件

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

/**

* 打印 sql

*/

@Bean

public PerformanceInterceptor performanceInterceptor() {

PerformanceInterceptor performanceInterceptor =new PerformanceInterceptor();

//格式化sql语句

Properties properties =new Properties();

properties.setProperty("format", "false");

performanceInterceptor.setProperties(properties);

return performanceInterceptor;

}

}

实体类

@TableName("t_user")

@Data

public class User implements Serializable {

/** id */

private String id;

/** 姓名 */

private String name;

/** 年龄 */

private Integer age;

}

dao层

在mapper文件夹下创建UserMapper,继承BaseMapper

@Repository

public interface UserMapper extends BaseMapper {

/**

* 方法名与映射文件的id一致

*/

List findByXml();

}

mapper文件夹下创建xml文件夹,存放mapper映射文件,新建UserMapper.xml

select * from t_user;

service层

在service文件夹下创建UserService

public interface UserService {

/**

* 新增

*

* @param user

*/

public void addUser(User user);

/**

* 修改

* @param user

*/

public void updateUser(User user);

/**

* 根据id删除

* @param id

*/

public void deleteUser(String id) ;

/**

* 查询所有

*/

public List findAll();

/**

* 根据id查询

* @param id

*/

public User findUserById(String id);

/**

* 条件查询+age排序

* @param

*/

public List findSearch(Map searchMap);

/**

* 条件+分页+age排序

*/

public PageResult findSearch(Map searchMap, int page, int size);

/**

* 通过Xml映射文件查询

*/

public List findByXml();

}

在service文件夹下创建impl文件夹,存放实现类,在impl文件夹下创建UserServiceImpl实现类,实现UserService接口

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserMapper userMapper;

@Override

public void addUser(User user) {

userMapper.insert(user);

}

@Override

public void updateUser(User user) {

userMapper.updateById(user);

}

@Override

public void deleteUser(String id) {

userMapper.deleteById(id);

}

@Override

public List findAll() {

return userMapper.selectList(null);

}

@Override

public User findUserById(String id) {

return userMapper.selectById(id);

}

@Override

public List findSearch(Map searchMap) {

EntityWrapper wrapper = createSearchCondition(searchMap);

//根据age倒序查询

wrapper.orderBy(true, "age", false);

return userMapper.selectList(wrapper);

}

@Override

public PageResult findSearch(Map searchMap, int page, int size) {

EntityWrapper wrapper = createSearchCondition(searchMap);

//根据age倒序查询

wrapper.orderBy(true, "age", false);

Page userPage = new Page<>(page,size);

List list = userMapper.selectPage(userPage, wrapper);

return new PageResult<>(userPage.getTotal(),list);

}

@Override

public List findByXml() {

return userMapper.findByXml();

}

/**

* 构造查询条件

* @param searchMap

* @return

*/

public EntityWrapper createSearchCondition(Map searchMap) {

EntityWrapper wrapper = new EntityWrapper<>(new User());

if (searchMap.get("name") != null) {

wrapper.eq("name", searchMap.get("name"));

}

if (searchMap.get("age") != null) {

wrapper.eq("age", searchMap.get("age"));

}

return wrapper;

}

}

controller层

在controller文件夹下创建UserController

@RestController

@RequestMapping(value = "/user")

public class UserController {

@Autowired

private UserService userService;

/**

* 新增

* @param user

*/

@RequestMapping(method = RequestMethod.POST)

public Result addUser(@RequestBody User user) {

userService.addUser(user);

return new Result(true, StatusCode.OK,"新增成功");

}

/**

* 根据id修改

* @param user

*/

@RequestMapping(method = RequestMethod.PUT)

public Result updateUser(@RequestBody User user) {

if (user.getId() == null || user.getId().equals("")) {

return new Result(false, StatusCode.ERROR,"无id,更新失败");

}

userService.updateUser(user);

return new Result(true, StatusCode.OK,"更新成功");

}

/**

* 根据id删除

* @param id

* @return

*/

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)

public Result delete(@PathVariable String id) {

userService.deleteUser(id);

return new Result(true, StatusCode.OK,"删除成功");

}

/**

* 查询所有

*/

@RequestMapping(method = RequestMethod.GET)

public List findAllUser() {

return userService.findAll();

}

/**

* 根据id查询

* @param id

*/

@RequestMapping(value = "/{id}", method = RequestMethod.GET)

public Result findByUserId(@PathVariable String id) {

return new Result(true, StatusCode.OK,"查询成功",userService.findUserById(id));

}

/**

* 条件查询

*/

@RequestMapping(value="/search",method = RequestMethod.POST)

public Result findSearch(@RequestBody Map searchMap){

return new Result(true,StatusCode.OK,"查询成功 ",userService.findSearch(searchMap));

}

/**

* 条件+分页

* @param searchMap

* @param page

* @param size

*/

@RequestMapping(value = "/search/{page}/{size}",method = RequestMethod.POST)

public Result findSearch(@RequestBody Map searchMap, @PathVariable int page, @PathVariable int size){

return new Result(true,StatusCode.OK,"查询成功",userService.findSearch(searchMap,page,size));

}

/**

* 通过Xml查询成功

* @return

*/

@RequestMapping(value = "/findByXml",method = RequestMethod.GET)

public Result findByXml(){

return new Result(true,StatusCode.OK,"XML查询成功",userService.findByXml());

}

}

整合durid连接池

pom文件中增加依赖

com.alibaba

druid-spring-boot-starter

1.1.10

这种形式只需要在yml配置文件中增加一些配置即可,不用再写配置类了。

spring:

datasource:

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8

type: com.alibaba.druid.pool.DruidDataSource

druid:

#初始化连接池大小

initial-size: 5

#配置最小连接数

min-idle: 5

#配置最大连接数

max-active: 20

#配置连接等待超时时间

max-wait: 60000

#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

time-between-eviction-runs-millis: 60000

#配置一个连接在池中最小生存的时间,单位是毫秒

min-evictable-idle-time-millis: 300000

#测试连接

validation-query: SELECT 1 FROM DUAL

#申请连接的时候检测,建议配置为true,不影响性能,并且保证安全

test-while-idle: true

#获取连接时执行检测,建议关闭,影响性能

test-on-borrow: false

#归还连接时执行检测,建议关闭,影响性能

test-on-return: false

#是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭

pool-prepared-statements: true

#开启poolPreparedStatements后生效

max-pool-prepared-statement-per-connection-size: 20

#配置扩展插件,常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入

filters: stat,wall,slf4j

#打开mergeSql功能;慢SQL记录

connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

#配置DruidStatFilter

web-stat-filter:

enabled: true

url-pattern: "/*"

exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"

#配置DruidStatViewServlet

stat-view-servlet:

url-pattern: "/druid/*"

#IP白名单(没有配置或者为空,则允许所有访问)

allow: 127.0.0.1,192.168.163.1

#IP黑名单 (存在共同时,deny优先于allow)

deny: 192.168.1.73

# 禁用HTML页面上的“Reset All”功能

reset-enable: false

#登录名

login-username: root

#登录密码

login-password: root

启动程序后,访问localhost:8080/druid ,输入配置的账号密码即可登录可视化监控界面。

测试

参考https://www.lxgblog.com/article/1572258314 文章末测试部分

springboot pom文件添加mysql组件_SpringBoot整合mybatis-plus+druid组件,实现增删改查相关推荐

  1. springboot pom文件添加mysql组件_SpringBoot+Mybatis 通过databaseIdProvider支持多数据库

    概述 本人最近接到一个任务,将一个系统改成同时兼容Oracle和PostgreSQL(原来是仅支持Oracle).虽然大部分的sql语句通用,但是还有许多语法存在差异,所以我们可以通过mybatis自 ...

  2. SpringBoot使用Redis和MyBatis完成缓存数据的增删改查

    文章目录 1.在Spring Boot中集成Redis 2.配置Redis类 关于Redis Template中序列化和反序列化配置的解释 3.创建测试实体类 4.实现实体和数据表的映射关系 5.创建 ...

  3. mysql sqlsugar_.net core +mysqlSugar(最为简单的增删改查)

    首先建立.net Core API - empty 这个就不说了 然后创建新的Controller 记得添加路由 [Route("api/Users")] 然后在Nuget Pac ...

  4. mysql升序nuul在最后,javaweb连接数据库并完成增删改查

    一.连接数据库 1.mysql数据库的安装和配置 在网上找到了篇关于mysql的安装详细说明,供读者自己学习 https://www.jb51.net/article/23876.htm 2.mysq ...

  5. Android整合SQLite数据库进行基本的增删改查

    简言 使用Android整合SQLite数据库进行数据存储,大致可以划分为三步: ①继承 SQLiteOpenHelper,创建数据库 ②继承 ContentProvider 类,重写方法 ③在清单文 ...

  6. mysql如何修改学生表_MySQL 详细单表增删改查crud语句

    MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范 ...

  7. java mysql分层_java-数据库连接,分层实现增删改查测试

    packagecom.zhidisoft.dao;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Resul ...

  8. python 列表嵌套字典 添加修改删除_python 列表、字典、元组等增删改查

    1. 元组 a. 定义和下标访问 元组的格式: (值,....) 如 s = (1,2,3) 元组的类型: tuple 元组的下标使用同字符串 注意:如果元组中只有一个元素,那么在定义时,需要加一个逗 ...

  9. 浅谈IDEA+Maven 整合SSM框架实现简单的增删改查

    SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...

最新文章

  1. 1月书讯 | 开年多本重点书
  2. 不要随意重装你的操作系统
  3. 前端在linux中常用的命令,前端应该会的23个linux常用命令
  4. 前端利器倚天剑之sublime
  5. 微软文本检索_如何在Microsoft Word中引用其他文档中的文本
  6. Dubbo的设计理念原来就藏在这三张图中
  7. php 建议查询DNS解析状态工具
  8. WPF的ControlTemplate和DataTemplate简介
  9. [转]取本页URL地址的方法是(总结):
  10. 亲密关系-【沟通日志】-如何不再重蹈覆辙
  11. 【水果识别】基于matlab GUI形态学水果识别【含Matlab源码 1364期】
  12. adb shell 出现 error :
  13. html 图片滑动验证码,html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】...
  14. java实现获取阿里云短信验证码
  15. 笔记本电脑发射无线信号的操作步骤及命令
  16. 菜鸟网管的入门之路-第一章、网络及硬件篇(1)
  17. C语言定义数组起始地址对齐方式(IAR C99 Kinetis K66)
  18. 折纸效果! Cocos Creator 3.0
  19. 太极图python自定义函数绘制_python画太极图
  20. 关于root 联想ZUK z2 遇到的一系列问题

热门文章

  1. 数据库-MySQL-数据库和表
  2. 计算机科学与技术专业热,广东省计算机科学与技术专业最“热”
  3. php三个表格,phpspreadsheet-excel工作表中有多个“格式为表”的表
  4. arcgis如何打开tif_实例|ArcGiS导出的dxf,在CASS中如何变身?
  5. mysql5.6忘记立马_MySQL 5.7 安装完成后,立即要调整的性能选项
  6. 通过Azure Kinect DK 基于Ubuntu18.04实现室内三维重建(一)
  7. 呐,你要的新年攻略和文章汇总
  8. 走向云端:Oracle SQL Developer Web 即将上线!
  9. 【华为云技术分享】弹性负载均衡服务助力企业应对高并发流量冲击
  10. 一文读懂Python 装饰器函数