Spring Boot【二】—— JPA查询数据库

这篇博客详细介绍了如何在Spring Boot项目中使用JPA进行数据库查询。内容包括添加JPA、MySQL依赖,配置application.yml文件,创建实体Bean,使用Repository进行查询,Controller类的访问,以及解决在开发过程中遇到的常见问题,如Column 'id' not found和Unknown column 'user0_.user_name' in 'field list'错误。

一、pom.xml添加jpa、mysql等依赖

		<!--添加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>
            <scope>runtime</scope>
        </dependency>
        <!--添加lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2、jpa说明

jpa即Java持久化查询语言 (JPQL),对存储在关系数据库中的实体进行查询。在语法上类似于SQL查询,操作的是实体对象而不是直接对数据库表进行操作,流程如下:
1、将数据库表映射到项目实体中
2、生成对应的 Repository
3、实现 Service ,Service 中调用 Repository

3、lombok说明

lombok是一个工具类库,可以用简单的注解形式来简化代码,提高开发效率,其中@Data 注解可以省去代码中大量的get()、 set()、 toString()等方法;

二、application.yml配置连接数据库的配置文件

1、配置文件

#数据库连接
spring:
#数据库连接
  jpa:
    hibernate:
      ddl-auto: validate
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    database-platform: org.hibernate.dialect.MySQL8Dialect
    show-sql: true
  datasource:
  # 数据库连接地址,加载jdbc驱动
    url: jdbc:mysql://localhost:3306/analyse?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT
    username: root
    password: 901102
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      # 最长生命周期,0表示无限生命周期
      max-lifetime: 0
      # 连接池最大连接数,默认是10
      maximum-pool-size: 10
      # 最小空闲连接数量
      minimum-idle: 5
    type: com.zaxxer.hikari.HikariDataSource

2、Hibernate说明

Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
ddl-auto: validate 项目启动表结构进行校验 如果不一致则报错

3、hikari连接池说明

hikari是一款高效的jsbc数据库连接池,连接池负责管理、分配、释放数据库的连接,避免因频繁的建立、释放数据库连接造成的系统性能开销。
springboot2.0之后采用的默认数据库连接池就是Hikari。不需要引入依赖,可以直接使用。
在这里插入图片描述
在这里插入图片描述

三、创建实体bean定义数据库表

1、实现代码

package com.skylittleprince.spring_demo.dao.entity;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * @author 小王子
 */
@Data
@Entity(name = "user_msg")
public class UserMsgList {
    //自增ID
    @Id
    private int id;

    @Column(name = "useid")
    private String useId;

    @Column(name = "phone")
    private String phone;
}

2、jpa之@Entity、@Id、@Column注解说明

1)、@Entity:表明注解下的类是实体类,具备一个属性name,表示数据库下的表名;
2)@Id:指定表的主键。
3)、@Column:映射表中字段名,

属性含义
name映射的列名
unique是否唯一
nullable是否允许为空
length对于字符型列,length属性指定列的最大字符长度
insertable是否允许插入
updatetable是否允许更新
columnDefinition定义建表时创建此列的DDL
secondaryTable从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字

四、Repository创建数据库查询

1、代码实现

package com.skylittleprince.spring_demo.dao.repository;

import com.skylittleprince.spring_demo.dao.entity.UserMsgList;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
 * @author 小王子
 */
public interface UserMsgDao extends JpaRepository<UserMsgList,String> {
    /**
     * 返回用户表信息
     */
    @Query("SELECT * From user_msg ")
    List<String> findAllMsg();
}

2、interface接口说明

interface继承父接口,获得父接口里定义的所有抽象方法,常量属性,内部类等定义,并重写父接口的方法。

3、JpaRepository说明

JpaRepository延伸PagingAndSortingRepository,延伸CrudRepository。
1)CrudRepository 主要提供CRUD功能。
2)PagingAndSortingRepository 提供分页和排序的方法。PagingAndSortingRepository扩展了CrudRepository
3)JpaRepository 添加特定JPA方法,例如刷新持久性上下文和批量删除记录。JpaRepository扩展了PagingAndSortingRepository。

五、controller类访问

package com.skylittleprince.spring_demo.controller;

import com.skylittleprince.spring_demo.dao.entity.UserMsgList;
import com.skylittleprince.spring_demo.dao.repository.UserMsgDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 测试Demo
 * @author:小王子
 * @creat:2020/06/11
 */

@RestController
public class UserMsgController {
    @Autowired
    private UserMsgDao userMsgDao;
    @RequestMapping("/hello")
    @ResponseBody
    public List<UserMsgList> useMsg(){
        List<UserMsgList> userMsgList = userMsgDao.findAllMsg();
        return userMsgList;
    }
}

六、结果展现

在这里插入图片描述

七、常见问题

1、java.sql.SQLException: Column ‘id’ not found。

原因:
1)检查数据库表及映射是否存在都id且是否正确映射;
2)Your query doesn’t return a field named id,即返回结果集中用到id,但是查询sql中没有查询出主键id列,解决方案:查询结果带上id。
在这里插入图片描述

2、java.sql.SQLException: Unknown column ‘user0_.user_name’ in ‘field list’ 报错问题

原因:大小写驼峰转换问题。

  @Column(name = "useId")
    private String useId;

userId指定对应数据库中的 userId 字段。但是,hibernate 会 按照驼峰命名规范 将 userName 转成 user_name 。因此@Column( name=“userId” ) 里的name 改成 name=“userid”,这个问题就解决了.

  @Column(name = "useid")
    private String useId;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值