目录
一、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;

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

1884

被折叠的 条评论
为什么被折叠?



