前言
SpringBoot数据库开发可以有两种方式,一种是集成MyBatis,另一种是集成JPA。这里选择了集成JPA来进行数据库层开发。
环境:
IDEA:2018.3.3
Java:1.8
这里假设你已经配置好Java与IDEA,并使用Maven构建了一个新的SpringBoot项目,该项目继承了Spring-boot-starter项目。如果没有可以参看文章:新建SpringBoot项目、配置基本的Web项目
介绍
JPA是Sun官方提出的Java持久化规范,其主要作用是简化持久化开发工作和整合ORM技术,结束各大ORM框架各自为营的局面。
JPA是一个规范,是一组接口。Hibernate是JPA的实现技术之一。所以JPA和Hibernate一起使用(当然也可以选择其他实现技术)。
Spring Data JPA 在JPA的基础上进一步进行了封装,它封装了不同ORM框架间的代码差异性,同时也简化了代码,但是它仍是一组接口,也需要与Hibernate一起使用。
开发实例
在pom.xml文件中加入
<dependencies>
<!--Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--MySQL JDBC -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
在application.properties文件中加入
spring.datasource.url=jdbc:mysql://localhost:3306/its?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Hibernate逆向工程
点击右侧“DataBase”,新建数据库连接,如下图:
输入连接名、域名、数据库名、用户名、密码,如下:
点击图中“MySQL”,配置MySQL驱动包,如下图。jar包可以一键下载。配置完成后回到上图点击“Test Connection”,出现“Successful”后说明配置成功。
右击,选择"Scripted Extensions"->“Go to Scripts Directory”,打开pojo类模板,修改模板
修改模板的内容
……
packageName = "com.example.platform.domain;" //修改包名
……
……
def generate(out, className, fields) {
out.println "package $packageName"
out.println "import javax.persistence.*;"
out.println ""
out.println ""
out.println "@Entity" //在类名前加注解
out.println "public class $className {"
out.println ""
fields.each() {
if (it.annos != "") out.println " ${it.annos}"
if (it.name == "id") { //对于主键,前面加上主键以及自增的注解
out.println "@Id"
out.println "@GeneratedValue(strategy = GenerationType.IDENTITY)"
}
out.println " private ${it.type} ${it.name};"
}
out.println ""
fields.each() {
out.println ""
out.println " public ${it.type} get${it.name.capitalize()}() {"
out.println " return ${it.name};"
out.println " }"
out.println ""
out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
out.println " this.${it.name} = ${it.name};"
out.println " }"
out.println ""
}
out.println "}"
}
……
选择所有的表,选择"Scripted Extensions"->“Generate POJOs.groovy”
选择好pojo类的包,点击OK。那么所有的POJO类就已经生成好了。
DAO接口
@Repository:表明该类是一个DAO类
import com.example.platform.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserDao extends JpaRepository<User, Long> {
}
Service类
@Service:表明该类是一个Service类
@Resource:自动注入。没有用@Autowired的原因是这个注解需要构造器,因为没有写所有就用了Java中自带的注解。
import com.example.platform.domain.User;
import com.example.platform.repository.UserDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserService {
@Resource
private UserDao userDao;
public String Login(User user){
List<User> userList = userDao.findAll();
boolean flag = false;
for(User item : userList){
if(item.getAccount().equals(user.getAccount()) && item.getPassword().equals(user.getPassword()))
flag = true;
}
if(flag) return "success";
else return "fail";
}
}
Controller类
@Controller:表明该类是一个Controller类
@RequestMapping:设置请求路径,写在类上对该类的所有方法都适用。比如login的请求路径是/user/login
@ResponseBody:返回时自动转换为json格式。除字符串外。
import com.example.platform.domain.User;
import com.example.platform.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Resource
private UserService userService;
@ResponseBody
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String Login(String account, String password){
User user = new User(account, password);
return userService.Login(user);
}
}
测试
点击"Tools"->“HTTP Client”->“Test RESTful Web Service”
输入Path和Request Parameters后,点击左边绿色箭头运行。
运行成功。那么简单的数据库层开发就搞定了。