# girl **Repository Path**: tinygg/girl ## Basic Information - **Project Name**: girl - **Description**: spring boot 学习笔记 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-03-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1.启动spring boot的三种方式 A.IDEA 自带的启动 B.mvn spring-boot:run C.mvn install 安装生成jar包 cd target java -jar demo-0.0.1-SNAPSHOT.jar 2.属性文件=>yml A.更方便(同一个东西的前部分可以缩略) application.properties ->application.yml server.port=8081 server.context-path=/girl => server: port: 8081 context-path: /girl B.可以通过Value注解获取 server: port: 8081 context-path: /girl age: 18 sex: girl ######################################## ... @RestController public class HelloController { @Value("${sex}") private String sex; @Value("${age}") private Integer age; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String say(){ return "Hello Spring boot..."; } } ######################################## C.注解可以引用注解 server: port: 8081 context-path: /girl age: 18 sex: girl content: "this's a ${sex} and age is ${age}." ######################################## @RestController public class HelloController { @Value("${sex}") private String sex; @Value("${age}") private Integer age; @Value("${content}") private String content; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String say() { return "Hello Spring boot..." + age + sex + content; } } ######################################## D.通过注解可以将配置文件映射成一个对象 ######################################## server: port: 8081 context-path: /girl age: 18 sex: girl-dev content: "this's a ${sex} and age is ${age}." girl: age: 18 sex: girl content: "===this's a ${sex} and age is ${age}." ### @Component @ConfigurationProperties(prefix = "girl") public class GirlProperties { private String sex; private Integer age; private String content; public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } ### @RestController public class HelloController { @Value("${sex}") private String sex; @Value("${age}") private Integer age; @Value("${content}") private String content; @Autowired private GirlProperties girlProperties; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String say() { return "Hello Spring boot..." + age + sex + content+ girlProperties.getContent(); } } ######################################## E.注解可以通过运行参数修改 java -jar demo-0.0.1-SNAPSHOT.jar --age=19 http://127.0.0.1:8081/girl/hello 返回 Hello Spring boot...19girlthis's a girl and age is 19. 3.通过配置文件的特性可以通过运行参数切换运行环境 A.复制application.yml为application-dev.yml和application-prod.yml 同时将application.yml修改为 spring: profiles: active: dev或prod 即可达到切换运行配置文件的目的 B.通过java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev或prod 达到通过传参实现切换配置文件的目的 4.Controller注解 【注意:RestController注解等同于Controller+ResponseBody】 Mapping需返回模板路径 A.pom.xml新增依赖 org.springframework.boot spring-boot-starter-thymeleaf B.控制器 @Controller public class HelloCController { @RequestMapping(value = "/hello2", method = RequestMethod.GET) public String hello() { return "index"; } } C.使用模板(现代开发一般都是前后端分离,后端只提供REST风格的接口,使用模板会带来性能损耗,尽量不要使用) 使用thymeleft模板 在resources下新建templates目录,使用.html模板即可 ThymeLeaf模板测试

测试Controller和thymeleaf模板

>>>>thymeleaf基本使用规则<<<< ################################################################################################################# 赋值、字符串拼接 th:text="${data}",将data的值替换该属性所在标签的body。 字符常量要用引号,比如th:text="'hello world'",th:text="2011+3",th:text="'my name is '+${user.name}" 字符串拼接还有另外一种简洁的写法 内联[[]] 遍历数据 Red Chair $123 2014-12-01 2 White table $200 15-Jul-2013 选择(星号)表达式 选择表达式很像变量表达式,不过它们用一个预先选择的对象来代替上下文变量容器(map)来执行,如下: *{customer.name} 被指定的object由th:object属性定义:
... ... ...
变量表达式和星号表达有什么区别吗? 如果不考虑上下文的情况下,两者没有区别;星号语法评估在选定对象上表达,而不是整个上下文 什么是选定对象?就是父标签的值,如下:

Name: Sebastian.

Surname: Pepper.

Nationality: Saturn.

这是完全等价于:

Name: Sebastian.

Surname: Pepper.

Nationality: Saturn.

当然,美元符号和星号语法可以混合使用:

Name: Sebastian.

Surname: Pepper.

Nationality: Saturn.

基本对象 #ctx:context object #root或者#vars #locale #httpServletRequest #httpSession 功能对象 #dates:java.util.Date的功能方法类。 #calendars:类似#dates,面向java.util.Calendar #numbers:格式化数字的功能方法类。 #objects:对objects的功能类操作。 #bools:对布尔值求值的功能方法。 #arrays:对数组的功能类方法。 #lists:对lists功能类方法 #sets #maps #aggregates:对数组或者集合创建聚合的功能方法, th:text="${#aggregates.sum(o.orderLines.{purchasePrice * amount})}" #messages:在变量表达式中获取外部信息的功能类方法。 #ids:处理可能重复的id属性的功能类方法。 #strings:字符串对象的功能类,contains,startWiths,prepending/appending等等。 /* * Check whether a String is empty (or null). Performs a trim() operation before check * Also works with arrays, lists or sets */ ${#strings.isEmpty(name)} ${#strings.arrayIsEmpty(nameArr)} ${#strings.listIsEmpty(nameList)} ${#strings.setIsEmpty(nameSet)} /* * Check whether a String starts or ends with a fragment * Also works with arrays, lists or sets */ ${#strings.startsWith(name,'Don')} // also array*, list* and set* ${#strings.endsWith(name, endingFragment)} // also array*, list* and set* /* * Compute length * Also works with arrays, lists or sets */ ${#strings.length(str)} /* * Null-safe comparison and concatenation */ ${#strings.equals(str)} ${#strings.equalsIgnoreCase(str)} ${#strings.concat(str)} ${#strings.concatReplaceNulls(str)} /* * Random */ ${#strings.randomAlphanumeric(count)} 条件表达式 (if)?(then):满足条件,执行then。 (if)?(then):(else) (value)?:(defalutValue) javascript操作 标签