美文网首页spring boot
spring boot+jpa简单实现

spring boot+jpa简单实现

作者: dancer4code | 来源:发表于2019-10-05 16:45 被阅读0次

    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

    搞定了......

    相关文章

      网友评论

        本文标题:spring boot+jpa简单实现

        本文链接:https://www.haomeiwen.com/subject/dptypctx.html