Springboot的相关的配置和技术
1、YML语法的格式问题
1.1、简单的键值对问题
K: V语法规则就是这样
注意:如果value是字符串的话 这里是不需要写""
1、如果写了""结果是什么?
eg: key2: “this is xiaobobo \n And you?”
那么他输出的内容是: this is xiaobobo 换行 And you?
2、如果你写成了’ '那么结果又是什么?
key2:‘this is xiaobobo \n And you?’
如果是单引号 他会将 后面的值 当成一个普通的字符来处理
key2:‘this is xiaobobo \n And you?’
1.2、如果传递了对象、map集合(键值对)
friends:
name: tiedan
age: 18
friends1: {name: tiedan,age: 18}
1.3、数组的写法
habbits:
- boy
- girl
- other
habbits1: [boy,girl,other]
1.4、测试图

2、配置文件模式选择的问题
说明一个问题:咋们项目的开发一般有三种模式
dev:开发模式
test:测试模式
prod:生产模式
问题产生:就是我们在做开发的时候 有可能根据不同的开发模式 来选择不同的配置文件
例子:dev 模式 我们就需要选择开发模式的配置文件
2.1、appication.properties中的文件
#激活哪一种环境(说白了 激活哪一种环境 就会自动去选择哪种环境下的配置文件
# dev test prod
spring.profiles.active=prod
2.2、就是目录结构

2.3、application.yml格式
2.3.1、第一种模式(application.yml)
1、配置主的application.yml文件
spring:
profiles:
active: prod
2、目录的结构

2.3.2、yml中的第二种写法
spring:
profiles:
active: prod
---
spring:
profiles: dev
server:
port: 9876
---
spring:
profiles: test
server:
port: 6789
---
spring:
profiles: prod
server:
port: 8787
3、SpringBoot整合SSM框架
3.1、首先是导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</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>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--使用Druid这个连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
3.2、编写application.properties文件
#给java实体取别名
mybatis.type-aliases-package=com.qf.shopping.pojo
#告诉他mapper.xml文件所在的位置
mybatis.mapper-locations=classpath:mapper/*.xml
#连接数据库的配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///1904
spring.datasource.username=root
spring.datasource.password=root
#设置连接池的类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#给应用取名字
spring.application.name=shopping-ssm
3.3、编写配置文件(AppConfig)
@SpringBootConfiguration //表示是一个配置文件
@ComponentScan(basePackages = {"com.qf.shopping"}) //这个就是原来spring配置中的扫描
@MapperScan(basePackages = {"com.qf.shopping.mapper"}) //这个是扫描 mapper接口所在的位置
public class AppConfig {
}
3.4、编写mapper
public interface UserMapper {
/**
* 通过id找到用户
* @param id
* @return
*/
User findUserById(int id);
}
3.5、编写mapper.xml文件
<!--要注意的第二点-->
<mapper namespace="com.qf.shopping.mapper.UserMapper">
<!--通过id找到用户-->
<select id="findUserById" parameterType="int" resultType="user">
select * from t_user where id=#{value}
</select>
</mapper>
3.6、编写Service的接口
public interface IUserService {
/**
* 通过id找用户
* @param id
* @return
*/
User findUserById(int id)throws Exception;
}
3.7、编写Service的实现
@Service
@Transactional
public class UserService implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
public User findUserById(int id) {
return userMapper.findUserById(id);
}
}
3.8、编写控制器
@RestController
public class UserController {
@Autowired
private IUserService userService;
/**
* 通过id找用用户
* @param id
* @return
*/
@RequestMapping("findUserById")
public UserResult findUserById(int id){
UserResult result = new UserResult();
result.setState(0); //默认是失败的
try {
User user = userService.findUserById(id);
result.setState(1);
result.setUser(user);
} catch (Exception e) {
//说明请求是失败的
result.setErrorMsg("通过id获取用户数据失败:"+e.getMessage());
}
return result;
}
}
3.9、编写返回结果集的基类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseResult {
//每一次给前端返回的状态
private int state; // 0:请求失败 1:请求成功
private String errorMsg; //错误的原因是什么
}
3.10、编写User的返回结果集
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserResult extends BaseResult{
private User user;
private List<User> users;
}
4、SpringBoot整合dbunit
4.1、测试的原理

4.2、首先就是基类的编写
public class AbstractDbunitTestCase {
private DatabaseConnection conn; //这个不是真真的数据库的连接的 封装
private File tempFile; //这个就是临时文件
private IDataSet dataSetTestData;
public AbstractDbunitTestCase(String testDataName) throws DatabaseUnitException {
dataSetTestData=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(AbstractDbunitTestCase.class.getClassLoader().getResourceAsStream(testDataName))));
}
/**
* 这个方法的作用就是初始化上面的DatabaseConnection
* @param conn1
*/
public void setConn(Connection conn1) throws DatabaseUnitException {
conn=new DatabaseConnection(conn1);
}
/**
* 备份多个包
* @param tabNames
*/
public void backManyTable(String... tabNames) throws DataSetException, IOException {
QueryDataSet dataSet = new QueryDataSet(conn);
//第二步:设置要备份的这个表
for (String tabName:tabNames) {
dataSet.addTable(tabName);
}
//接下来就是备份了
tempFile=File.createTempFile("back",".xml");
//备份
FlatXmlDataSet.write(dataSet,new FileOutputStream(tempFile));
}
/**
* 备份一张表
* @param tabName
*/
public void backOneTable(String tabName) throws IOException, DataSetException {
backManyTable(tabName);
}
/**
* 插入测试数据
*/
public void insertTestData() throws DatabaseUnitException, SQLException {
DatabaseOperation.CLEAN_INSERT.execute(conn,dataSetTestData);
}
/**
* 还原表的数据
*/
public void resumeTable() throws DatabaseUnitException, SQLException, FileNotFoundException {
IDataSet dataSet=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(new FileInputStream(tempFile))));
DatabaseOperation.CLEAN_INSERT.execute(conn,dataSet);
}
}
4.3、测试的编写
@RunWith(SpringRunner.class) //下面的注解是SpringBoot对dbunit的支持
@SpringBootTest(classes = Application.class) //和原来测试的区别(导入了SpringBoot的运行环境)
public class TestUserMapper extends AbstractDbunitTestCase {
private User exUser; //期望返回的数据
@Autowired
private DataSource dataSource;
@Autowired
private UserMapper userMapper;
public TestUserMapper() throws DatabaseUnitException {
super("testdata.xml");
}
@Before //前置通知
public void init() throws SQLException, DatabaseUnitException, IOException {
exUser=new User(10,"小波波1","111");
setConn(dataSource.getConnection());
backOneTable("t_user");
insertTestData();
}
@Test
public void testFindUserById(){
//调用方法
User acUser = userMapper.findUserById(10);
//断言(就是看请求回来的数据 和预期的数据是否一致)
Assert.assertEquals(exUser.getId(),acUser.getId());
Assert.assertEquals(exUser.getUserName(),acUser.getUserName());
Assert.assertEquals(exUser.getPassword(),acUser.getPassword());
}
/**
* 还原数据
*/
@After
public void destory() throws FileNotFoundException, DatabaseUnitException, SQLException {
resumeTable();
}
}
4.5、导包
<!--导入SpringBoot对dbunit测试的支持-->
<dependency>
<groupId>com.github.springtestdbunit</groupId>
<artifactId>spring-test-dbunit</artifactId>
<version>1.3.0</version>
<scope>test</scope>
</dependency>
<!--导入dbunit自己的包-->
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.3</version>
</dependency>
5、SpringBoot下使用thymeleaf
5.1、Thymeleaf是什么
Thymeleaf是一个模板引擎
Thymeleaf简单的跟你说 就是做开发的时候 用来显示前端页面以及数据的这样一个框架
Thymeleaf这个框架 就有点类似于 前面学习的jsp 功能主要就是页面的显示和数据的绑定
5.2、Thymeleaf能干什么
简单的说、支持很多页面模板(HTML)、以及可以实现以前jsp在页面上实现的所有功能
5.3、Thymeleaf的使用
5.3.1、导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
5.3.2、配置
# 配置模板引擎的这个前缀
spring.thymeleaf.prefix=classpath:/templates/
#配置模板引擎的访问后缀
spring.thymeleaf.suffix=.html
#配置模板引擎的这个模板的类型
spring.thymeleaf.mode=HTML5
#设置模板的内容编码
spring.thymeleaf.encoding=UTF-8
#spring.thymeleaf.content-type=text/html
#配置模板的缓存
spring.thymeleaf.cache=false
5.3.3、编写controller
/**
* 跳转到bobo这个页面去
* @return
*/
@RequestMapping("toBobo")
public String toBobo(Model model){
model.addAttribute("userName","小王子");
//放入一个对象进去
User user = new User(1, "铁蛋", "110");
model.addAttribute("user",user);
return "bobo";
}
5.3.4、编写模板页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
this is bobo page And you? <br>
<hr/>
<!--获取单个值-->
用户名是:<span th:text="${userName}"></span>
<span>xxxxx</span><br>
<!--获取对象的值-->
获取到的对象的值是:<br>
用户名: <span th:text="${user.userName}"></span><br>
密码:<span th:text="${user.password}"></span><br>
</body>
</html>
本文详细介绍了SpringBoot的YML配置语法,包括键值对、对象、Map、数组的配置方式,以及不同环境配置文件的选择。此外,还深入讲解了SpringBoot整合SSM框架、dbunit和Thymeleaf的过程,包括依赖引入、配置文件编写、代码实现等关键步骤。
4475

被折叠的 条评论
为什么被折叠?



