目录
SpingBoot介绍
什么是SpringBoot
SpringBoot有神魔特点
Pom.xml介绍
坐标
parent标签作用
定位
原则
作用
插件说明build
概念
作用
注意事项:
maven命令
注意事项
POM文件常见报错
父版本报错解决办法
插件报错
SpringBoot高级用法
properties文件
代码示例
yml文件
作用
读取properties文件时注意事项
Spring自动装配
Spring容器(IOC)
依赖注入原理
自动装配说明
SpringBoot整合Mybatis
SpringBoot整合Mybatis 添加配置文件
1.连接数据库创建配置文件
2.SpringBoot整合Mybatis
SpringBoot整合MybatisPlus
MybatisPlus
orm思想
以对象的方式操作数据库
SpringBoot整合Mybatis流程
@SpringBootTest
Mybatis调用流程
MP入门案例
MP实现原理
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
SpringBoot主要的作用整合SSM,使得框架的使用更加简化
开箱即用
1.SpringBoot在内部兼容了当下几乎所有的第三方框架
2.SpringBoot官网已经将所有兼容的版本进行了定义(几乎解决了版本冲突问题)以后几乎不写版本号
概括: parent标签中管理其他的项目版本信息.
SpringBoot项目与Maven整合的一个插件
可以通过插件 执行项目打包/测试/文档生成等操作
该插件不能省略
项目发布时: java -jar xxxx.jar 报错:没有主清单信息!!!!
打包之后如果没有生成xxx.jar文件程序此时运行没有问题则去本地位置查找
数据结构: KEY-VALUE
数据类型: String类型/Number数值
语法:
xxx.properties
person.name=王狗蛋
读取配置文件
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/*
* 接收用户请求
* 响应用户的json串*/
@RestController
@RequestMapping()
/*1.响应用户json 可以将对象转化成为json串
* 2.如果返回值为String类型则返回本身
* json永远都是串*/
@ResponseBody
//Spring容器启动时,动态添加配置文件 /代表根目录resources文件夹 一般需要修改字符集
//关于注解赋值规范 1.必须满足key-value结构 2.如果属性值只有一个,并且是value属性则可以省略不写 3.如果还是乱码 检查pro字符集编码
@PropertySource(value = "classpath:/person.properties", encoding = "UTF-8")
public class HelloController {
// private String day="1";
/*Spring容器内部为属性赋值
语法 spel表达式 ${day}
*/
@Value("${user.day}")
private String day;
@Value("${person.name}")
private String name;
@RequestMapping("/getMsg")
public String getMsg() {
return "这个雨下几天:" + day + "\t" + name;
}
}
语法:
server:
port: 8090
spring:
datasource:
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
password: root
#如果数据库密码以数字0开头 则必须使用""号包裹
#password: "01234"
#SpringBoot整合Mybatis配置 SpringBoot整合Mybatis
mybatis:
#定义别名包: 实现对象映射
type-aliases-package: com.jt.pojo
#加载映射文件一个接口对应一个映射文件
mapper-locations: classpath:/mybatis/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
#不打印日志
debug: false
驼峰命名规则
表字段: user_id,user_name
对象的属性: userId,userName
resultType: 保证属性与字段名称必须一致.
Mybatis提供了驼峰命名规则:
规则: 字段user_id~~~去除_线~~~之后映射对象的属性userId
创建映射文件
创建Mapper接口
package com.jt.mapper;
import com.jt.pojo.User;
import java.util.List;
//Mybatis接口如何交给Spring容器管理!!!!!
public interface UserMapper {
//查询所有demo_user表的数据
List getAll();
}
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
1. 要求查询的结果集可以自动的封装为对象 (读)
2. 利用对象封装数据,之后(自动)动态的生成Sql语句执行相关操作. (更新)
注解是SpringBoot程序 为了简化后端代码测试 提供了专门的测试API.
测试时需要Spring容器管理对象,同时将测试的对象获取 之后进行测试.
注意事项: 测试注解只能在测试包中运行.
Spring容器为接口创建代理对象. Spring容器启动对象立即创建
根据 @Autowired 注解动态注入Mapper接口的代理对象
用户通过Mapper接口调用方法.(执行业务操作)
Mybatis根据接口方法动态匹配xml的映射文件
1.根据Mapper的接口路径匹配xml映射文件中的 com.jt.mapper.UserMapper
2.根据接口的方法 匹配xml映射文件中的Sql ID 之后执行Sql语句
5.Mybatis将结果集封装为对象 之后返回.
4.0.0
org.example
springboot_demo3_mp2
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.5.2
1.8
true
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-devtools
org.projectlombok
lombok
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-jdbc
com.baomidou
mybatis-plus-boot-starter
3.4.3
package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;
@Data
@Accessors(chain = true)
@Component
@TableName("demo_user")
public class User {
@TableId(type = IdType.AUTO )
private Integer id;
private String name;
private Integer age;
private String sex;
}
@TableName(表名)
@TableId(主键)
@TableFiled()字段 如果符合驼峰命名可以选择不写
package com.jt.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;
public interface UseDao extends BaseMapper {
}
server:
port: 8090
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
#如果数据库密码以数字0开头 则必须使用""号包裹
#password: "01234"
#SpringBoot整合Mybatis配置 SpringBoot整合Mybatis
mybatis-plus:
#定义别名包: 实现对象映射
type-aliases-package: com.jt.pojo
#加载映射文件一个接口对应一个映射文件
mapper-locations: classpath:/mybatis/*.xml
#mapper-locations: classpath:/UserMapper.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
#不打印日志
debug: false
#打印日志
logging:
level:
com.jt.mapper: debug
package com.jt;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.dao.UseDao;
import com.jt.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Collection;
@SpringBootTest
public class RunApp1 {
@Autowired
UseDao userDao;
@Test
public void test1(){
QueryWrapper userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("id", 231);
userDao.delete(userQueryWrapper);
System.out.println("删除成功");
}
@Test
public void deletes(){
Collection collection=new ArrayList();
collection.add(10);
collection.add(20);
userDao.deleteBatchIds(collection);
System.out.println("删除成功");
}
@Test
public void deleteOne(){
QueryWrapper userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("name", "吴亦凡").eq("sex", "女");
userDao.delete(userQueryWrapper);
System.out.println("SuccessFul");
}
@Test
public void testInsert(){
QueryWrapper userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("name", "吴凡凡");
userDao.update(new User().setName("朱军海运").setAge(100),userQueryWrapper);
System.out.println("修改成");
}
@Test
public void test(){
userDao.updateById(new User().setId(18).setName("云英").setSex("男").setAge(16));
System.out.println("修改成");
}
}
例子: userMapper.insert(user对象) 如何转化Sql?
**insert into 表名(字段名…) values (属性值…)
insert into demo_user(id,name,age,sex) values (“吴xx”,xx,xx,xx)
MP将动态生成的Sql交给Mybatis执行最终实现数据入库操作!!!