SpringBoot的相关的配置和技术

本文详细介绍了SpringBoot的YML配置语法,包括键值对、对象、Map、数组的配置方式,以及不同环境配置文件的选择。此外,还深入讲解了SpringBoot整合SSM框架、dbunit和Thymeleaf的过程,包括依赖引入、配置文件编写、代码实现等关键步骤。

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>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值