这只是一个基本springboot整合mybatis-plus3.0-beta的例子,包含springboot搭建、整合mybatis-plus3.0-beta,以及遇到的坑。
关于sprintboot的介绍太多了,用我的话概述就是快速构建项目,搭建常规SSM你可能需要30分钟及以上,用springboot你只要5分钟。
mybatis-plus3.0-beta可以提供通用dao层、通用service层、分页功能,并提供代码生成器。单表可以快速生成后台mapper、service、serviceImpl、空的controller类。
搭建springboot项目
我用的是eclispe,也没有装插件,所以通用这个网址生成springboot项目。springboot向导。
点击Switch back to the simple version.
勾选web,然后下载该项目。
下载完成后解压,通过import-import-maven-exist maven projects导入
导入完成后目录结构如下:
创建目录,创建TestController,用于测试SpringMVC是否成功。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("test")
public String test() {
return "Hello springboot!";
}
}
启动项目:打开ZyApplication.java类,右键Run as-java Application,出现Started ZyApplication in 3.508 seconds (JVM running for 3.964)表示成功。当然项目不一样名称就不一样,不必纠结。
打开浏览器:http://localhost:8080/test,成功访问。
这里你会发现和以往访问不一样,因为不用输入项目名,怎么使用http://ip:port/projectName方式访问呢?
带项目名访问
将application.properties修改成application.yml,当然你用properties也可以,这里我使用yml文件。内容如下:
server:
servlet:
context-path: /springboot
重启,再次访问:http://localhost:8080/springboot/test,访问成功。
那么问题来了,每次改重启好麻烦,能热部署吗?能。
热部署支持
打开pom.xml文件,添加热部署支持
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
spring:
devtools:
restart:
enabled: true
再次重启,重启完你再修改java文件你会发现项目会自动部署而不用重启。
使其支持jsp
打开pom.xml,添加相关jar包
打开application.yml,添加jsp相关配置,并创建相关目录及test.jsp。
修改TestController为如下内容,使其跳到对应的test.jsp,并在test.jsp中取出test的值显示。
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("test")
public String test(Model model) {
model.addAttribute("test", "jsp测试");
return "contest/test";
}
}
创建test.jsp,路径如下方图片所示。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>testtitle>
head>
<body>
${test}
body>
html>
打开浏览器,访问http://localhost:8080/springboot/test,成功显示。(如果这里提示404,请手动重新启动即可)
加入mybatis
创建数据库springboot,执行下面的sql语句
DROP TABLE IF EXISTS `sys_admin`;
CREATE TABLE `sys_admin` (
`id` varchar(64) NOT NULL COMMENT 'PK',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(64) NOT NULL COMMENT '密码',
`status` int(1) NOT NULL COMMENT '状态',
`salt` varchar(64) NOT NULL COMMENT '加密字符',
`head_img` text COMMENT '头像',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `sys_admin` */
insert into `sys_admin`(`id`,`username`,`password`,`status`,`salt`,`head_img`,`create_time`) values
('1','root','root',1,'1',NULL,'2018-07-17 15:18:56');
打开pom.xml,添加mybatis和mysql的jar包,如下内容
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.1.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.0version>
dependency>
完整的pom.xml如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.houpugroupId>
<artifactId>zyartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>zyname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.3.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.1.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.0version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
创建下面文件,各文件所在位置如下:
SysAdminMapper.xml
<mapper namespace="com.houpu.zy.module.contest.mapper.SysAdminMapper">
<resultMap id="BaseResultMap" type="com.houpu.zy.module.contest.entity.SysAdmin">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="status" property="status" />
<result column="salt" property="salt" />
<result column="head_img" property="headImg" />
<result column="create_time" property="createTime" />
resultMap>
<select id="selectSysAdmin" resultMap="BaseResultMap">
select * from sys_admin
select>
mapper>
SysAdminMapper.java
package com.houpu.zy.module.contest.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.houpu.zy.module.contest.entity.SysAdmin;
@Mapper
public interface SysAdminMapper {
/**
* 查询所有sysAdmin记录
* @return
*/
List selectSysAdmin();
}
ISysAdminService.java
package com.houpu.zy.module.contest.service;
import java.util.List;
import com.houpu.zy.module.contest.entity.SysAdmin;
public interface ISysAdminService {
/**
* 查询所有sysAdmin记录
* @return
*/
List selectSysAdmin();
}
SysAdminServiceImpl.java
package com.houpu.zy.module.contest.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.houpu.zy.module.contest.entity.SysAdmin;
import com.houpu.zy.module.contest.mapper.SysAdminMapper;
import com.houpu.zy.module.contest.service.ISysAdminService;
@Service
public class SysAdminServiceImpl implements ISysAdminService {
@Autowired
private SysAdminMapper sysAdminMapper;
@Override
public List selectSysAdmin() {
return sysAdminMapper.selectSysAdmin();
}
}
SysAdmin.java
package com.houpu.zy.module.contest.entity;
import java.io.Serializable;
/**
*
* @author huahao
* @since 2018-07-17
*/
public class SysAdmin implements Serializable {
private static final long serialVersionUID = 1L;
/**
* PK
*/
private String id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 状态
*/
private Integer status;
/**
* 加密字符
*/
private String salt;
/**
* 头像
*/
private String headImg;
/**
* 创建时间
*/
private String createTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getHeadImg() {
return headImg;
}
public void setHeadImg(String headImg) {
this.headImg = headImg;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "SysAdmin{" +
", id=" + id +
", username=" + username +
", password=" + password +
", status=" + status +
", salt=" + salt +
", headImg=" + headImg +
", createTime=" + createTime +
"}";
}
}
TestController.java
package com.houpu.zy.module.contest.web;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.houpu.zy.module.contest.entity.SysAdmin;
import com.houpu.zy.module.contest.service.ISysAdminService;
@Controller
public class TestController {
@Autowired
private ISysAdminService sysAdminService;
@RequestMapping("test")
public String test(Model model) {
model.addAttribute("test", "jsp测试");
return "contest/test";
}
@RequestMapping("user")
public String user(Model model) {
List SysAdminList = sysAdminService.selectSysAdmin();
model.addAttribute("SysAdminList", SysAdminList);
return "contest/user";
}
}
打开application.yml,添加数据库配置:
datasource:
name: mydb
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/springboot
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
minIdle: 1
maxActive: 2
initialSize: 1
timeBetweenEvictionRunsMillis: 3000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 'ZTM' FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
mybatis:
typeAliasesPackage: com.houpu.zy.module.contest.entity
mapperLocations: classpath:mappers/**/*.xml
完整的application.yml如下
server:
servlet:
context-path: /springboot
spring:
devtools:
restart:
enabled: true
exclude: /views/**
mvc:
view:
prefix: /views/module/
suffix: .jsp
datasource:
name: mydb
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/springboot
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
minIdle: 1
maxActive: 2
initialSize: 1
timeBetweenEvictionRunsMillis: 3000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 'ZTM' FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
mybatis:
typeAliasesPackage: com.houpu.zy.module.contest.entity
mapperLocations: classpath:mappers/**/*.xml
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>testtitle>
head>
<body>
<table>
<c:forEach items="${SysAdminList}" var="user">
<tr>
<td>${user.username }td>
<td>${user.status }td>
<td>${user.password }td>
<td>${user.salt }td>
<td>${user.headImg }td>
tr>
c:forEach>
table>
body>
html>
至此已经集成mybatis,并编写了一个例子。打开浏览器访问:http://localhost:8080/springboot/user
结果如下:
以上项目代码可从这里下载:
链接: https://pan.baidu.com/s/10UBxUM-bufTUDwnhvApOmw 密码: eg5d
使用mybatis-plus重构项目
step1、删除文件service、serviceImpl、mapper.java、mapper.xml、entity等文件
这个没啥好说的,跳过了。
step2、将pom中的mybatis包改成mybatis-plus的包
将原来的mybatis依赖的jar包删除掉,即在pom.xml中删掉下面内容
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.1.1version>
dependency>
在末尾加上
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.0-betaversion>
dependency>
step3、去掉application.yml文件中mybatis的配置(不去也不影响),加入mybatis-plus配置
在application.yml文件末尾加上以下内容:
#mybatis-plus
mybatis-plus:
mapper-locations: classpath:mappers/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.houpu.zy.module.contest.entity
global-config:
db-config:
#刷新mapper 调试神器
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 3
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#数据库大写下划线转换
#capital-mode: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
#自定义填充策略接口实现
#meta-object-handler: com.baomidou.springboot.xxx
#自定义SQL注入器
#sql-injector: com.baomidou.springboot.xxx
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
##logging
logging:
level: debug
step4、新增CodeGeneration.java(从mybatis-plus官网有这个类)
下面生成的文件路径请自行修改
package com.houpu.zy;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGeneration {
/**
*
* @Title: main
* @Description: 生成
* @param args
*/
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("C:\\Users\\huahao\\Desktop\\新建文件夹");
gc.setFileOverride(true);
gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
gc.setAuthor("huahao");// 作者
// 自定义文件命名,注意 %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://127.0.0.1:3306/springboot");
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix(new String[] { "" });// 此处可以修改为您的表前缀
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setInclude(new String[] { "sys_admin" }); // 需要生成的表
strategy.setSuperServiceClass(null);
strategy.setSuperServiceImplClass(null);
strategy.setSuperMapperClass(null);
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.houpu.zy.module.contest");
pc.setController("web");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setMapper("mapper");
pc.setEntity("entity");
pc.setXml("xml");
mpg.setPackageInfo(pc);
// 执行生成
mpg.execute();
}
}
step5、step6跳过不讲,直接看step7生成的类
在com.houpu.zy.module.contest目录下新建config目录。
然后在config目录下新建如下类:
package com.houpu.zy.module.contest.config;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
@Configuration
//@MapperScan("com.houpu.zy.module.*.mapper*")//这个注解,作用相当于下面的@Bean MapperScannerConfigurer,2者配置1份即可
public class MybatisPlusConfig {
/**
* mybatis-plus分页插件
* 文档:http://mp.baomidou.com
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* 相当于顶部的:
* {@code @MapperScan("com.houpu.springboot.module.*.mapper*")}
* 这里可以扩展,比如使用配置文件来配置扫描Mapper的路径
*/
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
scannerConfigurer.setBasePackage("com.houpu.zy.module.*.mapper*");
return scannerConfigurer;
}
}
step8、编写controller代码,测试通过。
修改SysAdminController.java内容如下:
package com.houpu.zy.module.contest.web;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.houpu.zy.module.contest.entity.SysAdmin;
import com.houpu.zy.module.contest.service.SysAdminService;
/**
*
* 前端控制器
*
*
* @author huahao
* @since 2018-07-18
*/
@Controller
@RequestMapping("/sysAdmin")
public class SysAdminController {
@Autowired
private SysAdminService sysAdminService;
@RequestMapping("user")
public String user(Model model) {
Wrapper wrapper = new QueryWrapper();
List SysAdminList = sysAdminService.selectList(wrapper);
model.addAttribute("SysAdminList", SysAdminList);
return "contest/user";
}
}
启动项目,浏览器访问:http://localhost:8080/springboot/sysAdmin/user,成功显示。
至此,springboot集成mybatis-plus完成。
基于mybatis-plus的项目代码在下方网盘
链接: https://pan.baidu.com/s/1MTrqZm-H30f1S6H5K9gdsg 密码: ttw5
总结
全文共讲述了3个阶段的变化
其中,到第二阶段已经是ssm框架都集成了.
第三阶段中mybatis-plus已经包含mybatis的包,并扩展了通用dao、通用service、分页、代码生成器。
全文较长,但是是从第一步一点点增加上来的,大家可以看到每次新增的配置或代码是做什么用的,网上大多数教程都是贴代码或者贴部分代码,导致绕每多弯路,相信我这个教程还算是不错的。
最后,我本人也是在学习springboot、springcloud中,毕竟早就已经到了分布式时代了。
作者:默非默,QQ:3094759846