zoukankan      html  css  js  c++  java
  • 第五章 SpringBoot系列配置JPA访问数据

    系列文章目录

    第一章 SpringBoot系列之从0搭建项目
    第二章 SpringBoot系列返回json数据
    第三章 SpringBoot系列GlobalException全局异常捕获
    第四章 SpringBoot系列整合Mybatis做增删改查
    第五章 SpringBoot系列配置JPA访问数据
    第六章 SpringBoot系列使用JdbcTemplate操作数据
    第七章 SpringBoot系列静态资源处理,访问磁盘文件


    前言

    上一章内容主要写配置Mybatis访问数据,本章咱来看看如何配置JPA访问数据,根据自己需要选择持久层框架,JPA使用相对与Mybatis来说非常简单,写写SQL然后了解JPA常用API就能对表做增删改查操作了,适用于简单查询较复杂查询不是那么友好,具体使用哪一种持久层框架根据自己需求评估吧。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、JPA持久层框架简介

    JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

    二、mysql建表

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : test
    Source Server Version : 50718
    Source Host           : localhost:3306
    Source Database       : demo
    
    Target Server Type    : MYSQL
    Target Server Version : 50718
    File Encoding         : 65001
    
    Date: 2020-10-27 10:04:01
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `person`
    -- ----------------------------
    DROP TABLE IF EXISTS `person`;
    CREATE TABLE `person` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `name` varchar(100) NOT NULL,
      `age` int(3) NOT NULL,
      `sex` char(1) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
    
    -- ----------------------------
    -- Records of person
    -- ----------------------------
    INSERT INTO `person` VALUES ('1', 'lc', '18', '男');
    

    三、整合JPA相关配置

    1.在pom.xml文件中加入JPA依赖配置、mysql驱动包配置,并导入下载依赖jar包。

    pom.xml文件配置:

    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>5.1.47</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    

    2.application.properties配置

    ########################################################
    ###datasource
    ########################################################
    #数据库连接地址
    spring.datasource.url = jdbc:mysql://cdb-khlq4cod.gz.tencentcdb.com:10157/demo?useSSL=false
    #用户名
    spring.datasource.username = root
    #密码
    spring.datasource.password = Iccc@2020
    #驱动包
    spring.datasource.driver-class-name = com.mysql.jdbc.Driver
    #指定连接池中最大的活跃连接数.
    spring.datasource.max-active=20
    #指定连接池最大的空闲连接数量.
    spring.datasource.max-idle=8
    #指定连接池最小的空闲连接数量.
    spring.datasource.min-idle=0
    
    #######################################################
    ## Java Persistence Api
    #######################################################
    # Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query
    spring.jpa.show-sql = true
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto = update
    # Naming strategy
    spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
    # stripped before adding them to the entity manager) 新版本的mysql配置
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
    #老版本的mysql 配置
    #spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
    

    3.Entity表映射实体类

    package com.example.demo.model;

    import javax.persistence.*;
    import java.io.Serializable;

    /**

    • person
    • @author
      */
    @Entity
    @Table(name = "person")
    public class PersonDO implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(name = "name")
        private String name;
    
        @Column(name = "age")
        private Integer age;
    
        @Column(name = "sex")
        private String sex;
    
        private static final long serialVersionUID = 1L;
    
        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;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    }
    

    4.持久层dao

    持久层JPA提供了Repository接口,以及其子接口实现了基本的CURD操作,如:CrudRepository,PagingAndSortingRepository,SimpleJpaRepository,QueryDslJpaRepository等,我们在写持久层可继承以上接口使用。

    package com.example.demo.dao;
    
    import com.example.demo.model.PersonDO;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.query.Param;
    
    public interface PersonDao extends JpaRepository<PersonDO, Long> {
    
        @Query(value = "select id,name,age,sex from person where id = :id", nativeQuery = true)
        public PersonDO selectOne(@Param("id") Long id);
    }
    

    5.service层

    package com.example.demo.service;
    
    import com.example.demo.dao.PersonDao;
    import com.example.demo.model.PersonDO;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class PersonService {
    
        @Autowired
        private PersonDao personDao;
    
        public PersonDO selectPersonInfoJpaDemo(Long id) {
            return personDao.selectOne(id);
        }
    }
    

    6.controller层

    package com.example.demo.controller;
    
    import com.example.demo.dto.JsonDataDTO;
    import com.example.demo.model.PersonDO;
    import com.example.demo.service.PersonService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/")
    public class DemoController {
    
        @Autowired
        private PersonService personService;
        
        @RequestMapping("/selectPersonInfoJpaDemo")
        public PersonDO selectPersonInfoJApademo(@RequestParam("id") Long id) {
            return personService.selectPersonInfoJpaDemo(id);
        }
    }
    

    四、demo运行效果

    浏览器访问:http://localhost:8080/selectPersonInfoJpaDemo?id=1
    在这里插入图片描述

    总结

    本章技术分享主要讲述如何在SpringBoot中运用JPA持久层框架对数据库进行操作,实现起来确实要比Mybatis简单不少,没有了Mybatis的Mapper.xml映射配置文件,通过实现JPA提供抽象接口或注解自定义SQL操作数据库,JPA优点就是简单上手快,缺点就是无法做复杂度高的查询,例如一对多,多对多等查询。

  • 相关阅读:
    SSRS 2012 创建ReportServer数据库失败: The RPC server is not listening. (Exception from HRESULT: 0x800706B3)
    关于SSIS包调用,把Execute out of Process 设成True后运行失败问题
    Mark:Insert, Update, and Delete Destination table with SSIS
    转SSIS 2012 pass values from child package to parent with project deployment model
    [转]SSIS Parameter和Variable的区别
    转SQL SERVER – SSIS Parameters in Parent-Child ETL Architectures – Notes from the Field #040
    简单的plsql to tsql ,游标拆解
    TSQL 根据表名生成UPDATE SELECT INSERT
    SPLIT CURSOR INTO ROWSET DML
    c/c++ tricks
  • 原文地址:https://www.cnblogs.com/javakfz/p/13938207.html
Copyright © 2011-2022 走看看