# 1. 回顧 ``` 1. springboot框架。簡化spring項目的初始化搭建和配置的。 2. springboot的配置文件種類: (1)properties (2)yml application 3. java讀取springboot配置文件中的內容。 4. springboot註冊w ...
1. 回顧
1. springboot框架。簡化spring項目的初始化搭建和配置的。
2. springboot的配置文件種類: (1)properties (2)yml ===application
3. java讀取springboot配置文件中的內容。
4. springboot註冊web組件。
5. springboot包掃描的原理---自定義包掃描的路徑
2. 正文
1.springboot自動裝配原理
2.springboot整合數據源--連接資料庫
3.springboot整合mybatis框架。
4.springboot整合pageHelper分頁插件
5.springboot整合定時器。
6.springboot整合swagger介面文檔
7.springboot整合mp[mybatis-plus]
3.springboot自動裝配原理
我們在使用springboot時,並沒有像之前項目載入我們的前端控制DispatcherServlet,也沒有寫編碼過濾器。但是springboot可以完成請求以及編碼的設置。
原理: 主啟動類上的@SpringBootApplication註解上,而該註解是一個複合組件,而在複合註解中存在@EnableAutoConfiguration, 這個@EnableAutoConfiguration註解也是一個複合註解,包含@Import---而@Import註解導入一個AutoConfigurationImportSelector 【自動配置選擇器】,在該類中存在一個方法getAutoConfigurationEntry --作用:得到自動配置類的實體。而這些自動配置類會完成相應的自動裝配。
4. springboot整合數據源--連接資料庫
連接我們的資料庫----druid數據源----預設的數據源
4.1 設置預設數據源
(1)引入相關依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
springboot自動配置會載入jdbc的自動配置類---讀取springboot配置文件中數據源的信息,從而完成數據源的自動配置。
(2)application配置文件中配置數據源.
#配置數據源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/aaa?serverTimezone=Asia/Shanghai
(3)測試
@SpringBootTest
class Qy168Springboot03ApplicationTests {
@Autowired
private DataSource dataSource;//springboot幫你完成數據源的自動裝配
@Test
void contextLoads() throws SQLException {
System.out.println(dataSource.getConnection());
}
}
4.2 設置Druid數據源
<!--druid數據源的依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
修改配置文件
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/aaa?serverTimezone=Asia/Shanghai
#初始化的連接對象的個數
spring.datasource.druid.initial-size=5
#最多的連接數
spring.datasource.druid.max-active=10
測試:
5. springboot整合mybatis框架
ssm===>spring框架需要配置SqlSesssionFactoryBean對象,還有配置DAO介面的代理實現類。
springboot會自動配置SqlSesssionFactoryBean對象,必須引入starter依賴
(1) 依賴
<!--mybatis和springboot整合的依賴-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
(2)創建實體類
@Data
public class User {
private Integer id;
private String username;
private String password;
private String name;
private Double balance;
}
(3)dao介面
public interface UserDao {
public List<User> findAll();
}
(4)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必須和dao介面的名稱一模一樣-->
<mapper namespace="com.aaa.qy168springboot03.dao.UserDao">
<select id="findAll" resultType="com.aaa.qy168springboot03.entity.User">
select * from t_user
</select>
</mapper>
(5)修改配置文件的內容
(6)在主啟動類上dao介面的掃描配置
(7)測試
6. springboot整合pageHelper分頁插件
<!--pageHelper的依賴-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
測試:
@Test
public void testFindAll(){
PageHelper.startPage(1,3);//攔截器: select * from t_user
List<User> all = userDao.findAll();
//把查詢的結果封裝到PageInfo類中
PageInfo<User> pageInfo=new PageInfo<>(all);
System.out.println("總條數:"+pageInfo.getTotal());
System.out.println("總頁數:"+pageInfo.getPages());
System.out.println("當前頁的記錄:"+pageInfo.getList());
}
7. 綜合案例
springboot+mybatis+druid+pageHelper: CRUD
(1)創建springboot工程並引入相關的依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)修改配置文件
#修改埠號
server.port=8888
#數據源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/qy168?serverTimezone=Asia/Shanghai
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=10
#mybatis映射文件的路徑
mybatis.mapper-locations=classpath:/mapper/*.xml
(3)實體類
tbl_dept
@Data
public class Dept {
private Integer did;
private String dname;
private String loc;
}
tbl_emp
@Data
public class Emp {
private Integer id;
private String name;
private double salary;
private Date birthday;
private String headImg;
private Integer deptId;
//查詢員工時需要攜帶該員工對應的部門信息.
private Dept dept;
}
(4)dao介面和映射文件
public interface EmpDao {
//增加
public int insert(Emp emp);
//刪除
public int deleteById(Integer id);
//修改
public int update(Emp emp);
//根據id查詢員工信息
public Emp selectById(Integer id);
//查詢所有
public List<Emp> selectAll();
}
<?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必須和dao介面的名稱一模一樣-->
<mapper namespace="com.ykq.dao.EmpDao">
<!--返回你添加時資料庫生成的主鍵值-->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into tbl_emp values(null,#{name},#{salary},#{birthday},#{deptId},#{headImg})
</insert>
<update id="update">
update tbl_emp set name=#{name},salary=#{salary},birthday=#{birthday},dept_id=#{deptId},headImg=#{headImg}
where id=#{id}
</update>
<delete id="deleteById">
delete from tbl_emp where id=#{id}
</delete>
<!--sql片段-->
<sql id="empSql">
id,name,salary,birthday,dept_id deptId,headImg
</sql>
<select id="selectById" resultType="com.ykq.entity.Emp">
select
<include refid="empSql"/>
from tbl_emp where id=#{id}
</select>
<!--查詢所有員工攜帶部門信息-->
<resultMap id="baseEmpMapper" type="com.ykq.entity.Emp" autoMapping="true">
<id property="id" column="id"/>
<result property="deptId" column="dept_id"/>
<association property="dept" javaType="com.ykq.entity.Dept" autoMapping="true">
<id property="did" column="did"/>
<result property="dname" column="d_name"/>
</association>
</resultMap>
<select id="selectAll" resultMap="baseEmpMapper">
select * from tbl_emp e join tbl_dept d on e.dept_id=d.did
</select>
</mapper>
(5)service業務層
public interface EmpService {
public Result deleteById(int id);
public Result update(Emp emp);
public Result insert(Emp emp);
public Result findById(Integer id);
public Result findAll(Integer current,Integer pageSize);
}
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpDao empDao;
@Override
@Transactional
public Result deleteById(int id) {
int row = empDao.deleteById(id);
return row>0?new Result(200,"刪除成功",null):new Result(500,"刪除失敗",null);
}
@Override
public Result update(Emp emp) {
int row = empDao.update(emp);
return row>0?new Result(200,"刪除成功",null):new Result(500,"刪除失敗",null);
}
@Override
public Result insert(Emp emp) {
int row = empDao.insert(emp);
return row>0?new Result(200,"刪除成功",emp):new Result(500,"刪除失敗",null);
}
@Override
public Result findById(Integer id) {
Emp emp = empDao.selectById(id);
return new Result(200,"查詢成功",emp);
}
@Override
public Result findAll(Integer current, Integer pageSize) {
PageHelper.startPage(current,pageSize);
List<Emp> emps = empDao.selectAll();
PageInfo<Emp> pageInfo=new PageInfo<>(emps);
return new Result(200,"查詢成功",pageInfo);
}
}
(6)controller介面層
package com.zjw.controller;
import com.zjw.entity.Emp;
import com.zjw.service.EmpService;
import com.zjw.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/emp")
public class EmpController {
@Autowired
private EmpService empService;
@DeleteMapping
public Result deleteById(Integer id){
return empService.deleteById(id);
}
@PostMapping
public Result insert(@RequestBody Emp emp){
return empService.insert(emp);
}
@PutMapping
public Result update(@RequestBody Emp emp){
return empService.update(emp);
}
@GetMapping
public Result getById(Integer id){
return empService.findById(id);
}
@GetMapping("/getAll")
public Result getAll(Integer current,Integer pageSize){
return empService.findAll(current, pageSize);
}
}
8. springboot整合定時器。
可以在規定的時間內執行相應的代碼。
比如: OSS文件上傳---OSS的文件冗餘的文件。----OSS的浪費。---->指定的時間自動刪除。[夜間刪除]
比如: 下單--->30分鐘未支付---取消訂單。
(1)引入定時器的依賴--
<!--引入定時器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
(2)編寫定義的業務代碼
@Component
public class My {
@Autowired
private EmpDao empDao;
//定時任務執行的代碼
@Scheduled(cron = "0 0 2 * * ?")
public void show(){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~");
//可以寫自己的寫完代碼
empDao.delete();
}
}
(3)開啟定時的註解驅動
本文來自博客園,作者:知行合二為一,轉載請註明原文鏈接:https://www.cnblogs.com/226zjw/p/17650130.html