今天将springboot和mybatis整合了一下,记录一下自己的整合过程,都是在网上东拼西凑出来的东西,作为一个简单的demo还是可以拿来用一用的,以前在2017年12月的时候也整合过一个的,但是年代久远,而且这个期间也没有使用springboot,所以一直还停留在入门的阶段。
springboot快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat)。
这个工程主架构是springboot+mybatis,解析页面是freemark,并用了Generrator根据表名自动生成代码
工程目录接口
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>study.springboot</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- 引入 freemarker 模板依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core 代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties配置文件
############################################################
#
# freemarker配置
#
############################################################
#模板文件路径(不推荐使用)
spring.freemarker.template-loader-path=classpath:/templates
#关闭缓存即时刷新,生产环境需要改成true;
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=request
spring.freemarker.suffix=.html
############################################################
#
# 数据库 druid配置
#
############################################################
# 数据库访问配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
# 下面为连接池的补充设置,应用到上面所有数据源中
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
spring.datasource.logSlowSql=true
# 注意:对应实体类的路径,多个package之间可以用逗号
mybatis.type-aliases-package=study.springboot.demo.bean
#注意:一定要对应mapper映射xml文件的所在路径
mybatis.mapper-locations=classpath:mapper/*.xml
#sql日志输出
logging.level.study.springboot.demo.dao=debug
controller
package study.springboot.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import study.springboot.demo.entity.NovelMain;
import study.springboot.demo.service.NovelMainService;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author wangbiao
* @since 2019-07-25
*/
@Controller
@RequestMapping("/novelMain")
public class NovelMainController {
@Autowired
private NovelMainService novelMainService;
@RequestMapping("/selectNovelList")
public String selectNovelList(Model model){
List<NovelMain> novelMainList = novelMainService.selectNovelList();
model.addAttribute("novelList",novelMainList);
return "novel/novelList";
}
}
service接口
package study.springboot.demo.service;
import study.springboot.demo.entity.NovelMain;
import com.baomidou.mybatisplus.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author wangbiao
* @since 2019-07-25
*/
public interface NovelMainService extends IService<NovelMain> {
List<NovelMain> selectNovelList();
}
service实现类
package study.springboot.demo.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import study.springboot.demo.entity.NovelMain;
import study.springboot.demo.dao.NovelMainMapper;
import study.springboot.demo.service.NovelMainService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author wangbiao
* @since 2019-07-25
*/
@Service
public class NovelMainServiceImpl extends ServiceImpl<NovelMainMapper, NovelMain> implements NovelMainService {
@Autowired
private NovelMainMapper novelMainMapper;
public List<NovelMain> selectNovelList(){
return novelMainMapper.selectList(null);
}
}
dao层
package study.springboot.demo.dao;
import org.springframework.stereotype.Repository;
import study.springboot.demo.entity.NovelMain;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wangbiao
* @since 2019-07-25
*/
@Repository
public interface NovelMainMapper extends BaseMapper<NovelMain> {
}
mybatis map.xml文件
<?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="study.springboot.demo.mapper.NovelMainMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="study.springboot.demo.entity.NovelMain">
<id column="id" property="id" />
<result column="novel_name" property="novelName" />
<result column="author" property="author" />
<result column="novel_type" property="novelType" />
<result column="novel_start_time" property="novelStartTime" />
<result column="word_count" property="wordCount" />
<result column="novel_status" property="novelStatus" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="novel_pic" property="novelPic" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, novel_name, author, novel_type, novel_start_time, word_count, novel_status, create_time, update_time, novel_pic
</sql>
</mapper>
前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td>名称</td><td>作者</td><td>类型</td><td>开写时间</td>
</tr>
<#list novelList as novel>
<tr>
<td>${novel.novelName}</td>
<td>${novel.author}</td>
<td>${novel.novelType}</td>
<td>${novel.novelStartTime?string('yyyy-MM-dd HH:mm:ss')}</td>
</tr>
</#list>
</table>
</body>
</html>
代码生成器,这个地方生成map.xml文件不在resources文件夹下的mapper文件里,是在study.springboot.demo包下面的mapper文件夹里,所以生成后,还得将mapper.xml移到resources下面
package study.springboot.demo.main;
import com.baomidou.mybatisplus.enums.IdType;
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.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.sql.SQLException;
/**
* 代码生成器
*/
public class MyBatisPlusGenerator {
public static void main(String[] args) throws SQLException {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(true) // 是否支持AR模式
.setAuthor("wangbiao") // 作者
.setOutputDir("/Users/wangbiao/Documents/core/test/springbootstudy/src/main/java") // 生成路径
.setFileOverride(true) // 文件覆盖
.setEnableCache(false) //不要生成二级缓存
.setIdType(IdType.AUTO) // 主键策略
.setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I
// IEmployeeService
.setBaseResultMap(true)//生成基本的resultMap
.setBaseColumnList(true);//生成基本的SQL片段
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
.setDriverName("com.mysql.jdbc.Driver")
.setUrl("jdbc:mysql://127.0.0.1:3306/test")
.setUsername("root")
.setPassword("123456");
//3. 策略配置globalConfiguration中
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) //全局大写命名
.setDbColumnUnderline(true) // 指定表名 字段名是否使用下划线
.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
.setTablePrefix("t_")
.setInclude("t_novel_main"); // 生成的表
//4. 包名策略配置
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent("study.springboot.demo")
.setMapper("dao")//dao
.setService("service")//servcie
.setController("controller")//controller
.setEntity("entity")//entity
.setXml("mapper");//mapper.xml
//5. 整合配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig);
//6. 执行
ag.execute();
}
}
启动工程后控制台的输出
用http://localhost:8080/novelMain/selectNovelList访问页面
创建表的sql语句
CREATE TABLE `t_novel_main` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`novel_name` varchar(30) DEFAULT NULL COMMENT '小说名称',
`author` varchar(30) DEFAULT NULL COMMENT '作者',
`novel_type` varchar(11) DEFAULT NULL COMMENT '小说类型',
`novel_start_time` datetime DEFAULT NULL COMMENT '小说开始时间',
`word_count` int(11) DEFAULT NULL COMMENT '小说字数',
`novel_status` int(11) DEFAULT NULL COMMENT '小说状态,1:连载,2:完结',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`novel_pic` varchar(200) DEFAULT NULL COMMENT '小说图片',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
下面是工程的下载地址:https://download.csdn.net/download/wangbiao007/11431398
我想将它设成0分下载的,但是没有看到设置的地方,要下载的小伙伴对不起啦