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下的test.html可以无需添加后缀.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值