1.SpringBoot 加强
1.1 关于YML文件说明
说明: SpringBoot程序启动时 默认加载application.yml文件.
# 语法
: 1. key
-value结构
2.key和value之间使用
:(空格
)进行分割
#
2.YML配置文件有层级结构
server
:
port
: 8090
servlet
:
context
-path
: / #项目发布路径信息 默认条件下
/根目录
# tomcat服务器进行发布 默认发布路径地址webapps目录下
#
/ ROOT 项目路径
#
/jt JT 项目路径
1.2 为属性赋值
1.2.1 为什么需要属性赋值
说明: 通过图中可以发现,用户的数据被写死.如果后续需要修改数据,则必须修改代码.属性的耦合性高.不方便维护. 解决方案: 能否利用配置文件动态的为属性赋值.
1.2.2 利用@Value为属性赋值
1.2.2.1编辑YML配置文件
# 语法
: 1. key
-value结构
2.key和value之间使用
:(空格
)进行分割
#
2.YML配置文件有层级结构
server
:
port
: 8090
servlet
:
context
-path
: / #项目发布路径信息 默认条件下
/根目录
# tomcat服务器进行发布 默认发布路径地址webapps目录下
#
/ ROOT 项目路径
#
/jt JT 项目路径
#指定用户配置文件信息
msg
:
username
: 许三多
age
: 10
1.2.2.2利用注解取值
@RestController
public class MsgController {
@Value("${msg.username}")
private String username
;
@Value("${msg.age}")
private Integer age
;
@RequestMapping("/getMsg")
public String
getMsg() {
return "返回值结果:"+username
+":"+age
;
}
}
1.2.3批量为属性赋值
1.2.3.1需求说明
由于springBoot整合第三方框架时,可能会遇到多个属性赋值的问题.如果通过@Value的方式赋值,则代码比较繁琐.能否优化???
1.2.3.2导入jar包
<!--添加属性注入依赖
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-configuration
-processor
</artifactId
>
<optional>true</optional
>
</dependency
>
1.2.3.3实现属性赋值
package com
.jt
.controller
;
import org
.springframework
.beans
.factory
.annotation
.Value
;
import org
.springframework
.boot
.context
.properties
.ConfigurationProperties
;
import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
import org
.springframework
.web
.bind
.annotation
.RestController
;
@RestController
@ConfigurationProperties(prefix
= "msg")
public class MsgController {
private String username
;
private Integer age
;
public String
getUsername() {
return username
;
}
public void setUsername(String username
) {
this.username
= username
;
}
public Integer
getAge() {
return age
;
}
public void setAge(Integer age
) {
this.age
= age
;
}
@RequestMapping("/getMsg")
public String
getMsg() {
return "返回值结果:"+username
+":"+age
;
}
}
1.3 指定配置文件为属性赋值
1.3.1 关于YML配置文件说明
YML配置文件一般都保存的是第三方框架的整合配置,如果需要进行业务配置时,最好的方式应该指定pro文件.
1.3.2定义pro文件
#key
=value
#pro文件都是字符串信息 所以不需要添加
""号
msg
.username2
=奥特曼
msg
.age2
=18
1.3.3实现属性赋值
package com
.jt
.controller
;
import org
.springframework
.beans
.factory
.annotation
.Value
;
import org
.springframework
.context
.annotation
.PropertySource
;
import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
import org
.springframework
.web
.bind
.annotation
.RestController
;
@RestController
@PropertySource
(value
= "classpath:/properties/msg.properties",
encoding
="UTF-8")
public class MsgController2 {
@Value("${msg.username2}")
private String username
;
@Value("${msg.age2}")
private Integer age
;
@RequestMapping("/getMsg2")
public String
getMsg2() {
return username
+ ":" + age
;
}
}
1.4 热部署工具
说明:当程序代码修改之后,tomcat服务器可以自动的部署
<!--支持热部署
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-devtools
</artifactId
>
</dependency
>
1.5 YML配置文件环境切换
1.5.1 需求说明
开发程序时,可能会在生成环境下和测试环境中不停地切换. 如果频繁的修改YML配置文件,则可能导致错误. 可以使用YML中环境切换解决该问题. 环境配置的要求: 环境中配置的内容必须"一致的"
1.5.2YML配置文件说明
# 语法
: 1. key
-value结构
2.key和value之间使用
:(空格
)进行分割
#
2.YML配置文件有层级结构
#指定默认的环境策略
spring
:
profiles
:
active
: test
---
spring
:
profiles
: prod
server
:
port
: 8090
servlet
:
context
-path
: / #项目发布路径信息 默认条件下
/根目录
# tomcat服务器进行发布 默认发布路径地址webapps目录下
#
/ ROOT 项目路径
#
/jt JT 项目路径
#指定用户配置文件信息
msg
:
username
: 许三多
age
: 10
--- #表示配置文件环境的分割
spring
:
profiles
: test
server
:
port
: 8080
servlet
:
context
-path
: /test #项目发布路径信息 默认条件下
/根目录
msg
:
username
: 许三多
age
: 10
1.6 引入lombok
1.6.1引入jar包
<!--引入插件lombok 自动的set
/get
/构造方法插件
-->
<dependency>
<groupId>org
.projectlombok
</groupId
>
<artifactId>lombok
</artifactId
>
</dependency
>
1.6.2安装lombok
1.6.3 校验
1.6.4 lombok案例
1.7 知识小节
1.7.1配置文件写法
1.YML文件写法 层级关系 空格 连接符:号 注意缩进. 2.pro文件 本身都是字符串不需要添加""号 注意字符集编码iso-8859-1 转化为utf-8 重新编辑.
1.7.2为属性赋值
目的:动态配置属性信息. 方式2: 取值前提: 先赋值,再取值 1.@value spel表达式 2@ConfigurationProperties(prefix = “msg”) 一般配合@data注解. 指定配置文件进行加载. @PropertySource(“classpath:/xxxxxxxx.properties”)
1.7.3环境切换
通过—实现配置文件分割spring.profiles: prod 定义环境名称spring.profiles.active: prod 指定默认的环境 注意缩进!!!
1.7.4lombok环境插件配置
面试题: lombok:可以自动的生成get/set等方法.但是使用lombok时需要安装插件!!! 问题:如果要在Linux系统中运行java项目.是否需要安装lombok插件??? 不需要!!! 答: lombok在程序编译期有效,当程序由.java文件编译为.class文件时,lombok插件开始工作.动态生成了get/set等方法. 而Linux中运行的项目直接.jar包文件里边包含了.class类型文件.所以不需要lombok插件再次编译即可运行.
2.导入数据库
2.1导入jtdb的sql文件
2.1.1 文件位置
2.1.2编辑sqlYog
2.1.3导入数据库
说明:利用sqlYog的方式导入sql. 导入之后,刷新数据库信息
2.1.4手动导入数据库(了解)
说明:进入数据库客户端. 命令: mysql -u root -p root 导入指令: source D:\jtdb.sql;
3.git地址
https://gitee.com/liulaoshi666/JT2002.git
4.SpringBoot整合Mybatis
4.1创建项目
4.1.1 创建项目
说明:通过maven形式创建项目
4.1.2 编辑项目名称
4.1.3 添加继承/依赖/插件
说明:编辑pom.xml文件 添加上述操作.
<!--parent标签作用
:管理所有被springBoot整合之后的jar包的版本定义 springBoot特点
: 开箱即用 引入jar包就可以添加相对应的功能
.
定义了当前springBoot2
.3.1所有的相关依赖的版本号信息
. -->
<parent>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-parent
</artifactId
>
<version>2.3.1.RELEASE
</version
>
<relativePath
/> <!-- lookup parent from repository
-->
</parent
>
<properties>
<java.version>1.8</java
.version
>
<!--指定插件版本
-->
<maven
-jar
-plugin
.version
>3.1.1</maven
-jar
-plugin
.version
>
<!--跳过测试类打包
-->
<skipTests>true</skipTests
>
</properties
>
<dependencies>
<!--在webjar包的内部关联整合了所有的springMVC的jar包信息
. 所以只需要引入一个jar包
,则可以关联整合所有的有关mvc的依赖包信息
-->
<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
>
<!--添加属性注入依赖
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-configuration
-processor
</artifactId
>
<optional>true</optional
>
</dependency
>
<!--支持热部署
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-devtools
</artifactId
>
</dependency
>
<!--引入插件lombok 自动的set
/get
/构造方法插件
-->
<dependency>
<groupId>org
.projectlombok
</groupId
>
<artifactId>lombok
</artifactId
>
</dependency
>
</dependencies
>
<!--负责项目打包 更新 maven操作相关的配置 必须添加
-->
<build>
<plugins>
<plugin>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-maven
-plugin
</artifactId
>
</plugin
>
</plugins
>
</build
>
4.1.4 更新项目
4.2 SpringBoot整合Mybatis
4.2.1 添加jar包文件
<!--引入数据库驱动
-->
<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
>
4.2.2 关于配置文件说明
spring
:
datasource
:
driver
-class-name
: com
.mysql
.cj
.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
serverTimezone=GMT%2B8 东8区 useUnicode=true&characterEncoding=utf8 使用指定的字符集编码 &autoReconnect=true 数据库连接断开之后,是否自动重连 &allowMultiQueries=true 是否允许批量操作sql语句. 一般查询居多 允许
4.2.3编辑YML配置文件
server
:
port
: 8090
servlet
:
context
-path
: /
spring
:
datasource
:
driver
-class-name
: com
.mysql
.cj
.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
4.2.4编辑UserMapper映射文件
<?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.mapper.UserMapper">
<!--
resultType
="包名.类名" 如果配置了别名包则可以自动的拼接
.
-->
<!-- <select id
="findAll" resultType
="User">
select
* from user
</select
>
关于驼峰映射说明
:
字段信息
:
user_id
, user_age
, user_name
对象属性
:
userId
, userAge
,userName
如果需要实现属性与字段的映射
,则必须开启驼峰规则
.
字段信息
~~~user_id
~~~~~去掉_线
~~~~~之后首字母大写
~~~~userId
改名字可以与对象的属性映射
.
注意事项
: 如果一旦开启驼峰规则映射
,则必须按照要求执行
.
字段
:user_id 不能映射 属性
:user_id
-->
</mapper
>
4.2.5测试代码
package com
.jt
.test
;
import java
.util
.List
;
import org
.junit
.jupiter
.api
.Test
;
import org
.springframework
.beans
.factory
.annotation
.Autowired
;
import org
.springframework
.boot
.test
.context
.SpringBootTest
;
import com
.jt
.mapper
.UserMapper
;
import com
.jt
.pojo
.User
;
@SpringBootTest
public class TestMybatis {
@Autowired
private UserMapper userMapper
;
@Test
public void findAll() {
List
<User> userList
= userMapper
.findAll();
System
.out
.println(userList
);
}
}
5 MybatisPlus(MP)
5.1 MybatisPlus 介绍
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
5.2 MP的特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere ) 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
5.3 历史背景
问题1: 现在操作的数据库任然采用 sql语句的方式进行编辑. 操作sql的方式实质就是面对过程的操作方式. 需求: 由于传统的sql 开发效率低,并且无论多么简单的sql都需要程序员自己编辑.很繁琐(无趣). 想法: 能否以面向对象的方式操作数据库!!!
5.4 JPA说明
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
核心理念: 以面向对象的方式操作数据库.
5.5 MybatisPlus实现原理
核心: 1. 表与对象建立关联关系 对象名称 ---------> 表名 对象的属性 -------> 数据表中的字段. 2. 采用第三方接口 规范所有的单表操作规则.(封装思想) 3. 将CURD接口方法,必须按照sql的规范转化为指定的sql语句.
理论依据: userMapper.insert(user); //程序员只写到这里. sql: insert into 表名(字段名…) values (属性值…); 按照用户的调用发方法,动态拼接sql.之后交给Mybatis去执行. 拼接sql: insert into user表(字段A,字段B,字段C…) values (属性值A,属性B,属性C…);
5.6 MP入门案例
5.6.1 导入jar包
<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
>
<groupId>com
.jt
</groupId
>
<artifactId>springBootDemo2
</artifactId
>
<version>0.0.1-SNAPSHOT
</version
>
<!--parent标签作用
:管理所有被springBoot整合之后的jar包的版本定义 springBoot特点
: 开箱即用 引入jar包就可以添加相对应的功能
.
定义了当前springBoot2
.3.1所有的相关依赖的版本号信息
. -->
<parent>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-parent
</artifactId
>
<version>2.3.1.RELEASE
</version
>
<relativePath
/> <!-- lookup parent from repository
-->
</parent
>
<properties>
<java.version>1.8</java
.version
>
<!--指定插件版本
-->
<maven
-jar
-plugin
.version
>3.1.1</maven
-jar
-plugin
.version
>
<!--跳过测试类打包
-->
<skipTests>true</skipTests
>
</properties
>
<dependencies>
<!--在webjar包的内部关联整合了所有的springMVC的jar包信息
. 所以只需要引入一个jar包
,则可以关联整合所有的有关mvc的依赖包信息
-->
<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
>
<!--添加属性注入依赖
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-configuration
-processor
</artifactId
>
<optional>true</optional
>
</dependency
>
<!--支持热部署
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-devtools
</artifactId
>
</dependency
>
<!--引入插件lombok 自动的set
/get
/构造方法插件
-->
<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
-plus
-->
<dependency>
<groupId>com
.baomidou
</groupId
>
<artifactId>mybatis
-plus
-boot
-starter
</artifactId
>
<version>3.2.0</version
>
</dependency
>
</dependencies
>
<!--负责项目打包 更新 maven操作相关的配置 必须添加
-->
<build>
<plugins>
<plugin>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-maven
-plugin
</artifactId
>
</plugin
>
</plugins
>
</build
>
</project
>
5.6.2 配置User对象
package com
.jt
.pojo
;
import com
.baomidou
.mybatisplus
.annotation
.IdType
;
import com
.baomidou
.mybatisplus
.annotation
.TableField
;
import com
.baomidou
.mybatisplus
.annotation
.TableId
;
import com
.baomidou
.mybatisplus
.annotation
.TableName
;
import lombok
.Data
;
import lombok
.experimental
.Accessors
;
@Data
@Accessors(chain
= true)
@TableName
public class User {
@TableId(type
= IdType
.AUTO
)
private Integer id
;
private String name
;
private Integer age
;
private String sex
;
}
5.6.3 继承BaseMapper接口
5.6.4 修改YML配置文件
5.6.5 MP入门案例
@SpringBootTest
public class TestMybatis {
@Autowired
private UserMapper userMapper
;
@Test
public void findAll() {
List
<User> userList
= userMapper
.selectList(null
);
System
.out
.println(userList
);
}
}
5.6.6 开启日志
server
:
port
: 8090
servlet
:
context
-path
: /
spring
:
datasource
:
#数据库驱动 高版本 com
.mysql
.cj
.jdbc
.Driver
#低版本 com
.mysql
.jdbc
.Driver
#driver
-class-name
: com
.mysql
.cj
.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
#引入mybatisplus配置
mybatis
-plus
:
#定义别名包
type
-aliases
-package: com
.jt
.pojo
#添加映射文件
mapper
-locations
: classpath
:/mybatis
/mappers
日志展现情况:
5.7 MybatisPlus API说明
5.7.1查询测试
@Test
public void insert() {
User user
= new User();
user
.setName("MybatisPlus入门")
.setAge(18)
.setSex("女");
userMapper
.insert(user
);
System
.out
.println("入库成功!!!");
}
@Test
public void select01() {
User user
= userMapper
.selectById(53);
System
.out
.println(user
);
}
@Test
public void select02() {
User user
= new User();
user
.setName("孙尚香")
.setSex("女");
QueryWrapper
<User> queryWrapper
= new QueryWrapper<>(user
);
List
<User> userList
= userMapper
.selectList(queryWrapper
);
System
.out
.println(userList
);
QueryWrapper
<User> queryWrapper2
= new QueryWrapper<User>();
queryWrapper2
.eq("name", "孙尚香")
.eq("sex", "女");
List
<User> userList2
= userMapper
.selectList(queryWrapper2
);
System
.out
.println(userList2
);
}
@Test
public void select03() {
QueryWrapper
<User> queryWrapper
= new QueryWrapper<User>();
queryWrapper
.lt("age", 18)
.or()
.gt("age", 100);
List
<User> userList
= userMapper
.selectList(queryWrapper
);
System
.out
.println(userList
);
}
@Test
public void select04() {
List
<Integer> list
= new ArrayList<>();
list
.add(1);
list
.add(3);
list
.add(6);
List
<User> userList
= userMapper
.selectBatchIds(list
);
QueryWrapper
<User> queryWrapper
= new QueryWrapper<User>();
queryWrapper
.in("id", 1,3,4,5);
userMapper
.selectList(queryWrapper
);
}
@Test
public void select05() {
QueryWrapper
<User> queryWrapper
= new QueryWrapper<User>();
queryWrapper
.between("字段", "值1", "值2");
queryWrapper
.like("name","精");
queryWrapper
.likeRight("name","精");
}
6.作业
将MP的常规操作掌握.