1、启动类
@SpringBootApplication //2.springBoot最为重要的入口注解
public class SpringBootRun {
/**
* 程序执行的过程:
* 1.利用main方法执行springboot启动程序.
* 2.程序加载@SpringBootApplication
* @Target(ElementType.TYPE) 当前注解对类有效
@Retention(RetentionPolicy.RUNTIME) 在运行期改注解有效
@Documented 相关文档信息
@Inherited 可以被继承
--- 上述的注解是元注解
@SpringBootConfiguration springBoot的主启动类就是一个配置类
@EnableAutoConfiguration
开箱即用:只要导入指定的jar包文件,则可以自动的实现配置!!!
@AutoConfigurationPackage //定义包扫描的路径信息 主启动类的包路径
以后写代码至少同包及子包中.
@Import(AutoConfigurationImportSelector.class) 实现了开箱即用的功能
总结: springBoot中选择器的配置.扫描pom.xml文件中的jar包文件.
之后将jar包文件中的配置予以执行.
AutoConfigurationImportSelector implements
DeferredImportSelector, BeanClassLoaderAware,
ResourceLoaderAware, BeanFactoryAware,
EnvironmentAware, Ordered
说明: Aware是Spring框架从项目启动-到项目的效果的各个时期的接口.
了解: 加载第三方的类信息
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringBootRun.class, args);
}
}
1.2、MsgController类
添加属性注入依赖–配置properties
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
MsgController
@RestController
@ConfigurationProperties(prefix="msg") //方法二
public class MsgController {
/*方法一
* @Value 表示从spring容器中动态获取数据.
* 通过spel表达式动态取值
* @Value("${msg.username}")
* private String username; //用户名
* @Value("${msg.age}")
* private Integer age; //用户名
*/
/** //方法二@ConfigurationProperties(prefix="msg") 配合lombok的@data注解
* 批量为属性赋值,必须配合set方法才能赋值
*/
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() {
//String str="springBoot测试方法";
return "返回结果:"+username+"+"+age;
}
}
热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
2.1、MsgController2
配置getMsg2
main/resources/properties/msg.propertiies中添加代码
msg.username2=凹凸曼打奥特曼
msg.age2=18
MsgController2
@RestController
//默认条件下 使用ISO-8859-1的编码格式,所以中文乱码
@PropertySource(value="classpath:/properties/msg.propertiies",encoding="UTF-8")
public class MsgController2 {
@Value("${msg.username2}")
private String username; //用户名
@Value("${msg.age2}")
private Integer age;
@RequestMapping("/getMsg2")
public String getMsg() {
//String str="springBoot测试方法";
return "返回结果:"+username+"+"+age;
}
}
2.2、yml配置
# 语法: 1. key-value结构 2.key和value之间使用:(空格)进行分割
# 2.YML配置文件有层级结构
spring:
profiles:
active: test
#指定默认的环境策略
---
spring:
profiles: prod
server:
port: 8090
servlet:
context-path: / #项目发布路径信息 默认条件下 /根目录
# tomcat服务器进行发布 默认发布路径地址webapps目录下
#指定用户配置文件信息
msg:
username: 小黑
age: 30
--- #环境分隔
spring:
profiles: test
server:
port: 80
servlet:
context-path: /test #项目发布路径信息 默认条件下 /根目录
#指定用户配置文件信息
msg:
username: 老舒
age: 30
2、SpringBoot整合Mybatis入门案例
导入sql文件
或者手动导入如下:
打开cmd
命令: mysql -uroot -p*****
导入指令: source D:\jtdb.sql;
2.1、创建项目springBootDemo2
new 一个spring项目
2.2、添加配置pom.xml
<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标签作用:管理所有被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>
<groupId>com.jt</groupId>
<artifactId>springBootDemo2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springBootDemo2</name>
<description>Demo project for Spring Boot</description>
<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>
<!-- 配置properties添加属性注入依赖 -->
<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>
<!-- SpringBoot整合Mybatis -->
<!--引入数据库驱动 -->
<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>
</dependencies>
<!-- 负责打包更新maven操作相关配置,必须配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后更新一下maven
2.3、添加application.yml
server:
port: 80
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: ***
mybatis:
#定义别名包
type-aliases-package: com.jt.pojo
#添加映射文件
mapper-locations: classpath:/mybatis/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
serverTimezone=GMT%2B8 东8区
useUnicode=true&characterEncoding=utf8 使用指定的字符集编码
&autoReconnect=true 数据库连接断开之后,是否自动重连
&allowMultiQueries=true 是否允许批量操作sql语句. 一般查询居多 允许
2.4、添加类
建立User
@Data
@Accessors(chain = true) //开启链式加载结构
public class User {
//属性一般都与表字段对应
private Integer id;
private String name;
private Integer age;
private String sex;
}
建立UserMapper
//@Mapper //将接口交给Spring容器管理,并且为其创建代理对象-->在启动类设置了
public interface UserMapper {
//1.查询所有的用户表记录
@Select("select id,name,age,sex from user")
List<User> findAll();
}
在启动类添加
//利用包扫描的形式 扫描指定包路径为接口创建代理对象 批量操作
@MapperScan("com.jt.mapper") //@mapper的包扫描类型
2.5、测试
@SpringBootTest //springBoot测试注解 开启了spring容器
public class TestMybatis {
@Autowired
private UserMapper userMapper;
@Test
public void findAll() {
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
}
3、mybatis-plus入门
CRUD
crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能
3.1、将application.yml中的mybatis 换成mybatis-plus
<!--spring整合mybatis 暂时 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
换成
<!--spring整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
3.2、关联User表
@Data
@Accessors(chain = true) //开启链式加载结构
@TableName //@TableName("user")与表名进行关联 如果名称一致,则可以不写(不分大小写)
public class User {
//属性一般都与表字段对应
@TableId(type= IdType.AUTO) //主键说明(自增标识AUTO)
private Integer id;
//@TableField(value = "name") //如果属性名称与字段一致(包含驼峰规则),则可以不写
private String name;
private Integer age;
private String sex;
}
3.3、继承BaseMapper
如果泛型不引入,则数据库操作无法完成.
public interface UserMapper extends BaseMapper<User> {
//1.查询所有的用户表记录
@Select("select id,name,age,sex from user")
List<User> findAll();
}
3.4、添加日志
顺便把mybatis改成mybatis-plus,其他不用改
#Mybatis-plus整合
mybatis-plus:
#定义别名包
type-aliases-package: com.jt.pojo
#添加映射文件(xml文件的依赖)
mapper-locations: classpath:/mybatis/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
#添加日志
logging:
level:
#mybatis指定mapper接口 以debug的形式展现日志.
com.jt.mapper: debug
3.5测试mybatis-plus
@Test
public void findAll() {
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
新增
@Test
public void insert() {
User user =new User();
user.setName("小小黑")
.setAge(15)
.setSex("女");
userMapper.insert(user);
System.out.println("入库成功");
}
/**
* 查询API说明
* 案例:查询id=53的用户信息
*/
@Test
public void select01() {
User user =userMapper.selectById(53);
System.out.println(user);
}
查询API说明
案例:查询name=“孙尚香” sex=“女” 的用户
queryWrapper:条件构造器 拼接where条件
逻辑运算符 : =(eq),>(gt),<(lt),>=(ge),<=(le)
@Test
public void select02() {
//1、利用对象封装参数,实现数据查询
User user =new User();
user.setName("孙尚香")
.setSex("女");
//根据对象中不为null的元素拼接where条件,默认条件下使用and连接符
QueryWrapper<User> queryWrapper =new QueryWrapper<>(user);
List<User> userList =userMapper.selectList(queryWrapper);
System.out.println(userList);
//2利用条件构造器构建where条件
QueryWrapper<User> queryWrapper2 =new QueryWrapper<>(user);
queryWrapper2.eq("name", "孙尚香")
.eq("sex", "女");
List<User> userList2 =userMapper.selectList(queryWrapper2);
System.out.println(userList2);
}
查询用户age<18岁 或者 age>100岁
@Test
public void select03() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 18)
.or()
.gt("age", 100);
List<User> userList =userMapper.selectList(queryWrapper);
System.out.println(userList);
}
查询id=1,3,6的用户
@Test
public void select04() {
//1、通过API进行封装
List<Integer> list =new ArrayList<>();
list.add(1);
list.add(3);
list.add(6);
List<User> userList =userMapper.selectBatchIds(list);
System.out.println(userList);
//2、条件构造器进行封装
QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
queryWrapper.in("id", 1,3,6);
List<User> userList1 = userMapper.selectList(queryWrapper);
System.out.println(userList1);
}
@Test
public void select05() {
QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
//queryWrapper.between("字段", "值1", "值2");
//queryWrapper.like("naem", "精"); //包含精字 %精%
//queryWrapper.likeRight("naem", "精"); //以精开头 精%
//queryWrapper.likeLeft("naem", "精"); //以精结尾 %精
//queryWrapper.groupBy("naem"); //分组查询
//queryWrapper.orderByDesc("age"); //倒序
//queryWrapper.orderByAsc("age"); //正序
//queryWrapper.between("age", "1", "100"); //1~100岁之间
//queryWrapper.lt("age", 18) //小于18岁
.or() //或
.gt("age", 100); //大于100岁
// 逻辑运算符 : =(eq),>(gt),<(lt),>=(ge),<=(le)
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
更多条件构造器
https://blog.csdn.net/SkyCloud_/article/details/108247234
4、mybatis-plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
4.1特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
4.2历史背景
问题1: 现在操作的数据库任然采用 sql语句的方式进行编辑. 操作sql的方式实质就是面对过程的操作方式.
需求: 由于传统的sql 开发效率低,并且无论多么简单的sql都需要程序员自己编辑.很繁琐(无趣).
想法: 能否以面向对象的方式操作数据库!!!
4.3JPA说明
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
核心理念: 以面向对象的方式操作数据库.
4.4MybatisPlus实现原理
核心:
- 表与对象建立关联关系
对象名称 ---------> 表名
对象的属性 -------> 数据表中的字段. - 采用第三方接口 规范所有的单表操作规则.(封装思想)
- 将CURD接口方法,必须按照sql的规范转化为指定的sql语句.
理论依据:
userMapper.insert(user); //程序员只写到这里.
sql: insert into 表名(字段名…) values (属性值…);
按照用户的调用发方法,动态拼接sql.之后交给Mybatis去执行.
拼接sql:
insert into user表(字段A,字段B,字段C…) values (属性值A,属性B,属性C…);
lombok配置
引入插件lombok 自动的set/get/构造方法插件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
1、如果要在Linux系统中运行java项目,不需要需要安装lombok插件
2、lombok:可以自动的生成get/set等方法.但是使用lombok时需要安装插件
3、lombok在程序编译期有效,当程序由.java文件编译为.class文件时,lombok插件开始工作.动态生成了get/set等方法. 而Linux中运行的项目直接.jar包文件里边包含了.class类型文件.所以不需要lombok插件再次编译即可运行.
注意
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
配置文件写法
1.YML文件写法 层级关系 空格 连接符:号 注意缩进.
2.pro文件 本身都是字符串不需要添加""号 注意字符集编码iso-8859-1 转化为utf-8 重新编辑.
负责打包更新maven操作相关配置,必须配置(springboot会自动配置)
属性赋值
目的:动态配置属性信息.
方式2:
取值前提: 先赋值,再取值
1.@value spel表达式
2@ConfigurationProperties(prefix = “msg”) 一般配合@data注解.
指定配置文件进行加载. @PropertySource(“classpath:/xxxxxxxx.properties”)
环境切换
spring.profiles: prod 定义环境名称
spring.profiles.active: prod 指定默认的环境