再springboot学习期间,使用架构的方式搭建项目,项目创建方式参考重识maven
创建工程及子工程,并添加层级依赖,项目结构如下:
common:工具类;mapper:持久层;service:业务层;web:控制层;model:实体类
然后父工程添加依赖:
<?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> <groupId>com.zs.springboot</groupId> <artifactId>springboot817</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>model</module> <module>service</module> <module>mapper</module> <module>web</module> <module>common</module> </modules> <dependencyManagement> <dependencies> <!-- 将springboot-parent以jar包的形式导入进来,声明类型为pom文件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.22.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.22.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.45</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>1.5.22.RELEASE</version> </dependency> </dependencies> </dependencyManagement> </project>
然后给各个子工程添加层级依赖,mapper依赖model,service依赖mapper,common,controller依赖service。
因为controller,service,都是以来mapper的,因此将jar都放入mapper模块就可以,根据层级依赖的关系,controller,service也能使用jar包。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.zs.springboot</groupId> <artifactId>model</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
springboot配置mvc
在之前使用ssm框架时,配置文件都是使用xml文件编辑的,但是springboot的宗旨是干掉xml文件,使用java类来配置,如何使用呢?
首先看下之前我们的xml配置:
<mvc:annotation-driven> <mvc:message-converters> <!--配置编码字符集--> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg name="defaultCharset" value="utf-8"/> </bean> <!--格式化json--> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="prettyPrint" value="true"/> </bean> </mvc:message-converters> </mvc:annotation-driven>
上面的内容使用java配置如下:
/** * 声明这是一个配置文件 */ @SpringBootConfiguration public class SpringMvcConfig { /** * 配置编码字符集为utf-8,@Bean相当于xml文件中的bean标签 * @Bean("aaa")就像当于标签的id为aaa * @return */ @Bean public StringHttpMessageConverter stringHttpMessageConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("utf-8")); return converter; } /** * Json数据格式化 * @return */ @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setPrettyPrint(true); return converter; } }
效果:
火狐浏览器请查看原始数据,因为火狐浏览器会自动将json数据格式化
通过mapper.xml的形式实现mapper接口
需要在application.properties中进行配置:
#起别名,也可以不配置 mybatis.type-aliases-package=com.zs.springboot.model #配置xml文件路径 mybatis.mapper-locations=classpath:mapper/*.xml
配置mapper扫描器:
1.接口上添加@Mapper注解,但是如果接口多的话,每个接口都要添加
2.直接在入口类上添加mapper扫描器:
使用Thymeleaf写页面
在springboot官网中,明确表示如果使用springboot作为架构的话,默认不支持jsp,如果非要使用jsp可以手动加载配置实现jsp。
springboot默认支持Thymeleaf模板,这个模板也是java写的,使用非常方便,相当于jsp
注意:1.使用thymeleaf模板的话,在开发阶段需要关闭缓存
#配置thymeleaf关闭缓存 spring.thymeleaf.cache=false
2.添加依赖:springboot已经完整把thymeleaf集成进框架中了,可以直接添加使用不需要任何的配置信息
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>1.5.22.RELEASE</version> </dependency>
3.在之前使用jsp,需要在mvc配置文件中配置视图解析器,添加前缀后缀等, 在使用thymeleaf模板的html页面的情况下,默认在resources(相当于classpath)下的templates文件夹中进行加载,不需要配置
4.如果使用thymeleaf需要更换html的头部信息:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
5.thymeleaf是一个非常严谨的模板,和普通的html不一样,需要严格按照html的标准来实现:不能出现未闭合标签,如果不按照html的标准会报错
如果非要不遵循标准来也可以,需要在application.properties中配置: spring.thymeleaf.mode=LEGACYHTML5 导入jar包:
<dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.21</version> </dependency>
下面写thymeleaf使用例子:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"> <head> <meta charset="UTF-8"/> <title>Title</title> </head> <body> <table border="1px solid black"> <thead> <tr> <th>编号</th> <th>图书名</th> <th>价格</th> <th>类别</th> <th>操作</th> </tr> </thead> <tbody> <tr th:each="book : ${books}"> <td th:text="${book.id}"></td> <td th:text="${book.title}"></td> <td th:text="${book.price}"></td> <td th:text="${book.cateId}"></td> <td> <a href="">修改</a> <a href="">删除</a> </td> </tr> </tbody> </table> </body> </html>
th:each就相当于是jstl的c:forEach标签