在前面的文章中,我们对springboot开发中一些常用的框架进行了集成,但是发现还是存在一些问题,比如druid还需要比较长的固有配置,实际上druid官方是提供了相关的starters包的,内部采用默认配置。
什么是springboot的starters包?
SpringBoot Starters是基于约定优于配置的理念来设计的,像之前的集成中还是有一定的配置量的,当然我们只是用Java代码在进行配置,SpringBoot Starters中有两个核心组件,一个是自动配置代码,一个是自动配置模块和其它有用的相关依赖。
这也就意味着,我们只要引入某个Starters就可以使相关框架拥有默认配置的能力,除非我们需要特定配置,一般情况下我们只需要少部分配置或者不配置就可以使用相关的组件了。
Druid是提供了相关的Starters,我们只需要引入Starters到pom.xml就可以直接使用了
通过Starters包集成Druid
这次我们用idea内部的构建工具来创建一个SpringBoot项目
这个时候我们已经完成了一大半工作了,接着我们在pom.xml引入druid的Starters
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
数据库我们使用MySQL的所以在引入一个MySQL的连接驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
接着配置一下application.yml就基本完成了
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 3
min-idle: 3
max-active: 10
max-wait: 60000
stat-view-servlet:
login-username: admin
login-password: admin
filter:
stat:
log-slow-sql: true
slow-sql-millis: 2000
我们直接启动项目
访问http://localhost:8080/druid/login.html地址,就可以看见druid的监控界面了
然后输入配置文件中配置的用户名和密码进行登录admin
可以看到我们项目的基本信息以及数据源。
这样比上次的druid集成要简单很多对吧
我们在进一步集成mybatis
集成mybatis
引入mybatis
先引入xml节点
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
为了方便测试先建个表
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 50643
Source Host : localhost:3306
Source Schema : demo
Target Server Type : MySQL
Target Server Version : 50643
File Encoding : 65001
Date: 18/03/2019 14:20:08
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
---
-- Table structure for test_user
---
DROP TABLE IF EXISTS test_user;
CREATE TABLE test_user (
id int(255) NOT NULL AUTO_INCREMENT COMMENT '主键',
user_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
password varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
---
-- Records of test_user
---
INSERT INTO test_user VALUES (1, '用户', '123456');
INSERT INTO test_user VALUES (2, '胡汉三', 'hhs123456');
INSERT INTO test_user VALUES (3, '王五', '123456');
INSERT INTO test_user VALUES (4, 'test', 'test');
SET FOREIGN_KEY_CHECKS = 1;
这个表是建立在我配置文件指定的数据库下的,请注意一下
配置mybatis
mybatis:
mapper-locations: classpath:mappers/*/Mapper.xml
type-aliases-package: com.ccsert.spdruid.*.model
configuration:
map-underscore-to-camel-case: true
logging:
file: logs/mass.log
level:
org.springframework: info
com.ccsert: DEBUG
配置一下mybatis和log日志以及sql打印
然后在resources下建立mappers用来存放mapper,xml文件,这些步骤其实和上次的集成是一样的基本没区别
接着建立一个test包
然后在test包建立mapper,service,model,controller四个包准备工作基本做完了
mybatis使用
开始使用,先在model下建立TestUser类
emmm用一下lombok,引入一下
关于lombok,idea支持需要安装相应的插件
按Ctrl+Alt+S,唤出设置
点击Plugins搜索Lombok
然后安装Lombok Plugin插件,接着重启idea,这样idea就支持lombok注解了。(上次没有讲,真是抱歉)
接着刚才
package com.ccsert.spdruid.test.model;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter@Setter@ToString
public class TestUser {
private Integer Id;
private String userName;
private String password;
}
然后我们写mapper
在mapper建立一个TestUserMapper接口
package com.ccsert.spdruid.test.mapper;
import com.ccsert.spdruid.test.model.TestUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface TestUserMapper {
List<TestUser> getall();
TestUser getById(Integer id);
int save(TestUser testUser);
}
然后我们写Service层
在service包下建立UserTestService接口
这里就写一个根据id查用户和查询所有以及新增用户三个方法
package com.ccsert.spdruid.test.service;
import com.ccsert.spdruid.test.model.TestUser;
import java.util.List;
public interface TestUserService {
List<TestUser> getall();
TestUser getById(Integer id);
int save(TestUser testUser);
}
然后在service下建一个impl包,在impl包下创建一个TestUserService的实现类TestUserServiceImpl
package com.ccsert.spdruid.test.service.impl;
import com.ccsert.spdruid.test.mapper.TestUserMapper;
import com.ccsert.spdruid.test.model.TestUser;
import com.ccsert.spdruid.test.service.TestUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class TestUserServiceImpl implements TestUserService {
@Resource
private TestUserMapper testUserMapper;
@Override
public List<TestUser> getall() {
return testUserMapper.getall();
}
@Override
public TestUser getById(Integer id) {
return testUserMapper.getById(id);
}
@Override
public int save(TestUser testUser) {
return testUserMapper.save(testUser);
}
}
接下来就是写xml了,在mappers目录下建立一个TestUser目录,然后在该目录下建立一个TestUserMapper.xml文件
<?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.ccsert.spdruid.test.mapper.TestUserMapper" >
<resultMap id="BaseResultMap" type="com.ccsert.spdruid.test.model.TestUser" >
<id column="id" property="Id" />
<result column="user_name" property="userName"/>
<result column="password" property="password" />
</resultMap>
<select id="getall" resultMap="BaseResultMap">
SELECT
id,user_name,password
FROM
test_user
</select>
<select id="getById" parameterType="Integer" resultMap="BaseResultMap">
SELECT
id,user_name,password
FROM
test_user
WHERE id=#{id}
</select>
<insert id="insert" parameterType="com.ccsert.spdruid.test.model.TestUser" >
INSERT INTO
save
(user_name,password)
VALUES
(#{user_name}, #{password})
</insert>
</mapper>
建立TestUserController类
package com.ccsert.spdruid.test.controller;
import com.ccsert.spdruid.test.model.TestUser;
import com.ccsert.spdruid.test.service.TestUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TestUserController {
@Autowired
private TestUserService testUserService;
@GetMapping("/getall")
public List<TestUser> getAll(){
return testUserService.getall();
}
@GetMapping("/getById/{id}")
public TestUser getById(@PathVariable Integer id){
return testUserService.getById(id);
}
@PostMapping("/save")
public int save(TestUser testUser){
return testUserService.save(testUser);
}
}
这里用到RESTful api的设计风格使请求地址看起来更美观
测试使用
启动项目然后用Restlet Client - REST API Testing插件测试一下,Restlet Client - REST API Testing是一款chrome的扩展插件,功能类似于postman,建立大家可以装一个。需要翻墙,到时候我会把相关插件工具发在群里。
先测试getall,这里geitall必须使用get请求
然后接着是getById,这里传参的时候只需要把id放在请求路径后面就可以了,比如getById/1,同样也必须是get请求
接着是save,save必须是post请求,保存用户成功后会返回一个条数
因为id是自增长所以不需要传入,去数据库查看一下是否有该数据
可以看到该数据已经成功插入了。