IDEA搭建spring boot+maven+mybatis+热部署
没啥说的
新建项目
点击下一步
下一步
勾选spring web 和 MySQL 、Mybatis然后点击下一步
选择创建路径位置,然后finish
刚创建的项目目录结构层次太深,
点击小齿轮设置
勾选Hide Empty Middle Packages,然后目录结构就变得很明了了
配置mybatis和MySQL数据源
可以就在application.properties文件配置,也可以在同级目录下创建application.yml文件
二选其一就行
yml文件配置如下
spring:
##MySQL数据源配置
datasource:
# name: test
url: jdbc:mysql://127.0.0.1:3306/public_platform?serverTimezone=Asia/Shanghai #设置上海时区
username: root
password: root
# driver-class-name: com.mysql.jdbc.Driver
##mybatis配置
mybatis:
mapper-locations: classpath:mapper/*.xml #对应mapper映射xml文件的所在路径
type-aliases-package: com.zt.demo.entity #对应实体类路径
MySQL驱动spring boot 自动注册加载,所以无需手动配置
如果MySQL驱动用的是8.0以上的话,就必须在url后面添加时区,否则会包时区错误
然后要手动创建控制层、实体层、dao层和业务层这几个文件目录,然后里面相关的实体类、接口类、和mapper.xml可以手动创建,但是比较麻烦,推荐用MyBatis Generator自动生成这些代码类
pom.xml中添加generator插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- mybatis generator 自动生成(实体类、dao类、mapper.xml)代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<configurationFile>src/main/resources/generator/GeneratorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
然后在src/main/java/resources目录下创建generator目录,再手动创建GeneratorConfig.xml文件
文件配置大致如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- MySQL驱动的jar包路径 -->
<classPathEntry location="D:\Program Files\Maven\repository\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/public_platform" userId="root" password="root">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成实体类路径-->
<javaModelGenerator targetPackage="com.zt.demo.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapperXML路径-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO接口类的路径-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.zt.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 指定生成的表名 tableName是数据库中表名 domainObjectName是项目中实体类名-->
<table tableName="pps_user_info" domainObjectName="PPSUserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
GeneratorConfig.xml中配置的驱动包使用8.0以下的jar包,
MySQL的驱动jar包链接: https://pan.baidu.com/s/1cCrUXBrpRCiauYRo4CzMiQ 提取码: yt9v
xml配置完后,还要配置启动mybatis generator
点击最上面的Run——>Edit Configurations
添加Maven配置
将mybatis-generator:generate -e填入,确定后,右上角启动,
运行成功后,然后就可以看到四个文件类生成,里面有很多注释或其他用不到也可以自己删除,像生成的注释,可以自己在GeneratorConfig.xml中将suppressAllComments的value值改成true,就可以不自动生成注释了。
访问页面
简单测试访问
在controller层中创建一个控制器类
@Controller
public class PPSUserInfoController {
@RequestMapping(value = "/test")
public String test() {
return "test.html";
}
}
resources/static和resources/templates目录下创建 相同的test.html文件
一个写着static,一个写着static,启动,然后访问http://localhost:8080/test
会发现只会跳转到static的静态页面,如果想要访问templates下的动态页面,必须添加thymeleaf依赖
在pom.xml文件添加thymeleaf依赖
<!--只有添加thymeleaf这个依赖,才可以访问templates里的动态页面-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后重启再次访问,就可以看到这次访问的是templates下的页面
访问templates下的可以无需添加后缀.html也可以直接返回页面
调接口,返回数据给页面
在PPSUserInfoMapper.xml中添加新sql语句
<select id="getUserInfoList" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from pps_user_info
</select>
在mapper目录下的PPSUserInfoMapper类文件中添加sql接口,类上加上注解@Mapper,注意这里的接口名必须和xml.中的名字一模一样
service层中
controller层中
package com.zt.demo.controller;
import com.zt.demo.entity.PPSUserInfo;
import com.zt.demo.service.PPSUserInfoService;
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 java.util.List;
@Controller
@RequestMapping(value = "/demo")
public class PPSUserInfoController {
@Autowired
private PPSUserInfoService userInfoService;
@RequestMapping(value = "/test")
public String test() {
return "test.html";
}
@RequestMapping(value = "/getUserInfo")
public String hello(Model model){
List<PPSUserInfo> userInfoList = userInfoService.getUserInfoList();
for (PPSUserInfo user: userInfoList) {
System.out.println("姓名:"+user.getName()+"\t职务:"+user.getPosition());
}
model.addAttribute("userInfoList",userInfoList);
return "test.html";
}
}
application.yml文件添加thymeleaf模板配置
##端口配置
server:
port: 8080
spring:
##MySQL数据源配置
datasource:
# name: test
url: jdbc:mysql://127.0.0.1:3306/public_platform?serverTimezone=Asia/Shanghai #设置上海时区
username: root
password: root
# driver-class-name: com.mysql.jdbc.Driver
## thymeleaf模板配置
thymeleaf:
cache: false #缓存配置,false-修改立即生效
prefix: classpath:templates/
suffix: .html
encoding: UTF-8
mode: HTML5
servlet:
content-type: text/html
##mybatis配置
mybatis:
mapper-locations: classpath:mapper/*.xml #对应mapper映射xml文件的所在路径
type-aliases-package: com.zt.demo.entity #对应实体类路径
然后templates下的test.html要添加thymeleaf模板标签来迭代数据
<!DOCTYPE html>
<html lang="en">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<h1>templates</h1>
<table>
<thead>
<tr>
<th>姓名</th>
<th>性别</th>
<th>手机号</th>
<th>职务</th>
<th>基本工资</th>
</tr>
</thead>
<tbody th:remove="all-but-first">
<tr th:each="userInfo : ${userInfoList}">
<td th:text="${userInfo.name}"></td>
<td th:text="${userInfo.gender=='1'?'男':'女'}"></td>
<td th:text="${userInfo.mobile}"></td>
<td th:text="${userInfo.position}"></td>
<td th:text="${userInfo.contractwages}"></td>
</tr>
</tbody>
</table>
</body>
</html>
如果这里有红色波浪线,报cannot reslove无法识别的错误,应该是idea的bug问题,可以在setting里设置
找到thymeleaf下的Expression variables validation取消勾选,确定,重新启动demo,访问http://localhost:8080/demo/getUserInfo就可以看到结果页面
热部署
热启动
pom.xml文件中添加依赖devtools
<!--热启动(整个项目重启)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
application.yml中添加热启动配置
##热启动配置
spring:
devtools:
restart:
enabled: true # 设置开启热启动(不配置,默认(true)开启)
# additional-paths: src/main/java # 指定热启动更新的目录
# exclude: static/** # 指定热启动不更新的目录
idea默认不自动编译,还需设置一下,Settings——>Bulid,Execution,Deployment——>Compiler下的Build project automaticall勾选上
然后按Ctrl+Shift+alt+/,
点击Registry,找到 compiler.automake.allow.when.app.running,并勾选上
然后重启demo,这下可以改动类文件或者HTML页面上然后Ctrl+s保存(必须保存才能自动重启),就可以看到后台就会重启项目,然后刷新浏览器,就可以看到改动的地方
但是这样是整个项目重新启动,对于以后项目越来越臃肿,加载东西太多,重启一次可能太慢
热加载
使用springloaded实现热加载,下载springloaded的jar包,可去官网下载,也可以用maven下载
<!--热加载(只需加载更新修改过得文件,无需重启项目)-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.7.RELEASE</version>
</dependency>
直接给大家提供了包下载链接: https://pan.baidu.com/s/18n-Hfd4d7MIEY5NaCF1wTA 提取码: pd9y
接着配置jvm
Run——>EditConfigurations
在VM options中填入-javaagent:D:\repository\springloaded-1.2.7.RELEASE.jar -noverify
即下载后放置springloaded jar包的路径,
-javaagent在执行 main 函数之前,JVM 会先运行-javaagent所指定 jar 包,-noverify关闭 Java 字节码的校验功能
最后停用热启动配置,目前application.yml文件整个配置
##端口配置
server:
port: 8080
spring:
##MySQL数据源配置
datasource:
# name: test
url: jdbc:mysql://127.0.0.1:3306/public_platform?serverTimezone=Asia/Shanghai #设置上海时区
username: root
password: root
# driver-class-name: com.mysql.jdbc.Driver
## thymeleaf模板配置
thymeleaf:
cache: false #缓存配置,false-修改立即生效
prefix: classpath:templates/
suffix: .html
encoding: UTF-8
mode: HTML5
servlet:
content-type: text/html
##热启动配置
devtools:
restart:
enabled: false # 设置开启热启动(不配置,默认(true)开启),这里关闭热启动是因为我已用热加载替换了
# additional-paths: src/main/java # 指定热启动更新的目录
# exclude: static/** # 指定热启动不更新的目录
##mybatis配置
mybatis:
mapper-locations: classpath:mapper/*.xml #对应mapper映射xml文件的所在路径
type-aliases-package: com.zt.demo.entity #对应实体类路径
重启demo,然后修改类文件,保存,会发现,后台日志,并未重启整个项目,刷新浏览器,可以看到修改的东西
本demo源码链接: https://pan.baidu.com/s/1-O3K-qWnU3FGU7uIov4aww 提取码: ijeh