spring boot+jpa简单实现
2019-10-05 本文已影响0人
dancer4code
1.创建maven项目
不演示了,想知道更多的自己百度
2.maven依赖
<!--提供很多方便的功能-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!--jpa只要导入这个就好-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql版本外在差异主要是驱动类的改变-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
3.启动类
package com.dancer4code.actuator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 9:57
* Description:
*/
@SpringBootApplication
//@ServletComponentScan(basePackages = "com.dancer4code.actuator.filter")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
4.配置文件application.yaml
server:
port: 8000
spring:
application:
name: actuator-demo
datasource:
url: jdbc:mysql://localhost:3307/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: mysqlzlq
jpa:
show-sql: true
open-in-view: true
management:
endpoint:
shutdown:
enabled: true
endpoints:
web:
exposure:
include: shutdown,*
base-path: /d4c/actuator
5.Dao
package com.dancer4code.actuator.dao;
import com.dancer4code.actuator.pojo.Student;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 17:20
* Description:
*/
public interface StudentDao extends JpaRepository<Student,Integer> {
}
6.实体类pojo
package com.dancer4code.actuator.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 17:14
* Description:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "student")
//@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator" )
@GenericGenerator(name = "uuid2", strategy = "com.dancer4code.actuator.utils.MyIdGenerator" )
public class Student implements Serializable{
@Id
//@GenericGenerator(name = "idGenerator", strategy = "increment")
@GeneratedValue(generator = "uuid2")
//@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
private String name;
private Integer age;
}
7.controller
package com.dancer4code.actuator.controller;
import com.alibaba.fastjson.JSONObject;
import com.dancer4code.actuator.dao.StudentDao;
import com.dancer4code.actuator.pojo.Student;
import com.dancer4code.actuator.utils.HttpJsonUtil;
import com.fasterxml.jackson.databind.util.JSONPObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 18:16
* Description:
*/
@RestController
@RequestMapping("student")
public class StudentController {
@Autowired
private StudentDao studentDao;
@Autowired
protected HttpServletRequest request ;
@Autowired
protected HttpServletResponse response ;
@Autowired
protected HttpSession session ;
@RequestMapping("add")
public void add(){
Student stu = new Student(null,"黄飞鸿",28);
studentDao.save(stu);
JSONObject jsonObject = new JSONObject();
jsonObject.put("result", "success");
jsonObject.put("message", "增加学生成功-id:"+stu.getId());
HttpJsonUtil.writeJsonData(response, jsonObject);
}
@RequestMapping("findAll")
public void findAll (){
//return studentDao.findAll();
List<Student> list = studentDao.findAll();
JSONObject jsonObject = new JSONObject();
jsonObject.put("result", "success");
jsonObject.put("message", "查询学生列表成功");
jsonObject.put("data",list);
HttpJsonUtil.writeJsonData(response, jsonObject);
}
}
8.util
package com.dancer4code.actuator.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 18:16
* Description:将Java Bean序列化为JSON字符串,响应到客户端
*/
public class HttpJsonUtil {
public static void writeJsonData(HttpServletResponse response, JSONObject jsonResponse) {
try {
response.setCharacterEncoding("UTF-8");
if (jsonResponse.containsKey("message") && jsonResponse.getString("message") != null && !jsonResponse.getString("message").isEmpty()) {
String message = URLEncoder.encode(jsonResponse.getString("message"), "utf-8");
jsonResponse.put("message", message);
}
response.getWriter().write(jsonResponse.toString());
response.getWriter().flush();
response.getWriter().close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeJsonData(HttpServletResponse response, JSONArray jsonArray) {
try {
response.setCharacterEncoding("UTF-8");
response.getWriter().write(jsonArray.toString());
response.getWriter().flush();
response.getWriter().close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeJsonData(HttpServletResponse response, String str) {
try {
response.setCharacterEncoding("UTF-8");
response.getWriter().write(str);
response.getWriter().flush();
response.getWriter().close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
自定义id生成类
请参考
spring boot+jpa演示id的生成策略及自定义id
package com.dancer4code.actuator.utils;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import java.io.Serializable;
import java.util.UUID;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 19:01
* Description:自定义id生成类
*/
public class MyIdGenerator implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
return "d4c-"+UUID.randomUUID();
}
}
9.结果
![](https://img.haomeiwen.com/i19382524/3f4b4a1d83ea0f76.png)
返回的结果中,中文乱码
可以自定义一个解决乱码的过滤器
比如:
package com.dancer4code.actuator.filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created with IntelliJ IDEA.
* User: liangqing.zhao(zlq)
* Date: 2019/10/4 19:45
* Description:
*/
@Component
//@WebFilter
//@Configuration
//@Order(value = 15)
public class MyCharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
//System.out.println("----------------MyCharacterEncordingFilter------doFilter-----------------");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
filterChain.doFilter(new MyRequest(request), response);
}
/*
* 1.写一个类实现与被增强对象相同的接口
* 2.定义一个变量,记住被增强的对象
* 3.定义一个构造方法,接受被增强对象
* 4.覆盖想增强的方法
* 5.对于不想增强的方法,直接调用被增强对象(目标对象)的方法
*/
class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
public MyRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String value = this.request.getParameter(name);
if (!request.getMethod().equalsIgnoreCase("get")) {
return value;
}
if (value == null) {
return null;
}
try {
return new String(value.getBytes("UTF-8"),
request.getCharacterEncoding());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//System.out.println("---MyCharacterEncordingFilter-----init-------");
}
@Override
public void destroy() {
//System.out.println("---MyCharacterEncordingFilter-----destroy-------");
}
}
最终解决乱码
![](https://img.haomeiwen.com/i19382524/3e8bf1edb044a0c2.png)
demo代码请参考gitee spring-boot-lab
搞定了......