Springboot简述02

本文详细介绍了Springboot的自动装配原理,如何配置默认和Druid数据源,整合MyBatis框架、PageHelper分页插件,以及如何使用定时器。涵盖了从基础配置到实际案例的全方位内容。

1.springboot自动装配原理

我们在使用springboot时,并没有像之前项目加载我们的前端控制DispatcherServlet,也没有写编码过滤器。但是springboot可以完成请求以及编码的设置。

原理: 主启动类上的@SpringBootApplication注解上,而该注解是一个复合组件,而在复合注解中存在@EnableAutoConfiguration, 这个@EnableAutoConfiguration注解也是一个复合注解,包含@Import—而@Import注解导入一个AutoConfigurationImportSelector 【自动配置选择器】,在该类中存在一个方法getAutoConfigurationEntry --作用:得到自动配置类的实体。而这些自动配置类会完成相应的自动装配。
在这里插入图片描述
在这里插入图片描述

2.springboot整合数据源–连接数据库

2.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配置文件中配置数据源.

# 数据库版本8.0之前的不用加cj 8.0及以后加cj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=账号
spring.datasource.password=密码
spring.datasource.url=jdbc:mysql://localhost:3306/库名?serverTimezone=Asia/Shanghai

(3)测试

@SpringBootTest
class Springboot02ApplicationTests {
    //springboot帮你完成数据源的自动装配
    @Autowired
    private DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getConnection());
    }

2.2 设置Druid数据源

(1)导入druid数据源的依赖

 <!--druid数据源的依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>

(2)修改配置文件

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=账号
spring.datasource.druid.password=密码
spring.datasource.druid.url=jdbc:mysql://localhost:3306/库名?serverTimezone=Asia/Shanghai
#初始化的连接对象的个数
spring.datasource.druid.initial-size=5
#最多的连接数
spring.datasource.druid.max-active=10

(3)测试:

class Springboot02ApplicationTests {
    //springboot帮你完成数据源的自动装配
    @Autowired
    private DataSource dataSource;
  
    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource);
    }

3.springboot整合mybatis框架

ssm===>spring框架需要配置SqlSesssionFactoryBean对象,还有配置DAO接口的代理实现类。

springboot会自动配置SqlSesssionFactoryBean对象,必须引入starter依赖

准备:

/*
 Navicat Premium Data Transfer

 Source Server         : wzy
 Source Server Type    : MySQL
 Source Server Version : 80025
 Source Host           : localhost:3306
 Source Schema         : diyige

 Target Server Type    : MySQL
 Target Server Version : 80025
 File Encoding         : 65001

 Date: 19/08/2023 09:37:37
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(0) NULL DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Jone', 18, 'test1@baomidou.com');
INSERT INTO `user` VALUES (2, 'Jack', 20, 'test2@baomidou.com');
INSERT INTO `user` VALUES (3, 'Tom', 28, 'test3@baomidou.com');
INSERT INTO `user` VALUES (4, 'Sandy', 21, 'test4@baomidou.com');
INSERT INTO `user` VALUES (5, 'Billie', 24, 'test5@baomidou.com');

SET FOREIGN_KEY_CHECKS = 1;

依赖

  <!--mybatis和springboot整合的依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

实体类

package com.aaa.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Integer age;

    private String email;
}

dao接口

public interface UserDao {
    public List<User> findAll();
}

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">
<mapper namespace="com.aaa.dao.UserDao">

    <select id="findAll" resultType="com.aaa.entity.User">
        select * from user
    </select>
</mapper>

修改配置文件的内容

#设置Druid数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
spring.datasource.druid.url=jdbc:mysql://localhost:3306/diyige?serverTimezone=Asia/Shanghai
#初始化的连接对象的个数
spring.datasource.druid.initial-size=5
#最多的连接数
spring.datasource.druid.max-active=10

#指定映射文件所在的路径
mybatis.mapper-locations=classpath:/mapper/*.xml

在主启动类上dao接口的扫描配置
在这里插入图片描述

测试

    @Autowired
    private UserDao userDao;
    @Test
    public void testFindAll(){
        List<User> all = userDao.findAll();
        System.out.println(all);
    }

4.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(){
        //拦截器: select * from t_user
        PageHelper.startPage(1,2);
        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());
    }

5. 综合案例

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)修改配置文件

#数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=账号
spring.datasource.druid.password=密码
spring.datasource.druid.url=jdbc:mysql://localhost:3306/库名?serverTimezone=Asia/Shanghai
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=10

#mybatis映射文件的路径
mybatis.mapper-locations=classpath:/mapper/*.xml

(3)表

/*
 Navicat Premium Data Transfer

 Source Server         : wzy
 Source Server Type    : MySQL
 Source Server Version : 80025
 Source Host           : localhost:3306
 Source Schema         : diyige

 Target Server Type    : MySQL
 Target Server Version : 80025
 File Encoding         : 65001

 Date: 19/08/2023 10:54:53
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT,
  `picture` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `age` int(0) NULL DEFAULT NULL,
  `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `birthday` date NULL DEFAULT NULL,
  `clazz_id` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

/*
 Navicat Premium Data Transfer

 Source Server         : wzy
 Source Server Type    : MySQL
 Source Server Version : 80025
 Source Host           : localhost:3306
 Source Schema         : diyige

 Target Server Type    : MySQL
 Target Server Version : 80025
 File Encoding         : 65001

 Date: 19/08/2023 10:55:04
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for clazz
-- ----------------------------
DROP TABLE IF EXISTS `clazz`;
CREATE TABLE `clazz`  (
  `cid` int(0) UNSIGNED NOT NULL AUTO_INCREMENT,
  `clazz_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

(4)实体类:

student

package com.aaa.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    private String picture;
    private String name;
    private Integer age;
    private String sex;
    private Date birthday;
    private Integer clazzId;
    private Clazz clazz;
}

clazz

package com.aaa.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Clazz {
    private Integer cid;
    private String clazzName;
}

(5)dao接口和映射文件

package com.aaa.dao;

import com.aaa.entity.Student;

import java.util.List;

public interface StudentDao {
    /**
     * 增加
     * @param student
     * @return
     */
    public int insert(Student student);

    /**
     * 删除
     * @param id
     * @return
     */
    public int deleteById(Integer id);

    /**
     * 修改
     * @param student
     * @return
     */
    public int update(Student student);

    /**
     * 根据id查询学生信息
     * @param id
     * @return
     */
    public Student selectById(Integer id);

    /**
     * 查询所有
     * @return
     */
    public List<Student> 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">
<mapper namespace="com.aaa.dao.StudentDao">
    <!--返回添加时数据库生成的主键值-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into student values(null,#{picture},#{name},#{age},#{sex},#{birthday},#{clazzId})
    </insert>
    <update id="update">
        update student set picture=#{picture},name=#{name},age=#{age},sex=#{sex},birthday=#{birthday},clazz_id=#{clazzId}
        where id=#{id}
    </update>
    <delete id="deleteById">
        delete from student where id=#{id}
    </delete>

    <resultMap id="student" type="com.aaa.entity.Student" autoMapping="true">
        <id property="id" column="id"/>
        <result property="clazzId" column="clazz_id"/>
        <association property="clazz" javaType="com.aaa.entity.Clazz" autoMapping="true">
            <id property="cid" column="cid"/>
            <result property="clazzName" column="clazz_name"/>
        </association>
    </resultMap>

    <select id="selectById" resultMap="student">
        select * from student where id=#{id}
    </select>

    <select id="selectAll" resultMap="student">
        select * from student  s join clazz c on s.clazz_id=c.cid
    </select>
</mapper>

(6)service业务层

package com.aaa.service;

import com.aaa.entity.Student;
import com.aaa.vo.Result;

public interface StudentService {
    public Result deleteById(Integer id);
    public Result update(Student student);
    public Result insert(Student student);
    public Result findById(Integer id);
    public Result findAll(Integer current,Integer pageSize);
}

package com.aaa.service.impl;

import com.aaa.dao.StudentDao;
import com.aaa.entity.Student;
import com.aaa.service.StudentService;
import com.aaa.vo.Result;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;
    @Override
    public Result deleteById(Integer id) {
        int deleteById = studentDao.deleteById(id);
        return deleteById>0?new Result(200,"删除成功",null):new Result(500,"删除失败",null);
    }

    @Override
    public Result update(Student student) {
        int update = studentDao.update(student);
        return update>0?new Result(200,"修改成功",null):new Result(500,"修改失败",null);
    }

    @Override
    public Result insert(Student student) {
        int insert = studentDao.insert(student);
        return insert>0?new Result(200,"添加成功",null):new Result(500,"添加失败",null);
    }

    @Override
    public Result findById(Integer id) {
        Student student = studentDao.selectById(id);
        return new Result(200,"查询成功",student);
    }

    @Override
    public Result findAll(Integer current, Integer pageSize) {
        PageHelper.startPage(current,pageSize);
        List<Student> students = studentDao.selectAll();
        PageInfo<Student> pageInfo=new PageInfo<>(students);
        return new Result(200,"查询成功",pageInfo);
    }
}

(7)controller接口层

package com.aaa.controller;

import com.aaa.entity.Student;
import com.aaa.service.StudentService;

import com.aaa.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentService studentService;
    @DeleteMapping
    public Result deleteById(Integer id){
        return studentService.deleteById(id);
    }
    @PostMapping
    public Result insert(@RequestBody Student student){
        return studentService.insert(student);
    }
    @PutMapping
    public Result update(@RequestBody Student student){
        return studentService.update(student);
    }

    @GetMapping
    public Result getById(Integer id){
        return studentService.findById(id);
    }
    @GetMapping("/getAll")
    public Result getAll(Integer current,Integer pageSize){
        return studentService.findAll(current, pageSize);
    }

}

(8)postman测试

6. 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)开启定时的注解驱动
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值