SpringBoot框架实战3,配置MyBatis
2018-06-15 本文已影响174人
面皮大师
(1)安装数据库
可以使用mysql也可以使用mariadb,自行安装就可以(可以下载在电脑上安装也可以用Docker安装)。
连接数据库可以选择用命令行,也可以用IDEA自带的DataBase链接工具,也可以使用MySqlWorkBench,推荐用MySqlWorkBench。
(2)创建数据库和表
创建数据库zhoumo,这里选择用utf8字符集
创建数据库简单创建一张表admin
admin(3)项目文件结构介绍
项目文件结构如上图,
config:中放置一些配置文件和枚举文件等。
controller:当然放controller了。
dao:放置数据库操作类。
model.domain:放从数据库直接查询出来的对象。
model.dto:放返回给用户的对象。
model.param:放用户查询时传入的对象。
service:放复杂操作时,对dao层进行整合。
备注知识点:
application.properties可以右键直接修改后缀名改为yaml,yaml可以百度一下,比properties要好用一下,层次更加明了。
@Data项目中的POJO对象,加上这个注释可以省去Get和Set方法,这是一个IDEA的插件,使用方法很简单,第一在IDEA安装这个插件,第二在POM文件中配置相应的依赖。
(4)代码介绍
# 数据库配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.mariadb.jdbc.Driver
name: zhoumo
url: jdbc:mariadb://127.0.0.1:3306/zhoumo
username: root
password: 123456
druid:
validationQuery: SELECT 1
initialSize: 10
minIdle: 10
maxActive: 200
minEvictableIdleTimeMillis: 180000
testOnBorrow: false
testWhileIdle: true
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: true
poolPreparedStatements: true
maxOpenPreparedStatements: 100
# 日志
logging:
level:
org.springframework.security: INFO
com.wuhu.zhoumo: DEBUG
yaml文件,配置数据源(这个里面用到了一些驱动需要在POM文件中添加),打印日志的这一句很重要,可以在控制台打印mybatis的sql语句和参数,很方便调试。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wuhu</groupId>
<artifactId>zhoumo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ZhouMo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<!--mariadb-->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>1.5.9</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
都是一些基础的依赖,了解一下。
package com.wuhu.zhoumo.dao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.wuhu.zhoumo.model.domain.AdminDO;
import com.wuhu.zhoumo.model.param.AdminParam;
/**
* @author sdl
* @date 2018/6/11
*/
@Mapper
public interface AdminDAO {
/**
* 根据用户名密码查询
*
* @param adminParam 参数
* @return 对象
*/
@Select("SELECT * FROM `zhoumo`.`admin` where userName =#{userName} and password =#{password};")
AdminDO findByUserNameAndPassword(AdminParam adminParam);
}
数据库操作的DAO对象,增删改查都在这里面写。
package com.wuhu.zhoumo.config;
/**
* @author sdl
* @date 2018/6/15
*/
public enum CodeEnum {
/**
* 操作成功
*/
SUCCESS(true, "1000", "操作成功"),
/**
* 数据不存在
*/
DATA_NOT_FOUND(false, "1001", "数据不存在"),
/**
* 数据删除失败
*/
DELETE_FAILED(false, "1002", "数据删除失败"),
/**
* 数据新增失败
*/
INSERT_FAILED(false, "1003", "数据新增失败"),
/**
* 数据更新失败
*/
UPDATE_FAILED(false, "1004", "数据更新失败"),
/**
* 接口访问超时
*/
SOCKET_TIMEOUT(false, "1005", "接口访问超时"),
/**
* 加密失败
*/
ENCRYPT_ERROR(false, "1006", "加密失败"),
/**
* 解密失败
*/
DECRYPT_ERROR(false, "1007", "解密失败"),
/**
* 参数异常
*/
PARAMS_ERROR(false, "1008", "参数异常"),
/**
* 服务器内部错误
*/
UNKNOWN_ERROR(false, "1009", "服务器内部错误"),
/**
* 用户名或密码错误
*/
LOGIN_ERROR(false, "1010", "用户名或密码错误");
/**
* 成功状态
*/
private Boolean success;
/**
* CODE
*/
private String code;
/**
* message
*/
private String message;
/**
* 构造方法
*/
CodeEnum(Boolean success, String code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
/**
* 结果
*
* @return 操作结果
*/
public Boolean success() {
return this.success;
}
/**
* 编号
*
* @return 操作结果编号
*/
public String code() {
return this.code;
}
/**
* 说明
*
* @return 操作结果说明
*/
public String message() {
return this.message;
}
}
枚举统一定义系统中的各种错误。
package com.wuhu.zhoumo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wuhu.zhoumo.config.CodeEnum;
import com.wuhu.zhoumo.dao.AdminDAO;
import com.wuhu.zhoumo.model.domain.AdminDO;
import com.wuhu.zhoumo.model.dto.AdminDTO;
import com.wuhu.zhoumo.model.param.AdminParam;
/**
* @author sdl
* @date 2018/6/12
*/
@RestController
public class AdminController {
/**
* DAO
*/
@Autowired
private AdminDAO adminDAO;
/**
* 登录
*
* @param adminParam 登录参数
* @return
*/
@GetMapping("login")
public AdminDTO login(AdminParam adminParam) {
AdminDTO adminDTO = null;
AdminDO adminDO = adminDAO.findByUserNameAndPassword(adminParam);
if (null != adminDO) {
adminDTO = new AdminDTO(CodeEnum.SUCCESS);
} else {
adminDTO = new AdminDTO(CodeEnum.LOGIN_ERROR);
}
return adminDTO;
}
}
controller,传入用户名密码,放回状态。
package com.wuhu.zhoumo.model.domain;
import lombok.Data;
/**
* @author sdl
* @date 2018/6/12
*/
@Data
public class AdminDO {
/**
* id
*/
private int id;
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
}
package com.wuhu.zhoumo.model.dto;
import com.wuhu.zhoumo.config.CodeEnum;
import lombok.Data;
/**
* @author sdl
* @date 2018/6/11
*/
@Data
public class AdminDTO extends BaseDTO {
/**
* 构造方法
*
* @param codeEnum
*/
public AdminDTO(CodeEnum codeEnum) {
super(codeEnum);
}
}
package com.wuhu.zhoumo.model.dto;
import com.wuhu.zhoumo.config.CodeEnum;
import lombok.Data;
/**
* @author sdl
* @date 2018/6/15
*/
@Data
public class BaseDTO {
/**
* 成功状态
*/
private Boolean success;
/**
* CODE
*/
private String code;
/**
* message
*/
private String message;
/**
* 构造方法
*/
public BaseDTO(CodeEnum codeEnum) {
this.code = codeEnum.code();
this.success = codeEnum.success();
this.message = codeEnum.message();
}
}
package com.wuhu.zhoumo.model.param;
import lombok.Data;
/**
* @author sdl
* @date 2018/6/12
*/
@Data
public class AdminParam {
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
}