首先jpa就是持久层的一个数据框架,类似于mybatis,下面简单的搭建一个springboot工程使用jpa访问数据库的小项目.首先给大家看一下项目录结构
1.环境搭建
首先创建一个springboot工程,导入相关依赖,我把我的依赖放在下面,可以进行参考
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.spirng_jpa</groupId>
<artifactId>jpa_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jpa_demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置yml文件
spring:
application:
name: jpa-demo
datasource:
url: jdbc:mysql://localhost:3306/exe?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&autoReconnect=false&nullCatalogMeansCurrent=true
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update #配置自动建表:updata:没有表新建,有表更新操作,控制台显示建表语句
show-sql: true # 日志中显示sql
server:
port: 8989
2.代码示例
创建controller,service,mapper,pojo包和类
1.首先创建bean文件,一下根据自己数据库的表进行创建,一下是我的代码示例
package com.spirng_jpa.jpa_demo.pojo;
import lombok.Data;
import javax.persistence.*;
/**
* @Date:2022/03/11 16:54
* * @Author: weijunwei
*/
//使用jpq注解配置映射关系
@Entity
//用来对应数据库中那张表,如果不写就代表user表
@Table(name = "biz_standardproduct")
@Data
public class User {
@Id
@Column
private String standard_prod_appr_state;
@Column
private String material_prop;
@Column
private String standard_product_no;
}
package com.spirng_jpa.jpa_demo.pojo;
import lombok.Data;
import javax.persistence.*;
/**
* @Date:2022/03/11 16:54
* * @Author: weijunwei
*/
//使用jpq注解配置映射关系
@Entity
//用来对应数据库中那张表,如果不写就代表user表
@Table(name = "biz_productinfoextend")
@Data
public class User1 {
@Id
@Column
private String product_no;
private String standard_product_no;
public String getProduct_no() {
return product_no;
}
public void setProduct_no(String product_no) {
this.product_no = product_no;
}
public String getStandard_product_no() {
return standard_product_no;
}
public void setStandard_product_no(String standard_product_no) {
this.standard_product_no = standard_product_no;
}
}
2.创建返回值的工具类
package com.spirng_jpa.jpa_demo.pojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper=false)
@Data
@Accessors(chain = true)
public class ResultEntity {
private boolean success = true;
private String message;
private String code;
private Object data;
public ResultEntity(boolean success, String message) {
this.success = success;
this.message = message;
}
public ResultEntity() {
}
public static ResultEntity fail(String message) {
return new ResultEntity(false, message);
}
}
3.根据自己的需求编写controller 和service的代码,我做的是查询和更新,全部写在controller中了,可以作为参考
package com.spirng_jpa.jpa_demo.controller;
import com.spirng_jpa.jpa_demo.mapper.JpaDemoDsl;
import com.spirng_jpa.jpa_demo.pojo.ResultEntity;
import com.spirng_jpa.jpa_demo.pojo.User;
import com.spirng_jpa.jpa_demo.pojo.User1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
/**
* @Date:2022/03/11 16:54
* @Author: weijunwei
*/
@RestController
public class JpaDemoController {
@Autowired
private EntityManager entityManager;
@Autowired
private JpaDemoDsl jpaDemoDsl;
@RequestMapping("jpa")
public List<User> show() {
List<User> users = jpaDemoDsl.findAll();
System.out.println("你好");
System.out.println("你好");
return users;
}
@CrossOrigin
@Transactional
@GetMapping("/find")
public ResultEntity find(@RequestParam("standard_product_no")String standard_product_no) {
ResultEntity entity = new ResultEntity();
Query query = entityManager.createNativeQuery("select standard_prod_appr_state,material_prop,standard_product_no FROM biz_standardproduct where standard_product_no = '" + standard_product_no + "'",User.class);
List<User> users = query.getResultList();
if (users.get(0).getMaterial_prop().equals("1")&&users.get(0).getStandard_prod_appr_state().equals("1")){
System.out.println("1");
User1 user11 = entityManager.find(User1.class,standard_product_no);
user11.setStandard_product_no(standard_product_no);
entityManager.merge(user11);
//return ("插入成功");
entity.setCode("1").setMessage("插入成功").setSuccess(true);
return entity;
}else {
entity.setCode("2").setMessage("插入失败,请检查物料状态!").setSuccess(false);
return entity;
}
}
}
package com.spirng_jpa.jpa_demo.mapper;
import com.spirng_jpa.jpa_demo.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import java.util.List;
public interface JpaDemoDsl extends JpaRepository<User,Integer> {
}
因为我写的是小工具,所以前端页面就随便的写写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>物料新增</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
</head>
<body>
<div>请输入产品编号:</div>
<input type="text" name="standard_product_no" class="numbervalue" />
<input type="submit" value="提交" class="submitbtn" />
<script>
$('.submitbtn').on('click',function (){
$.ajax({
url:"http://localhost:8081/find",
type:"get",
data:{
standard_product_no: $('.numbervalue').val()
},
dataType: 'json',
success:function(res){
console.log(res)
res.success == true ? alert('插入成功!') : alert('插入失败!请检查物料状态')
},
timeout:5000
})
})
</script>
</body>
</html>
这就使用jpa大概完成了一个查询修改数据库的操作