如何使用Spring Boot从0到1搭建一个Java后台(二)

本文详细讲解了如何使用Spring Boot搭建Java后台,包括数据库配置、MyBatis集成、单元测试,以及加密解密和接口设计。在数据库部分,涉及了表的创建、数据插入和MyBatis的配置。在测试环节,展示了Base64、MD5、AES加密解密的实现。最后,讨论了RESTful接口的设计与实现,并提供了项目的开源地址。
摘要由CSDN通过智能技术生成

本篇文章将一步步地来实现一个完整的RESTful接口以及对应的单元测试与集成测试。

数据库

第一步,首先来创建一个部门表并插入几条数据,打开MySQLWorkbench,执行下面的sql语句:

# 创建数据库ddn_hrm_db
create database ddn_hrm_db;
# 使用数据库ddn_hrm_db
use ddn_hrm_db;
# 创建表dept_inf
create table dept_inf (
    id INT(11) not null auto_increment,
    name varchar(50) not null,
    remark varchar(300) default null,
    primary key (id)
);

# 插入几条数据
insert into dept_inf(id, name, remark) values (1, '技术部', '技术部'), (2, '运营部', '运营部'), (3, '财务部', '财务部'), (4, '总公办', '总公办'), (5, '市场部', '市场部');

用MySQLWorkbench查询下刚才插入进去的数据,验证下表建立的是否正确、插入数据是否正确,查询结果如下所示:

spring-boot 1-1.png

第二步,在Spring Boot中配置mybatis,配置数据库连接池(使用阿里的Druid),先打开pom.xml加入mybatis、druid所依赖的jar包,配置如下所示:

<!-- Mybatis集成 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>

<!-- 阿里数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.4</version>
</dependency>

接着打开application.properties加入JDBC配置、druid配置、mybatis配置,配置如下所示:

# JDBC配置
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/ddn_hrm_db?useUnicode=true&characterEncoding=utf8
spring.datasource.druid.username=root
spring.datasource.druid.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 连接池配置
spring.datasource.druid.initial-size=10
spring.datasource.druid.max-active=50
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000

# 监控配置
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/**
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.web-stat-filter.session-stat-enable=true
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
spring.datasource.druid.web-stat-filter.profile-enable=true

# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.druid.stat-view-servlet.login-username=bruce
spring.datasource.druid.stat-view-servlet.login-password=bruce2017

# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
spring.datasource.druid.aop-patterns=com.dodonew.service.*,com.dodonew.dao.*  # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
# 如果spring.datasource.druid.aop-patterns要代理的类没有定义interface请设置spring.aop.proxy-target-class=true

# Filter配置
spring.datasource.druid.filters=stat,wall

# logging配置
logging.level.org.mybatis.spring=debug
# 显示SQL日志
logging.level.com.dodonew.dao=debug

# mybatis配置
mybatis.configuration.cache-enabled=true
mybatis.configuration.jdbc-type-for-null=null
mybatis.configuration.call-setters-on-nulls=true

在上面的配置中,显示SQL日志的配置要特别注意下,其中com.dodonew.dao是你mapper类所在的包,只有这样配置才能把sql日志给打印出来。

第三步,建立Dept域对象、DeptDao类、DeptService类,如下所示:

Dept域对象:

public class Dept implements Serializable {
    private static final long serialVersionUID = -4243387151355500160L;
    private Integer id;
    private String departName;
    private String remark;

    public Dept(Integer id, String departName, String remark) {
        this.id = id;
        this.departName = departName;
        this.remark = remark;
    }

    public Dept(String departName, String remark) {
        this.departName = departName;
        this.remark = remark;
    }

    public Dept() {

    }

    public Integer getId() {
        return id;
    }

    public String getDepartName() {
        return departName;
    }

    public String getRemark() {
        return remark;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setDepartName(String departName) {
        this.departName = departName;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "id=" + id +
                ", departName='" + departName + '\'' +
                ", remark='" + remark + '\'' +
                '}';
    }
}

DeptDao、DeptDynaSqlProvider类:

public interface DeptDao {
    /**
    * 查询所有部门
    * @return 所有部门
    */
    @Select("select * from " + HrmConstants.DEPTTABLE + " ")
    List<Dept> selectAllDept();

    /**
    * 根据id查询部门
    * @param id 部门id
    * @return 某个部门
    */
    @Select("select * from " + HrmConstants.DEPTTABLE + " where id = #{id}")
    Dept selectById(Integer id);

    /**
    * 根据id删除部门
    * @param id 部门id
    */
    @Delete("delete from " + HrmConstants.DEPTTABLE + " where id = #{id}")
    Integer deleteById(Integer id);

    /**
    * 查询总数量
    * @param params
    * @return 部门总数量
    */
    @SelectProvider(type = DeptDynaSqlProvider.class, method = "count")
    Integer count(Map<String, Object> params);

    /**
    * 分页动态查询
    * @param params
    * @return 部门列表
    */
    @SelectProvider(type = DeptDynaSqlProvider.class, method = "selectWithParams")
    List<Dept> selectByPage(Map<String, Object> params);

    /**
    * 动态插入部门
    * @param dept
    *
    * @SelectKey 注解的主要作用就是把当前插入对象的主键值,赋值给对应的id属性(id代表对应的主键)
    */
    @InsertProvider(type = DeptDynaSqlProvider.class, method = "insertDept")
    @SelectKey(statement = "SELECT LAST_INSERT_ID() AS id", keyProperty = "id", keyColumn = "id", before = false, resultType = Integer.class)
    Integer save(Dept dept);

    /**
    * 更新某个部门的信息
    * @param dept
    */
    @UpdateProvider(type = DeptDynaSqlProvider.class, method = "updateDept")
    Integer update(Dept dept);
}

public class DeptDynaSqlProvider {
    // 分页动态查询
    public String selectWithParams(final Map<String, Object> params) {
        String sql = new SQL() {
            {
                SELECT("*");
                FROM(HrmConstants.DEPTTABLE);
                if (params.get("dept") != null) {
                    Dept dept = (Dept) params.get("dept");
   
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值