1. SpringBoot高级用法
1.1 SpringBoot热部署
1.1.1 热部署说明
每次修改代码修改之后,需要手动的重启服务器. 在开发阶段 能否有一种高效的机制. 每次修改代码之后程序自动重启
1.1.2 添加jar包文件
<!--SpringBoot核心机制: "开箱即用"
只需导入特定的jar包文件 则可以直接使用其中的功能
根本原因: SpringBoot是对框架的简化,内部进行了扩展,无需程序员操作.
-->
<!--支持热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
1.1.3 配置IDEA
触发机制: 程序的代码被修改了之后需要重启,需要配置IDEA自动的编译代码触发修改的状态.
组合键: ctrl + shift + alt + / 或者 ctrl + alt + a
展现效果:
勾选自动的运行:
1.2 lombok插件使用
1.2.1 安装插件
1.2.2 添加jar包
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 1
- 2
- 3
- 4
- 5
1.2.3 lombok作用
作用: 简化用户创建**实体对象(POJO)**的过程,由插件自动的完成实体对象中常用方法的构建(get/set/toString/构造等)
代码:
1.2.4 UserController测试
1.2.5 Lombok链式加载
//注解的作用: 动态的生成get/set/toString....方法 @Data //一般为属性赋值 get/set方法 @NoArgsConstructor //无参构造 @AllArgsConstructor //全参构造 @Accessors(chain = true) //开启链式加载(重写set方法) public class User {
<span class="token keyword">private</span> Integer id<span class="token punctuation">;</span> <span class="token keyword">private</span> String name<span class="token punctuation">;</span> <span class="token keyword">private</span> Integer age<span class="token punctuation">;</span> <span class="token keyword">private</span> String sex<span class="token punctuation">;</span> <span class="token comment">//this 代表当前的对象</span>
/* public User setId(Integer id){
this.id = id;
return this;
}
public User setName(String name){
this.name = name;
return this;
}*/</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
1.2.6 Lombok面试题
思考: lombok使用需要安装插件.
问:在Linux系统中运行项目 是否需要提前安装插件?
答案: 不要
原因: lombok在编译期有效, 由xxx.java文件 编译为xxx.class文件时,已经动态添加了set/get等方法.所以在项目发布的时候( xxx.class文件组成的xxx.jar) ,所以不需要安装lombok环境
1.3 SpringBoot测试环境说明
1.3.1 需求说明
现在调用流程:
UserController-------->UserService中的方法-----获取返回值!!!
需求:
由于编辑UserController的同事 老婆生孩子没来,导致Controller的方法没有编辑,则导致自己写的Service不知对错,暂时无法测试!!!
解决方案: SpringBoot由于开发中需要经常编译测试方法,为了降低代码联调的代价.则SpringBoot提供了专门用于测试的注解 @SpringBootTest
1.3.2 @SpringBootTest用法
注解说明: 如果测试方法中添加了该注解,则当执行@Test注解方法时,则Spring容器将会启动,启动之后将所有需要依赖注入的信息完整构建.之后用户有针对性的挑选需要测试的代码 测试即可.
1.3.3 测试类入门案例
1.4 Spring容器内存结构
1.4.1 SpringBoot加载器顺序
- 当用户点击main方法时启动程序.(开始)
- SpringBoot程序开始加载主启动类上边的注解@SpringBootApplication(SpringBoot内部运行机制开始执行)
- 当SpringBoot程序开始执行,则会动态的获取当前主启动类的包路径.(com.jt)
- 通过包扫描的机制 将特定的注解标识的类(Controller/Service/Dao).交给Spring容器管理.
- Spring容器维护的是一个Map集合 <K,V>
key: 类名首字母小写 userController
value: 实例化的对象
例子: Map<userController,UserController的对象> - 当对象创建时(实例化),遇到@Autowired 则需要依赖注入对象,当整个Spring容器内部都没有该对象时,则会报错 注入失败. 如果Map中维护了需要注入的对象,.则@Autowired 注入成功, 则最终对象实例化正常.
- 当上述的操作都运行成功之后则spring容器启动成功,等待用户的调用.
1.5 SpringBoot整合Mybatis
1.5.1 创建项目
1.5.2 添加jar包
<!--1.parent标签--> <!--集中定义版本号--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span><span class="token number">2.</span>添加依赖项<span class="token operator">--</span><span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>依赖<span class="token operator">:</span> 项目中需要添加什么功能<span class="token punctuation">,</span>则依赖什么jar包<span class="token punctuation">.</span>-<span class="token operator">-</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependencies<span class="token punctuation">></span></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>引入SpringMVC功能<span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>spring<span class="token operator">-</span>boot<span class="token operator">-</span>starter<span class="token operator">-</span>web<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>SpringBoot的测试功能<span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>spring<span class="token operator">-</span>boot<span class="token operator">-</span>starter<span class="token operator">-</span>test<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>scope<span class="token punctuation">></span></span>test<span class="token operator"><</span><span class="token operator">/</span>scope<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>SpringBoot核心机制<span class="token operator">:</span> <span class="token string">"开箱即用"</span> 只需导入特定的jar包文件 则可以直接使用其中的功能 根本原因<span class="token operator">:</span> SpringBoot是对框架的简化<span class="token punctuation">,</span>内部进行了扩展<span class="token punctuation">,</span>无需程序员操作<span class="token punctuation">.</span> <span class="token operator">--</span><span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>支持热部署 <span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>spring<span class="token operator">-</span>boot<span class="token operator">-</span>devtools<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>引入插件lombok 自动的set<span class="token operator">/</span>get<span class="token operator">/</span>构造方法插件 <span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>projectlombok<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>lombok<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>引入数据库驱动 <span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>mysql<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>mysql<span class="token operator">-</span>connector<span class="token operator">-</span>java<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>scope<span class="token punctuation">></span></span>runtime<span class="token operator"><</span><span class="token operator">/</span>scope<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>springBoot数据库连接 <span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>spring<span class="token operator">-</span>boot<span class="token operator">-</span>starter<span class="token operator">-</span>jdbc<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>spring整合mybatis 暂时 <span class="token operator">--</span><span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <span class="token generics function"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>mybatis<span class="token punctuation">.</span>spring<span class="token punctuation">.</span>boot<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>mybatis<span class="token operator">-</span>spring<span class="token operator">-</span>boot<span class="token operator">-</span>starter<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span> <span class="token generics function"><span class="token punctuation"><</span>version<span class="token punctuation">></span></span><span class="token number">2.2</span><span class="token number">.0</span><span class="token operator"><</span><span class="token operator">/</span>version<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>dependencies<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span><span class="token number">3.</span>添加build标签<span class="token operator">--</span><span class="token operator">></span> <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span>该插件是SpringBoot项目打包时必须添加的<span class="token punctuation">.</span> 如果没有该插件 则导致jar包不能运行
–>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.1</version>
</plugin>
</plugins>
</build>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
1.5.3 编辑主启动类
1.5.4 编辑POJO对象
1.5.5 编辑Mapper接口
1.5.6 编辑测试类
注意主启动的包路径
1.5.7 编辑Mapper配置文件
<?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"> <!--语法:namespace="接口的路径" --> <mapper namespace="com.jt.mapper.UserMapper"> <!--规定: 乌龟的屁股 要求: 如果对象中的属性与数据库表中的字段一一对映射时,使用resultType 如果对象中的属性与数据库表中的字段不对映射时,使用resultMap 一般条件下,单表查询一般使用resultType,多表关联查询时使用resultMap 注意事项: 不能添加;号 版本冲突严重 mysql Oracle中 --> <!--id必须与接口方法名称一致--> <!--别名包可以简化resultType写法 只写类名--> <select id="findAll" resultType="User"> select * from user </select>
<span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> 关于驼峰规则说明<span class="token operator">:</span> 需求<span class="token operator">:</span> 字段<span class="token operator">:</span> user_id<span class="token punctuation">,</span>user_name 属性<span class="token operator">:</span> userId<span class="token punctuation">,</span> userName 作用<span class="token operator">:</span> 可以自动的识别中间的<span class="token string">"_"</span>按照驼峰规则实现单表的映射<span class="token punctuation">.</span> <span class="token operator">--</span><span class="token operator">></span>
<!– <resultMap id=“userRM” type=“User”>
<!–设定主键–>
<id column=“user_id” property=“userId”></id>
<result column=“user_name” property=“userName”></result>
</resultMap>–>
</mapper>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
1.5.8 编辑YML配置文件
server:
port: 8090
#spring整合数据源 最快的数据源
spring:
datasource:
#使用高版本驱动时使用cj
#serverTimezone=GMT%2B8 东8区 %2B +号
#&useUnicode=true&characterEncoding=utf8 是否开启unicode编码/utf-8
#&autoReconnect=true 断线是否重连
#&allowMultiQueries=true 是否允许批量操作
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
#如果密码以数字0开头,则使用""号包裹 “0123456”
password: root
#SpringBoot整合Mybatis配置
mybatis:
#设置别名包
type-aliases-package: com.jt.pojo
#加载映射文件
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
1.6 导入数据库
1.6.1 SqlYog工具说明
该版本是绿色版本,所以不需要安装 直接运行即可
编辑用户名和密码
1.6.2 数据库导入/导出
1.7 SpringBoot整合Mybatis核心
1.7.1 编辑jar包
当SpringBoot 程序启动时.会加载pom.xml文件中指定的jar包文件. 根据开箱即用的原则 则开始执行Mybatis代码
<!--spring整合mybatis 暂时 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
1.7.2 编辑YML配置文件
SpringBoot程序加载jar包文件之后,通过YML配置文件实现数据的填充.配置Mybaits相关信息.
#SpringBoot整合Mybatis配置
mybatis:
#设置别名包
type-aliases-package: com.jt.pojo
#加载映射文件
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
1.7.3 为接口创建代理对象
1.7.4 编辑测试类
@SpringBootTest public class TestMybatis {
<span class="token comment">//明确:注入一定是对象</span> <span class="token comment">//SpringBoot为了整合mybatis,简化代码结构 Spring动态的为Mybatis的接口</span> <span class="token comment">//创建代理对象</span> <span class="token comment">//代理: 根据原有对象的模型,在运行期动态创建了一个一模一样功能的实例化对象</span> <span class="token comment">//案例: 孙悟空(接口)/克隆一个一模一样的对象</span> <span class="token annotation punctuation">@Autowired</span> <span class="token keyword">private</span> UserMapper userMapper<span class="token punctuation">;</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testFind</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>userMapper<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> List<span class="token generics function"><span class="token punctuation"><</span>User<span class="token punctuation">></span></span> userList <span class="token operator">=</span> userMapper<span class="token punctuation">.</span><span class="token function">findAll</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>userList<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18