前面的体验告一段落了。这里开始,做些实际业务的服务。一般情况,服务是需要连接数据库的。我们先从数据库连接开始。选择MySQL数据库
新建模块
在前面的bhparent下面建立一个模块
先来个用户管理的服务,命名为bh-user。
稍微调整下目录
pom.xml文件内容
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.biboheart.demos</groupId>
<artifactId>bhparent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>bh-user</artifactId>
<name>bh-user</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
</dependencies>
</project>
在父项目的pom.xml或本项目的pom.xml中加入bh-brick组件,代码中用到比较多。我是加到bhparent中了。
<dependency>
<groupId>com.biboheart</groupId>
<artifactId>bh-brick</artifactId>
<version>0.0.1</version>
</dependency>
引入组件
要连接数据,需要用到两个组件。spring data jpa和mysql连接器
完成后的pom.xml
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.biboheart.demos</groupId>
<artifactId>bhparent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>bh-user</artifactId>
<name>bh-user</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
配置文件
在src/main目录下建立resources文件夹,创建文件application.yml
内容如下:
server:
# 服务端口号
port: 8080
spring:
datasource:
# MYSQL数据库驱动
driver-class-name: com.mysql.jdbc.Driver
# 数据库地址
url: jdbc:mysql://localhost:3306/bhdemos?useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&createDatabaseIfNotExist=true
# 数据库用户名
username: root
# 数据库密码
password: root
jpa:
database: default
# 开发时显示sql,部署到生产环境时设为false
show-sql: true
# 使用mysql方言
database-platform: org.hibernate.dialect.MySQL5Dialect
hibernate:
# 下面两个配置对应hibernate的属性
ddl-auto: update
properties:
hibernate:
# 格式化sql 语句
format_sql: true
# LOGGING
logging:
level:
root: info
创建spring boot入口文件
创建文件:UserApplication.class
package com.biboheart.demo.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
到此,目录结构如下:
数据库连接
建立一个包:com.biboheart.demo.user.domain,这个包下放数据模型
创建类文件User
package com.biboheart.demo.user.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data
@Entity
@Table(name = "bh_user_user")
public class User {
@Id
@GeneratedValue
private Long id; // 用户ID
private String name; // 用户名称
private String phone; // 电话号码
private Long birthday; // 生日
private Long createTime; // 创建时间
private Long updateTime; // 最后修改时间
}
先简单建立些字段,用到时再加入。
前面在创建父工程的时候在pom中已经引入了lombok组件,在这里可以用@Data来代替setter getter。
建立包:com.biboheart.demo.user.repository 在这个包下放数据库连接的类,即jpa的接口
创建 interface:com.biboheart.demo.user.repository.UserRepository
内容如下:
package com.biboheart.demo.user.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import com.biboheart.demo.user.domain.User;
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
}
数据库连接就完成了
服务开发
建立包:com.biboheart.demo.user.service,这个包下面存放服务类
创建用户服务接口:interface UserService
package com.biboheart.demo.user.service;
import java.util.List;
import com.biboheart.brick.exception.BhException;
import com.biboheart.demo.user.domain.User;
public interface UserService {
/**
* 保存用户信息
*
* @param user
* 用户信息对象
* @return 保存成功后的用户信息或null
* @throws BhException 参数异常捕获
*/
public User save(User user) throws BhException;
/**
* 删除用户
*
* @param id
* 用户ID
* @return 返回删除成功的用户信息或null
*/
public User delete(Long id);
/**
* 查询用户信息
*
* @param id
* 用户ID
* @return 用户信息或null
*/
public User load(Long id);
/**
* 用户列表
*
* @return 返回用户对象列表
*/
public List<User> list();
}
创建包:com.biboheart.demo.user.service.impl,存放服务的实现
创建实例类:UserServiceImpl 实例 UserService
package com.biboheart.demo.user.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.biboheart.brick.exception.BhException;
import com.biboheart.brick.utils.CheckUtils;
import com.biboheart.brick.utils.TimeUtils;
import com.biboheart.demo.user.domain.User;
import com.biboheart.demo.user.repository.UserRepository;
import com.biboheart.demo.user.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User save(User user) throws BhException {
if (null == user.getId()) {
user.setId(0L);
}
// 以下用到了 com.biboheart.brick 中的BhException,CheckUtils.isEmpty,TimeUtils.getCurrentTimeInMillis
if (CheckUtils.isEmpty(user.getName())) {
throw new BhException("用户名称不能为空");
}
Long now = TimeUtils.getCurrentTimeInMillis(); // 取当前时间戳
if (CheckUtils.isEmpty(user.getCreateTime())) {
user.setCreateTime(now);
}
user.setUpdateTime(now);
user = userRepository.save(user);
return user;
}
@Override
public User delete(Long id) {
if (CheckUtils.isEmpty(id)) {
return null;
}
User user = userRepository.findById(id).get();
if (null != user) {
userRepository.delete(user);
}
return user;
}
@Override
public User load(Long id) {
if (CheckUtils.isEmpty(id)) {
return null;
}
User user = userRepository.findById(id).get();
return user;
}
@Override
public List<User> list() {
List<User> users = userRepository.findAll();
return users;
}
}
开放接口
创建包:com.biboheart.demo.user.controller,用于存放控制器类
创建类:UserController
package com.biboheart.demo.user.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.biboheart.brick.exception.BhException;
import com.biboheart.brick.model.BhResponseResult;
import com.biboheart.demo.user.domain.User;
import com.biboheart.demo.user.service.UserService;
@RestController
public class UserController {
@Autowired
private UserService userService;
/**
* 保存用户信息
* @param user 用户信息对象
* @return
* @throws BhException
*/
@RequestMapping(value = "/userapi/user/save", method = {RequestMethod.POST})
public BhResponseResult<?> save(User user) throws BhException {
user = userService.save(user);
return new BhResponseResult<>(0, "success", user);
}
/**
* 删除用户
* @param id
* @return
*/
@RequestMapping(value = "/userapi/user/delete", method = {RequestMethod.POST, RequestMethod.GET})
public BhResponseResult<?> delete(Long id) {
User user = userService.delete(id);
return new BhResponseResult<>(0, "success", user);
}
/**
* 查询用户
* @param id
* @return
*/
@RequestMapping(value = "/userapi/user/load", method = {RequestMethod.POST, RequestMethod.GET})
public BhResponseResult<?> load(Long id) {
User user = userService.load(id);
return new BhResponseResult<>(0, "success", user);
}
/**
* 用户列表
* @return
*/
@RequestMapping(value = "/userapi/user/list", method = {RequestMethod.POST, RequestMethod.GET})
public BhResponseResult<?> list() {
List<User> users = userService.list();
return new BhResponseResult<>(0, "success", users);
}
}
测试
用API工具测试下
如果name为空,报错
再添加一个,用于测试删除
测试了每个API,一切正常。
总结
一个简单的数据增删查就完成了。修改的话也是save接口,只要把id字段传进去就是修改。这里只考虑了name不能为空的情况做测试。
可能有人不明白为什么没有讲到去数据库操作。这里用了hibernate自动建库建表的功能。从头到尾都不用操作数据库的。
- 配置文件
- 数据库连接
- 服务开发
- 开放接口