关于springboot:如有神助阿里P7大牛把Spring-Boot讲解得如此透彻送你上岸

33次阅读

共计 8497 个字符,预计需要花费 22 分钟才能阅读完成。

Hello,明天给各位童鞋们分享 Spring Boot,连忙拿出小本子记下来吧!

Spring Boot 整合 Druid

概述
Druid 是阿里巴巴开源平台上的一个我的项目,整个我的项目由数据库连接池、插件框架和 SQL 解析器组成。该我的项目次要是为了扩大 JDBC 的一些限度,能够让程序员实现一些非凡的需要,比方向密钥服务申请凭证、统计 SQL 信息、SQL 性能收集、SQL 注入查看、SQL 翻译等,程序员能够通过定制来实现本人须要的性能。

Druid 是目前最好的数据库连接池,在性能、性能、扩展性方面,都超过其余数据库连接池,包含 DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid 曾经在阿里巴巴部署了超过 600 个利用,通过多年生产环境大规模部署的严苛考验。Druid 是阿里巴巴开发的号称为监控而生的数据库连接池!

引入依赖

在 pom.xml 文件中引入 druid-spring-boot-starter 依赖

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid-spring-boot-starter</artifactId>

    <version>1.1.10</version>

</dependency>

引入数据库连贯依赖

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <scope>runtime</scope>

配置 application.yml
在 application.yml 中配置数据库连贯

spring:

  datasource:

url: jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false

    username: root

    password: 123456

    type: com.alibaba.druid.pool.DruidDataSource

    initial-size: 1

    min-idle: 1

    max-active: 20

    test-on-borrow: true

    # MySQL 8.x: com.mysql.cj.jdbc.Driver

    driver-class-name: com.mysql.jdbc.Driver

MySQL 服务应用 docker 容器开启

Spring Boot 整合 tk.mybatis
tk.mybatis 是在 MyBatis 框架的根底上提供了很多工具,让开发更加高效

在 pom.xml 文件中引入 mapper-spring-boot-starter 依赖,该依赖会主动引入 MyBaits 相干依赖

    <groupId>tk.mybatis</groupId>

    <artifactId>mapper-spring-boot-starter</artifactId>

    <version>2.0.2</version>

配置 MyBatis

mybatis:

       type-aliases-package: 实体类的寄存门路,如:com.zysheep.spring.boot.mybatis.entity

    mapper-locations: classpath:mapper/*.xml

创立一个通用的父级接口

次要作用是让 DAO 层的接口继承该接口,以达到应用 tk.mybatis 的目标, 特地留神: 该接口不能被扫描到,否则会出错

package tk.mybatis;

import tk.mybatis.mapper.common.Mapper;

import tk.mybatis.mapper.common.MySqlMapper;

/**

 * 本人的 Mapper

 * @author:zysheep

 * @date:Created in 2020/1/11 22:49

 * @description:${description}

 * @version: ${version}$

 */

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {

}

Spring Boot 整合 PageHelper

PageHelper 是 Mybatis 的分页插件,反对多数据库、多数据源。能够简化数据库的分页查问操作,整合过程也极其简略,只需引入依赖即可。

在 pom.xml 文件中引入 pagehelper-spring-boot-starter 依赖

    <groupId>com.github.pagehelper</groupId>

    <artifactId>pagehelper-spring-boot-starter</artifactId>

    <version>1.2.5</version>

应用 MyBatis 的 Maven 插件生成代码

咱们无需手动编写 实体类、DAO、XML 配置文件,只须要应用 MyBatis 提供的一个 Maven 插件就能够主动生成所需的各种文件便可能满足根本的业务需要,如果业务比较复杂只须要批改相干文件即可。

配置插件

在 pom.xml 文件中减少 mybatis-generator-maven-plugin 插件,configurationFile:主动生成所需的配置文件门路

主动生成的配置

在 src/main/resources/generator/ 目录下创立 generatorConfig.xml

 配置文件:

<?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE generatorConfiguration

        PUBLIC “-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN”

        “http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd”>

<generatorConfiguration>

    <!– 引入数据库连贯配置 –>

    <properties resource=”jdbc.properties”/>

    <context id=”Mysql” targetRuntime=”MyBatis3Simple” defaultModelType=”flat”>

        <property name=”beginningDelimiter” value=”`”/>

        <property name=”endingDelimiter” value=”`”/>

        <!– 配置 tk.mybatis 插件 –>

        <plugin type=”tk.mybatis.mapper.generator.MapperPlugin”>

            <property name=”mappers” value=”cn.tk.mybatis.MyMapper”/>

        </plugin>

        <!– 配置数据库连贯 –>

        <jdbcConnection

                driverClass=”${jdbc.driverClass}”

                connectionURL=”${jdbc.connectionURL}”

                userId=”${jdbc.username}”

                password=”${jdbc.password}”>

        </jdbcConnection>

        <!– 配置实体类寄存门路 –>

        <javaModelGenerator targetPackage=”cn.panyucable.pojo” targetProject=”src/main/java”/>

        <!– 配置 XML 寄存门路 –>

        <sqlMapGenerator targetPackage=”mapper” targetProject=”src/main/resources”/>

        <!– 配置 DAO 寄存门路 –>

        <javaClientGenerator

                targetPackage=”cn.panyucable.mapper”

                targetProject=”src/main/java”

                type=”XMLMAPPER”/>

        <!– 配置须要指定生成的数据库和表,% 代表所有表 –>

        <table catalog=”panyucable_cn” tableName=”%”>

            <!– mysql 配置 –>

            <generatedKey column=”id” sqlStatement=”Mysql” identity=”true”/>

        </table>

    </context>

</generatorConfiguration>

配置数据源

在 src/main/resources 目录下创立 jdbc.properties

 数据源配置:

# MySQL 8.x: com.mysql.cj.jdbc.Driver

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.connectionURL=jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false

jdbc.username=root

jdbc.password=root

插件主动生成命令

mvn mybatis-generator:generate

测试 MyBatis 操作数据库

应用 tk.mybatis 操作数据库
批改入口类

创立测试类

@RunWith(SpringRunner.class)

@SpringBootTest(classes = HelloSpringBootApplication.class)

@Transactional

@Rollback

public class MyBatisTests {

    /**

     * 注入数据查问接口

     */

    @Autowired

    private TbUserMapper tbUserMapper;

     * 测试插入数据

    @Test

    public void testInsert() {

        // 结构一条测试数据

        TbUser tbUser = new TbUser();

        tbUser.setUsername(“Lusifer”);

        tbUser.setPassword(“123456”);

        tbUser.setPhone(“15888888888”);

        tbUser.setEmail(“topsale@vip.qq.com”);

        tbUser.setCreated(new Date());

        tbUser.setUpdated(new Date());

        // 插入数据

        tbUserMapper.insert(tbUser);

    }

     * 测试删除数据

    public void testDelete() {

        // 结构条件,等同于 DELETE from tb_user WHERE username = ‘Lusifer’

        Example example = new Example(TbUser.class);

        example.createCriteria().andEqualTo(“username”, “Lusifer”);

        // 删除数据

        tbUserMapper.deleteByExample(example);

     * 测试批改数据

    public void testUpdate() {

        // 结构条件

        tbUser.setUsername(“LusiferNew”);

        // 批改数据

        tbUserMapper.updateByExample(tbUser, example);

     * 测试查问汇合

    public void testSelect() {

        List<TbUser> tbUsers = tbUserMapper.selectAll();

        for (TbUser tbUser : tbUsers) {

            System.out.println(tbUser.getUsername());

        }

     * 测试分页查问

    public void testPage() {

        // PageHelper 应用非常简单,只须要设置页码和每页显示笔数即可

        PageHelper.startPage(0, 2);

        // 设置分页查问条件

        PageInfo<TbUser> pageInfo = new PageInfo<>(tbUserMapper.selectByExample(example));

        // 获取查问后果

        List<TbUser> tbUsers = pageInfo.getList();

    // 当前页

    private int pageNum;

    // 每页的数量

    private int pageSize;

    // 当前页的数量

    private int size;

    // 因为 startRow 和 endRow 不罕用,这里说个具体的用法

    // 能够在页面中 ” 显示 startRow 到 endRow 共 size 条数据 ”

    // 以后页面第一个元素在数据库中的行号

    private int startRow;

    // 以后页面最初一个元素在数据库中的行号

    private int endRow;

    // 总记录数

    private long total;

    // 总页数

    private int pages;

    // 后果集

    private List<T> list;

    // 前一页

    private int prePage;

    // 下一页

    private int nextPage;

    // 是否为第一页

    private boolean isFirstPage = false;

    // 是否为最初一页

    private boolean isLastPage = false;

    // 是否有前一页

    private boolean hasPreviousPage = false;

    // 是否有下一页

    private boolean hasNextPage = false;

    // 导航页码数

    private int navigatePages;

    // 所有导航页号

    private int[] navigatepageNums;

    // 导航条上的第一页

    private int navigateFirstPage;

    // 导航条上的最初一页

    private int navigateLastPage;

TkMybatis 的罕用办法介绍

Select

List select(T record);

依据实体中的属性值进行查问,查问条件应用等号

T selectByPrimaryKey(Object key);

依据主键字段进行查问,办法参数必须蕴含残缺的主键属性,查问条件应用等号

List selectAll();

查问全副后果,select(null)办法能达到同样的成果

T selectOne(T record);

依据实体中的属性进行查问,只能有一个返回值,有多个后果是抛出异样,查问条件应用等号

int selectCount(T record);

依据实体中的属性查问总数,查问条件应用等号

Insert

int insert(T record);
保留一个实体,null 的属性也会保留,不会应用数据库默认值
int insertSelective(T record);
保留一个实体,null 的属性不会保留,会应用数据库默认值

Update
int updateByPrimaryKey(T record);

依据主键更新实体全副字段,null 值会被更新

int updateByPrimaryKeySelective(T record);

依据主键更新属性不为 null 的值

Delete

int delete(T record);

依据实体属性作为条件进行删除,查问条件应用等号

int deleteByPrimaryKey(Object key);

依据主键字段进行删除,办法参数必须蕴含残缺的主键属性

Example 办法

List selectByExample(Object example);

依据 Example 条件进行查问

重点: 这个查问反对通过 Example 类指定查问列,通过 selectProperties 办法指定查问列

int selectCountByExample(Object example);

依据 Example 条件进行查问总数

int updateByExample(@Param(“record”) T record, @Param(“example”) Object example);

依据 Example 条件更新实体 record 蕴含的全副属性,null 值会被更新

int updateByExampleSelective(@Param(“record”) T record, @Param(“example”) Object example);

依据 Example 条件更新实体 record 蕴含的不是 null 的属性值

int deleteByExample(Object example);

依据 Example 条件删除数据

Example 应用办法详解

Example 用于增加条件,相当 where 前面的局部

作用:

example

用来放一些去重,排序,分类,分页等信息

criteria

用来传字段参数

罕用的办法及应用阐明:

首先进行初始化:

Example example = new Example(实体类.class);

Example.Criteria criteria = example.createCriteria();

增加升序排列条件,DESC 为降序:

example.setOrderByClause(“ 字段名 ASC”);

去除反复,boolean 型,true 为抉择不反复的记录:

example.setDistinct(false)

增加字段 xxx 为 null 的条件:

criteria.andXxxIsNull

增加字段 xxx 不为 null 的条件:

criteria.andXxxIsNotNull

增加 xxx 字段等于 value 条件:

criteria.andXxxEqualTo(value)

增加 xxx 字段不等于 value 条件:

criteria.andXxxNotEqualTo(value)

增加 xxx 字段大于 value 条件:

criteria.andXxxGreaterThan(value)

增加 xxx 字段大于等于 value 条件:

criteria.andXxxGreaterThanOrEqualTo(value)

增加 xxx 字段小于 value 条件:

criteria.andXxxLessThan(value)

增加 xxx 字段小于等于 value 条件:

criteria.andXxxLessThanOrEqualTo(value)

增加 xxx 字段值在 List<?> 条件:

criteria.andXxxIn(List<?>)

增加 xxx 字段值不在 List<?> 条件:

criteria.andXxxNotIn(List<?>)

增加 xxx 字段值为 value 的含糊查问条件:

criteria.andXxxLike(“%”+value+”%”)

增加 xxx 字段值不为 value 的含糊查问条件:

criteria.andXxxNotLike(“%”+value+”%””)

增加 xxx 字段值在 value1 和 value2 之间条件:

criteria.andXxxBetween(value1,value2)

增加 xxx 字段值不在 value1 和 value2 之间条件:

criteria.andXxxNotBetween(value1,value2)

须要留神的点:

首先要生成实例化及实例对应的 example,而后记住肯定要先初始化;

应用 and 和 or 办法进行判断时,“与”、“或”的逻辑关系分清,避免出现拿数据时呈现反复拿或者逻辑抵触拿不到的状况;

mapper.selectByExample()办法外面应该传入的参数是 example 对象, 而非其余的。

附:残缺的 POM

<?xml version=”1.0″ encoding=”UTF-8″?>

<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

正文完
 0