一、MybatisPlus简化数据库交互

我们使用Mybatis发现需要在mapper.xml中写很多重复的简单CRUD(增删改查),使用MybatisPlus可以大大简化这部分代码,官方文档http://mp.baomidou.com/

二、引入MybatisPlus

先看一下我的项目结构,我们一步一步来编写这个Demo,我的Model对象是一个独立模块,所以请自行修改自己的实体对象

1、创建一个Maven项目引入spring boot,打开pom.xml增加以下引入,其中包括alibaba连接池druid、mysql数据库连接插件、mybatis-plus插件,切记不要引入mybatis及mybatis spring可能会有冲突

    <dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--import druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--import mysql connector-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!--import mybatis plus 它会自动引入mybatis及mybatis spring切勿重复引用以免冲突-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3</version>
</dependency>
</dependencies>

2、建立resources文件夹并创建application.yml配置文件,增加以下配置,主要数据库连接、mapper.xml、model实体的位置需要自己调整

#设置提供的服务名
spring:
application:
name: javademo-tyh-service-base
#配置数据库
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://10.11.12.237:3306/tyh_test?useUnicode=true&characterEncoding=utf8
username: root
password: root #设置自己启动的端口
server:
port: 12000 #mybatis plus
mybatis-plus:
#指明mapper.xml扫描位置(classpath* 代表编译后类文件根目录)
mapper-locations: classpath*:/mapper/**Mapper.xml
#指明实体扫描(多个package用逗号或者分号分隔)
typeAliasesPackage: javademo.tyh.model.base;javademo.tyh.model.hotel;
global-config:
#主键类型 0:数据库ID自增, 1:用户输入ID,2:全局唯一ID (数字类型唯一ID), 3:全局唯一ID UUID
id-type: 0
#字段策略(拼接sql时用于判断属性值是否拼接) 0:忽略判断,1:非NULL判断,2:非空判断
field-strategy: 2
#驼峰下划线转换含查询column及返回column(column下划线命名create_time,返回java实体是驼峰命名createTime,开启后自动转换否则保留原样)
db-column-underline: true
#是否动态刷新mapper
refresh-mapper: false
#数据库大写命名下划线转换
#capital-mode: true

3、在resources文件夹下创建mapper文件夹用于存放所有的mapper.xml文件,创建UserMapper.xml文件编写一个自定义sql

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 指明当前xml对应的Mapper -->
<mapper namespace="javademo.tyh.service.base.mapper.UserMapper">
<select id="listCount" resultType="Integer">
select count(*) from user_info;
</select>
</mapper>

4、打开main方法所在类,修改代码指明扫描mapper接口所在包的位置

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("javademo.tyh.service.base.mapper")//标记扫描的mapper位置
public class AppServiceBase
{
public static void main( String[] args )
{
SpringApplication.run(AppServiceBase.class,args);
}
}

5、创建config文件夹用于存放mybatisplus的插件配置,目前只需要一个分页插件

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class MybatisPlusConfig {
// 分页拦截器
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}

6、创建mapper文件夹用于存放底层与xml的关联mapper接口,要继承BaseMapper并传递一个Model对象当作泛型,再写一个自定义方法

import com.baomidou.mybatisplus.mapper.BaseMapper;
import javademo.tyh.model.base.UserModel;
import org.springframework.stereotype.Component; @Component
public interface UserMapper extends BaseMapper<UserModel> {
//自定义方法
int listCount();
}

7、创建service文件夹用于存放业务操作逻辑,此时自动注入mapper后可以调用很多mybatis plus提供的方法,基本的CRUD都不需要单独写了

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import javademo.tyh.model.base.UserModel;
import javademo.tyh.service.base.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List; @Service
public class UserService { @Autowired
UserMapper mapper; public int insert(UserModel model) {
return mapper.insert(model);
}
public int delete(int id) {
return mapper.deleteById(id);
}
public int update(UserModel model) {
//更新全部字段,但可以跟application.yml中的field-strategy字段策略相配合,不更新为null或为空的字段
return mapper.updateById(model);
//更新全部字段,且不可为NULL
//return mapper.updateAllColumnById(model);
}
public UserModel get(int id) {
return mapper.selectById(id);
}
public List<UserModel> list() {
EntityWrapper ew = new EntityWrapper();
ew.where("1={0}", 1);
return mapper.selectList(ew);
}
//调用自定义方法
public int listCount(){
return mapper.listCount();
}
}

8、创建controller文件夹用于接收请求和测试

import javademo.tyh.model.base.UserModel;
import javademo.tyh.service.base.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import java.time.LocalDateTime;
import java.util.List; @Controller
@RequestMapping("/user")
public class UserController { @Autowired
private DiscoveryClient client; @Autowired
UserService service; @ResponseBody
@RequestMapping("/insert")
public int insert() {
UserModel model = new UserModel();
model.setUsername("taiyonghai");
model.setPassword("111111");
model.setSex(1);
model.setAge(30);
model.setCreateTime(LocalDateTime.now());
return service.insert(model);
} @ResponseBody
@RequestMapping("/delete")
public int delete(int id) {
return service.delete(id);
} @ResponseBody
@RequestMapping("/update")
public int update() {
UserModel model = new UserModel();
model.setId(1);
model.setUsername("taiyonghai"+LocalDateTime.now());
model.setPassword("111111");
model.setSex(1);
model.setAge(30);
return service.update(model);
} @ResponseBody
@RequestMapping("/get")
public UserModel get(int id) {
return service.get(id);
} @ResponseBody
@RequestMapping("/list")
public List<UserModel> list() {
List<UserModel> list = service.list();
return list;
} @ResponseBody
@RequestMapping("/listCount")
public int listCount() {
return service.listCount();
}
}

9、标记Model实体的注解,我就不粘贴get/set方法了自己生成吧

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType; import java.io.Serializable;
import java.time.LocalDateTime; //标记表名(此注解为必须,下面的字段注解可选)
@TableName("user_info")
public class UserModel implements Serializable {
//标记数据表主键
@TableId(value = "id", type = IdType.AUTO)
private int id;
private String username;
private String password;
private int sex;
private int age;
private LocalDateTime createTime;
//标记数据表中不存在的字段
@TableField(exist = false)
private String showName;
//标记数据表中的column名
@TableField("username")
private String showUsername;
}

由于我的模块Model是独立的所以需要对Model模块增加pom.xml引用,由于不需要跟spring boot自动注入有什么关系所以直接只引用基本的即可

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.3</version>
</dependency>

OK ,到此我们的MybatisPlus就引入完成,运行http://localhost:12000/user/list测试一下效果,官方文档中推荐使用IService及ServiceImpl的接口及实现类的方式,这部分可以简化,简化后的效果就是这个Demo的样子

注意:由于两个模块需要mybatis plus我有个父级pom.xml,而pom.xml文件有上下级继承关系,如果父级有用到xxx-xxx-boot-starter的组件引用,子模块中却没有相应的配置注入则会提示错误,要在main()方法对应的类中增加注解来解决

@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)//禁止tomcat DataSource注入到spring boot中
@SpringBootApplication
public class AppEureka
{
public static void main( String[] args ) {
SpringApplication.run(AppEureka.class, args);
}
}

IDEA项目搭建八——使用MybatisPlus简化数据库交互的更多相关文章

  1. IDEA项目搭建七——使用Feign简化消费者端操作

    一.简介 我们可以看到上一篇文章的消费者这边调用Service时比较麻烦,所以我们可以使用Feign来简化这部分操作,它底层也是使用Ribbon实现的只是Ribbon支持HTTP和TCP两种通信协议, ...

  2. idea中创建web项目搭建Hibernate框架连接oracle数据库

    hibernate框架 hibernate是数据化持久工具,也是一个开源代码的ORM解决方案.hibernate内部封装了通过jdbc访问数据库的操作,向商场应用提供面向对象的数据访问api. hib ...

  3. Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置

    Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...

  4. Spring MVC 项目搭建 -5- spring security 使用数据库进行验证

    Spring MVC 项目搭建 -5- spring security 使用数据库进行验证 1.创建数据表格(这里使用的是mysql) CREATE TABLE security_role ( id ...

  5. 八:SpringBoot-集成JPA持久层框架,简化数据库操作

    SpringBoot-集成JPA持久层框架,简化数据库操作 1.JPA框架简介 1.1 JPA与Hibernate的关系: 2.SpringBoot整合JPA Spring Data JPA概述: S ...

  6. windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互)

    前言 小白直接上手 docker  构建我们的第一个项目,简单粗暴,后续各种概念边写边了解,各种概念性的内容就不展开,没了解过的点击 Docker 教程 进行初步了解. Docker 是一个开源的应用 ...

  7. 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API

    前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...

  8. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之二 || 后端项目搭建

    前言 至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均有Nuget提供,不再像以前 ...

  9. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

随机推荐

  1. python 使用多线程进行并发编程/互斥锁的使用

    import threading import time """ python的thread模块是比较底层的模块,python的threading模块是对thread做了 ...

  2. Python编程语言基础

    今天给大家讲解python语言基础~~ 01.python核心数据类型   整型数 int:整数是不带有小数部分的数字 浮点型数 float:浮点数是带有小数部分的数字(小数部分可以是0) 复数 co ...

  3. 重磅:Spring Boot 2.0 正式发布!

    Spring Boot 2.0 正式发布! 2018/03/01最新消息,传得沸沸扬扬的Spring Boot 2.0 正式发布了. 小编去看了下Spring Boot的官网,正式版本已经释放出来了! ...

  4. iOSAPP开发项目搭建

    架构图: 架构原则:易读性.易维护性.易扩展性. 一.思考 做好一件事,花在思考上的时间应该多于执行. 首先根据产品需求和设计图,脑中先建立一个产品架构: 1. 产品的定位是什么. 社交?媒体?游戏? ...

  5. JVM-常用内存调优参数总结

    一.内存调整参数 -Xmx2g    设置堆内存最大值为2g -Xmx512m  设置堆内存最大值为512m -Xms1g   设置堆内存最小值1g (ps:-Xms和-Xmx实际上是 -XX:Ini ...

  6. Linux基础命令 ls

    目录 1. ls 列出目录的内容 -a --all: -A --almost-all: -b --escape: --block-size=SIZE: --color: --d --directory ...

  7. 【PyTorch深度学习60分钟快速入门 】Part2:Autograd自动化微分

      在PyTorch中,集中于所有神经网络的是autograd包.首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络. autograd包为张量的所有操作提供了自动微分.它是一个运行式定义的 ...

  8. redhat 下搭建网站

    1.修改yum源 把iso重新挂载到/media路径下,media是个只读的文件 vi  /etc/yum.repos.d/rhel-source.repo            //编辑yum源文件 ...

  9. 看图说话,idea 远程调试 tomcat下项目

    tomcat中部署了项目,准备测试远程调试. 1.配置idea 2. 修改catalina.bat,并启动tomcat catalina.bat: ...rem 下面的参数就是从idea配置中复制过来 ...

  10. 微信支付的JAVA SDK存在漏洞,可导致商家服务器被入侵(绕过支付)XML外部实体注入防护

    XML外部实体注入 例: InputStream is = Test01.class.getClassLoader().getResourceAsStream("evil.xml" ...