SpringBoot用于简化配置文件以更简单的方式整合第三方技术
<!-- 继承SpringBoot官方指定的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependencies>
<!-- 加入Web开发所需要的场景启动器 -->
<dependency>
<!-- 指定groupId和artifactId即可,版本已在父工程中定义 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
@Controller
public class HelloHandler {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "Hello SpringBoot!";
}
}
运行主启动类中的main方法启动SpringBoot程序。
限制:每次创建工程都必须联网;必须借助Spring插件。
注解名称 | 作用 |
---|---|
@SpringBootApplication | 声明一个SpringBoot程序,并使<br />@SpringBootConfiguration<br/>@EnableAutoConfiguration<br />@ComponentScan<br />等注解生效 |
@SpringBootConfiguration | 相当于@Configuration注解的重新定义 |
@Configuration | 声明一个Spring配置类 |
@Bean | 在@Configuration注解标记的类中将标记了@Bean的方法返回值对象加入IOC容器,可以对应XML配置文件中的bean标签来理解 |
@EnableAutoConfiguration | 启用自动配置 |
@AutoConfigurationPackage | 当前包下包含需要自动扫描的类 |
@ComponentScan | 指定要扫描的包 |
SpringBoot环境下常用的配置文件有两种,一种是properties属性文件,一种是yml文件。二者各有特点,语法也有很大区别,但是最终效果基本一致。
文件名:application.properties
语法格式:
xxx.xxx.xxx=xxx
yml是YAML(YAML Ain't Markup Language)语言的文件,以数据为中心,比json、xml等更适合做配置文件。
spring:
application:
name: apple
server:
port: 8181
context-path: /banana
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
实体类
public class Emp {
private Integer empId;
private String empName;
private Integer empAge;
数据库表
CREATE TABLE `table_emp` (
`emp_id` int NOT NULL AUTO_INCREMENT ,
`emp_name` varchar(100) NULL ,
`emp_age` int NULL ,
PRIMARY KEY (`emp_id`)
)
Mapper配置文件
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.springboot.mappers.EmpMapper">
<select id="selectAll" resultType="com.atguigu.springboot.bean.Emp">
select emp_id empId, emp_name empName, emp_age empAge
from table_emp
</select>
</mapper>
Mapper接口
public interface EmpMapper {
List<Emp> selectAll();
}
Service接口
@Transactional
public interface EmpService {
List<Emp> getAll();
}
Service接口实现
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public List<Emp> getAll() {
return empMapper.selectAll();
}
}
Handler中调用
@Autowired
private EmpService empService;
@ResponseBody
@RequestMapping("/getAll")
public List<Emp> getAll() {
return empService.getAll();
}
spring:
datasource:
name: mydb
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/sb_db
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath*:/mybatis/*Mapper.xml
@MapperScan("com.atguigu.springboot.mappers")
JSP是我们非常常用的视图技术了,但是SpringBoot官方并不推荐使用。因为SpringBoot框架一般是打包为Jar执行,而JSP在web工程(war包)中可以被java程序读取和识别,但是在Jar包中是比较困难的。所以需要采用其他的模板视图技术。但我们还是简单的看一下它的使用方法:
spring:
mvc:
view:
prefix: /WEB-INF/
suffix: .jsp
加入依赖
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
FreeMarker是一款模板引擎:即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
所有的模板视图技术的工作原理基本类似,也就意味着FreeMarker和JSP基本差不多。模板文件和数据模型是模板视图技术用来生成HTML页面所必须的组成部分。
数据模型(Java) + 模板文件(.ftl .jsp文件)= 输出(HTML,XML,源码文件)
JSP在Web系统中弥补了Servlet生成HTML页面的不足,但只能应用于Web系统,生成HTML页面。而FreeMarker不仅仅应用于Web系统,也可以应用于Java系统,还能生成Java, XML等文件,所以应用面更广。使用时,需要在项目pom.xml文件中增加依赖关系。
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.19</version>
</dependency>
用在SpringMVC中时需要加入对应的视图解析器
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!-- <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> -->
<property name="templateLoaderPaths">
<list>
<value>/WEB-INF/ftl/</value>
<value>classpath:/ftl/</value>
</list>
</property>
<property name="freemarkerSettings">
<props>
<prop key="defaultEncoding">UTF-8</prop>
<!-- FreeMarker默认每隔5秒检查模板是否被更新,如果已经更新了,就会重新加载并分析模板。 但经常检查模板是否更新可能比较耗时。如果你的应用运行在生产模式下,而且你预期模板不会经常更新,
则可以将更新的延迟时间延长至一个小时或者更久。 可以通过为freemarkerSettings属性设置template_update_delay达到这一目的,0
表示每次都重新加载 -->
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
p:prefix="/" p:suffix=".ftl">
<property name="cache" value="false" />
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="requestContextAttribute" value="base"></property>
<property name="order" value="0"></property>
</bean>
${...}
FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为interpolation(插值)。
<#-- 注释内容 -->
注释和HTML的注释也很相似,但是它们使用<#-- and -->来标识。不像HTML注释那样,FTL注释不会出现在输出中(不出现在访问者的页面中),因为FreeMarker会跳过它们。
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>
FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。这些标签的名字以#开头。(用户自定义的FTL标签则需要使用@来代替#)
bean.ftl文件
package ${packageName}.bean;
public class ${className} {
}
Java代码
// 创建Freemarker对象的配置对象
Configuration cfg = new Configuration();
// 设定默认的位置(路径)
cfg.setDirectoryForTemplateLoading(new File(""));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
// 数据
Map paramMap = new HashMap();
String className = "User";
paramMap.put("packageName", "com.atguigu.crowdfunding");
paramMap.put("className", className);
Template t = cfg.getTemplate("bean.ftl");
// 组合生成
Writer out = new OutputStreamWriter(new FileOutputStream(new File("User.java")), "UTF-8");
// 执行
t.process(paramMap, out);
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>
<#list users as user>
${user.name},${user_index}
</#list>
<#include "xxxx.ftl">
表达式 | 说明 |
---|---|
${Request.member.name} | 从Request域读取数据 |
${Session.member.name} | 从Session域读取数据 |
${Application.member.name} | 从Application域读取数据 |
${RequestParameters['id']} | 读取请求参数 |
${book.name?if_exists } | 用于判断如果存在,就输出这个值 |
${book.name?default(‘xxx’)} | 默认值xxx |
${book.name!"xxx"} | 默认值xxx |
${book.date?string('yyyy-MM-dd')} | 日期格式 |
s?html | 对字符串进行HTML编码 |
s?cap_first | 使字符串第一个字母大写 |
s?lower_case | 将字符串转换成小写 |
s?trim | 去掉字符串前后的空白字符 |
s?size | 获得序列中元素的数目 |
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
spring.freemarker.allow-request-override=false
spring.freemarker.allow-session-override=false
spring.freemarker.cache=true
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.enabled=true
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=true
spring.freemarker.prefer-file-system-access=false
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true
spring.freemarker.order=1
其中最重要的是spring.freemarker.suffix和spring.freemarker.template-loader-path,其他配置项可以使用默认值。
@RequestMapping("/testftl")
public String testFtl(Model model) {
model.addAttribute("message", "good news!!!");
return "target";
}
本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com