1.SpringBoot 高级用法

1.1 为属性赋值操作

1.1.1 业务需求说明

说明: 当程序中出现了频繁变化的数据时,如果采用人为的方式进行修改并且编译打包则导致代码的耦合性较高.不便于维护.所以能否为属性动态赋值.
image.png

1.1.2 关于YML文件说明

# YML文件语法
 # 1. key:(空格) value
 # 2. key与key之间有层级缩进关系
server:
  port: 8090
# 属性赋值操作,编辑属性时注意前缀. 只要springboot启动该数据就会被写入内存中 key-value格式
redis:
  host: 192.168.126.130
  port: 6379

1.1.3 为属性赋值操作

//动态获取ip和端口数据
//@ResponseBody 作用1: 将对象转化为JSON 作用2: 如果返回值是String类型,则返回字符串本身
// 作用3: 一般客户端发起ajax请求时,采用该注解返回数据, 将不会执行视图解析器操作
@RestController
public class RedisController {
    @Value("${redis.host}")  //spel表达式
 private String host; //="192.168.126.129";
 @Value("${redis.port}")
    private Integer port; //=6379;
    //指定yml文件进行赋值
@RequestMapping("/getMsg")
public String getMsg(){
    return host+":"+port;
}

1.2 指定配置文件为属性赋值

说明: 由于YML配置文件中的数据一般都是系统级别的数据,所以一般的业务数据都会写到properties的配置文件中.
image.png

1.2.2 编辑RedisController

//动态获取ip和端口数据
//@ResponseBody 作用1: 将对象转化为JSON 作用2: 如果返回值是String类型,则返回字符串本身
// 作用3: 一般客户端发起ajax请求时,采用该注解返回数据, 将不会执行视图解析器操作
@RestController
//动态的导入pro配置文件,交给spring容器进行加载.
@PropertySource("classpath:/properties/redis.properties")
public class RedisController {
    @Value("${redis.host}")  //spel表达式
 private String host; //="192.168.126.129";
 @Value("${redis.port}")
    private Integer port; //=6379;
 @Value("${pro.redis.host}")
    private String proHost;
 @Value("${pro.redis.port}")
    private String proPort;
 //指定yml文件进行赋值
 @RequestMapping("/getMsg")
    public String getMsg(){
        return host+":"+port;
 }
    //指定properties文件进行赋值
 @RequestMapping("/getProp")
    public String getProp(){
        return proHost+":"+proPort;
 }
}

1.3 环境切换

业务说明:由于开发时都是链接公司自己的数据库/服务器等.把这个环境称之为"开发环境."
当开发完成之后需要进行上线部署,则需要链接"生产环境"
如果频繁的切换环境,则导致项目由于修改错误,导致问题的发生.
项目优化: 能否提供一种策略.简化上述操作的开发过程.

#第一份配置文件,用来指定默认的环境标识
spring:
  profiles:
    active: dev
---
# YML文件语法
#  1. key:(空格)  value
#  2. key与key之间有层级的缩进关系.
#指定环境的名称
spring:
  profiles: dev
# YML文件语法
 # 1. key:(空格) value
 # 2. key与key之间有层级缩进关系
server:
  port: 8090
# 属性赋值操作,编辑属性时注意前缀. 只要springboot启动该数据就会被写入内存中 key-value格式
redis:
  host: 192.168.126.130
  port: 6379
#分割符号将环境一分为二
---
spring:
  profiles: prod
server:
  port: 9000
#属性赋值操作
redis:
  host: 111.122.122.122
  port: 7000

1.4 关于lombok说明

1.4.1 添加jar包

image.png

1.4.3 问题

说明:如果需要使用lombok工具就必须提前安装插件.如果在上线的时候Linux系统中,是否需要提前安装lombok插件?? 不需要安装.
image.png
原因: lombok插件在编译器有效. 将.java文件编译为.class文件时lombok会动态的添加get/set/toString…等方法.添加到.class文件中.
Linux上线部署时运行的时.jar文件 .jar包含的文件(.class文件)

1.4.4 小结

1.属性赋值的操作 @Value("${}")
2.动态导入资源文件 @PropertySource(“classpath:/properties/redis.properties”)
3.环境的切换 —, spring.profiles: dev ,默认的选项
4.lombok常用操作

2.SpringBoot整合Mybatis

2.1导入jt.sql的数据库

2.2.1 准备数据库工具

image.png

2.2.2 链接数据库

image.png
image

2.2.3 添加jar包文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent> <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.3.4.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.jt</groupId>
 <artifactId>springboot_demo2_mybatis</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>springboot_demo2_mybatis</name>
 <description>Demo project for Spring Boot</description>
 <properties> <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency> <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 </dependency> <!--引入数据库驱动 -->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <scope>runtime</scope>
 </dependency> <!--springBoot数据库连接 -->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
 </dependency> <!--spring整合mybatis 暂时 -->
 <dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>1.3.2</version>
 </dependency> <dependency> <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </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> </dependencies>
 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin> </plugins> </build>
</project>

2.2.4 编辑POJO对象

@Data
@Accessors(chain = true)
public class User implements Serializable {
    private Integer id;
 private String name;
 private Integer age;
 private String sex;
}

2.2.5 编辑 YML文件

server:
  port: 8090
  servlet:
    context-path: /
spring:
  datasource:
    #driver-class-name: com.mysql.jdbc.Driver
 url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
mybatis:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
 configuration:
    map-underscore-to-camel-case: true
关于数据库url说明

1.时区设定
serverTimezone=GMT%2B8 %2B= +号
2.编码格式设定
useUnicode=true&characterEncoding=utf8
3.是否自动的重新链接
autoReconnect=true
4.是否允许批量操作
allowMultiQueries=true

关于Mybatis配置说明

mybatis:
  #定义别名包
  type-aliases-package: com.jt.pojo    可以简化mapper映射文件的编辑
  #加载user标签的mapper文件
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
<!--
        前提:   Mybatis进行映射时必须满足属性名称一致
        业务说明:
            表:      user_id   user_name
            对象:    userId   userName

        解决方案:  开启mybatis驼峰规则映射
        原理:
            字段名称user_id~~~去除"_"线~~~userid
            ~~~~首字母大写userId~~~~~属性userId
            只要名称一致,则可以自动映射.
        注意事项:  如果开启驼峰规则,则必须满足要求.
                 问: 对象的属性user_id 与字段user_id能否映射?  不能映射

    -->

2.2.6 编辑UserDao接口

@Mapper
public interface UserDao {
    List<User> findObject();
}

关于Mapper注解优化说明

由于每个接口都需要添加Mapper注解导致代码繁琐.可以采用包扫描的方式动态导入 代码如下

@SpringBootApplication
@MapperScan("com.jt.dao") //主要告诉mapper的包路径,会自动的完成包扫描
public class SpringbootDemo2MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemo2MybatisApplication.class, args);
    }

}

2.2.7 编辑mapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.dao.UserDao">
 <select id="findObject" resultType="com.jt.pojo.User">
 select * from user
   </select>
</mapper>

2.2.8 编辑测试类

@SpringBootTest
class SpringbootDemo2MybatisApplicationTests {
   @Autowired
 private UserDao userDao;
 @Test
 void findAll() {
      List<User> list = userDao.findObject();
 System.out.println(list);
 }
}

image.png


萧渊之
41 声望20 粉丝