spring boot

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.结果

result

返回的结果中,中文乱码
可以自定义一个解决乱码的过滤器
比如:

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-------");
    }
}

请参考
彻底搞定乱码-自定义过滤器(filter)-3

最终解决乱码

result

demo代码请参考gitee spring-boot-lab

搞定了......

上一篇下一篇

猜你喜欢

热点阅读