写在前面
- 传送门 Spring Boot入门篇一
- 遇到问题先百度,没有什么百度解决不了的问题,如果没有,就谷歌。
- 上回我们谈到如果使用 Spring Boot 构建一个简单的 JSP 项目,这里是官方提供的 spring-boot-sample-tomcat-jsp ,不清楚的可以移步到这里。
- 这回,我们沿用上回搭建好的框架继续往里面添加东西。
本篇目标
- 集成 mysql 数据库
- 集成 spring-data-jpa
- 创建 User 类
- 创建 UserDao 类
- 创建 UserService 接口及其实现类
- 创建 UserController 类
- 并且,前端通过 ajax 实现一个简单的查询功能
实现步骤
1. 集成 mysql 数据库
这个很简单,只需要在我们的 pom.xml
文件中,增加 mysql 的依赖,代码如下:
mysql
mysql-connector-java
然后,配置我们的数据源,哪里配置? 对了,在我们的 application.properties
文件中,不知道的同学可以看下第一篇讲的。下面是我的配置:
# mysql connection config
spring.datasource.url=jdbc\:mysql\://localhost\:3306/archer?useUnicode\=true&characterEncoding\=utf8
spring.datasource.username=admin
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
至此,我们 mysql 的集成已经告一段落了,
2. Spring Data JPA 集成
下面是 spring-data-jpa 的集成。同样,你也需求在 pom.xml
中增加相关依赖:
org.springframework.boot
spring-boot-starter-data-jpa
在 application.properties
中增加 JPA 的相关配置:
# JPA
spring.jpa.open-in-view=true
spring.jpa.hibernate.ddl-auto=update
这里需要说下这两个配置的作用:
-
spring.jpa.open-in-view=true
- 官方解释:Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the thread for the entire processing of the request. 翻译一下就是说:注册 OpenEntityManagerInViewInterceptor 拦截器。将JPA EntityManager 绑定到整个请求处理的线程。
-
spring.jpa.hibernate.ddl-auto=update
- 当我们创建好实体类,启动项目,这个配置会帮我们自动创建表。
3. 创建 User 类
完整的代码如下:
package com.example.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = -2248190721476487645L;
@Id
@SequenceGenerator(name = "user_generator", sequenceName = "user_generator", initialValue = 23)
@GeneratedValue(generator = "user_generator")
@Column(name = "id")
private Long id;
@Column(name = "name", nullable = false)
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4. 创建 UserDao 类
完成的代码如下:
package com.example.dao;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.example.domain.User;
public interface UserDao extends PagingAndSortingRepository {
Page findAll(Pageable pageable);
@Query("from User as u")
List findUsers();
User findByName(String name);
}
5. 创建 UserService 接口及其实现类
以下是 UserService
接口的完整代码:
package com.example.service;
import java.util.List;
import com.example.domain.User;
public interface UserService {
List findUser();
}
我这里只定义了一个查询接口,主要是为了演示。下面是它的实现类的完整代码,即 UserServiceImpl
类:
package com.example.service;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.example.dao.UserDao;
import com.example.domain.User;
@Component("userService")
@Transactional
public class UserServiceImpl implements UserService {
private final UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public List findUser() {
return this.userDao.findUsers();
}
}
6. 创建 UserController 类
完整的代码如下:
package com.example.web;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.domain.User;
import com.example.service.UserService;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/user/list")
@ResponseBody
@Transactional(readOnly = true)
public List getUsers() {
return userService.findUser();
}
}
所有的后台代码都已经编写完成,下面我们来测试一下。
7. 使用 Ajax 测试后端 Restful API 接口
- 首先,我们需要在
index.jsp
中引入jQuery
工具库和我们自定义的 js 文件:
- 其次,我们需要在
main.js
中增加如下代码:
;(function($) {
// 声明严格模式
'use strict';
// DOM 加载完成执行
$(function () {
// 异步加载数据
$.ajax({
url: './user/list',
type: 'POST',
dataType: 'JSON',
success: function (data) {
console.log(data); // [{id:1, name:"zs"},{id:2, name:"李思"}]
}
});
});
})(jQuery)
当我们访问 localhost:8080
按 F12
启用 chrome 浏览器控制台可以看到:
image.png
好了,感谢你的阅读,Enjoy it~
相关资源
- application.xml 官方配置清单
- spring-boot-sample-data-jpa 官方示例