网站开发电脑内存要多少钱,可以做翻译任务的网站,wordpress 视频 插件,小程序代理是什么意思1.JPA介绍 JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术#xff0c;结束现在 Hibernate#xff0c;TopLink结束现在 HibernateTopLinkJDO 等 ORM 框架各自为营的凌乱局面。JPA 在充分吸收了现有HibernateTopLinkJDO 等ORM框架的基础上发展而来的具有易于使用伸缩性强等优点。从上面的解释中我们可以了解到JPA 是一套规范而类似 HibernateTopLinkJDO这些产品是实现了 JPA 规范。 spring Data JPA 是 Spring 基于 ORM 框架、JPA规范的基础上封装的一套 JPA 应用框架底层使用了 Hibernate 的 JPA 技术实现可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能且易于扩展学习并使用 Spring Data JPA 可以极大提高开发效率。 2.mysql环境搭建 参考代码仓库里面的mysql模块这里只贴出docker-compose.yml version: 3
services:mysql:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/mysql:5.7container_name: mysql_3306restart: unless-stopped volumes:- ./mysql/my.cnf:/etc/mysql/my.cnf- ./mysql/init-file.sql:/etc/mysql/init-file.sql- ./mysql/data:/var/lib/mysql
# - ./mysql/conf.d:/etc/mysql/conf.d- ./mysql/log/mysql/error.log:/var/log/mysql/error.log- ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d # init sql script directory -- tips: it can be excute when /var/lib/mysql is emptyenvironment: # set environment,equals docker run -eTZ: Asia/ShanghaiLANG: en_US.UTF-8MYSQL_ROOT_PASSWORD: root # set root passwordMYSQL_DATABASE: demo # init database nameports: # port mappping- 3306:3306 运行 docker-compose -f docker-compose.yml -p mysql5.7 up -d 3.代码工程 pom.xml ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringboot-demo/artifactIdgroupIdcom.et/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdjpa/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--jpa--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency/dependencies
/project entity package com.et.jpa.entity;import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;Entity
public class User {IdGenericGenerator(name system-uuid, strategy uuid)GeneratedValue(generator system-uuid)private String id;private String name;private Integer age;private Boolean sex;public String getId() {return id;}public void setId(String 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 Boolean getSex() {return sex;}public void setSex(Boolean sex) {this.sex sex;}
} 这里的一些注解解释如下 Entity 是一个类注解用来注解该类是一个实体类用来进行和数据库中的表建立关联关系首次启动项目的时候默认会在数据中生成一个同实体类相同名字的表table也可以通过注解中的 name 属性来修改表table名称 如Entity(name“user”) , 这样数据库中表的名称则是 user。该注解十分重要如果没有该注解首次启动项目的时候你会发现数据库没有生成对应的表。Table 注解也是一个类注解该注解可以用来修改表的名字该注解完全可以忽略掉不用Entity 注解已具备该注解的功能。Id 类的属性注解该注解表明该属性字段是一个主键该属性必须具备不可缺少。GeneratedValue 该注解通常和 Id 主键注解一起使用用来定义主键的呈现形式该注解通常有多种使用策略先总结如下GeneratedValue(strategy GenerationType.IDENTITY) 该注解由数据库自动生成主键自增型在 mysql 数据库中使用最频繁oracle 不支持。GeneratedValue(strategy GenerationType.AUTO) 主键由程序控制默认的主键生成策略oracle 默认是序列化的方式mysql 默认是主键自增的方式。GeneratedValue(strategy GenerationType.SEQUENCE) 根据底层数据库的序列来生成主键条件是数据库支持序列Oracle支持Mysql不支持。GeneratedValue(strategy GenerationType.TABLE) 使用一个特定的数据库表格来保存主键较少使用。 application.properties spring.jpa.hibernate.ddl-autoupdate
spring.datasource.urljdbc:mysql://localhost:3306/demo?useUnicodetruecharacterEncodingutf-8serverTimezoneGMT%2B8
spring.datasource.usernameroot
spring.datasource.passwordroot
#Camel case naming automatically converts to underline
spring.jpa.hibernate.naming.physical-strategyorg.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
#use mysql database
spring.jpa.databasemysql
# show sql
spring.jpa.show-sqltrue
server.port8088 这里重点简单介绍下spring.jpa.properties.hibernate.hbm2ddl.auto有几种配置 create表示每次加载Hibernate时都会删除上一次生成的表包括数据然后重新生成新表即使两次没有任何修改也会这样执行。适用于每次执行单测前清空数据库的场景。create-drop表示每次加载Hibernate时都会生成表但当SessionFactory关闭时所生成的表将自动删除。update最常用的属性值第一次加载Hibernate时创建数据表前提是需要先有数据库以后加载Hibernate时不会删除上一次生成的表会根据实体更新只新增字段不会删除字段即使实体中已经删除。validate每次加载Hibernate时都会验证数据表结构只会和已经存在的数据表进行比较根据model修改表结构但不会创建新表。不配置此项表示禁用自动建表功能 spring.jpa.show-sqltrue 该配置当在执行数据库操作的时候会在控制台打印 sql 语句方便我们检查排错等。 controller package com.et.jpa.controller;import com.et.jpa.entity.User;
import com.et.jpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;RestController
public class HelloWorldController {Autowiredprivate UserRepository userRepository;RequestMapping(/hello)ResponseBodypublic MapString, Object showHelloWorld(){MapString, Object map new HashMap();map.put(msg, HelloWorld);return map;}RequestMapping(/add)public User add(String name){User user new User();user.setName(name);return userRepository.save(user);}RequestMapping(/list)public IterableUser list(){IterableUser all userRepository.findAll();return all;}
} repository package com.et.jpa.repository;import com.et.jpa.entity.User;
import org.springframework.data.repository.CrudRepository;public interface UserRepository extends CrudRepositoryUser, String {} PagingAndSortingRepository 继承 CrudRepository、JpaRepository 继承 PagingAndSortingRepository也就是说 CrudRepository 提供基本的增删改查PagingAndSortingRepository 提供分页和排序方法JpaRepository 提供JPA需要的方法 代码仓库 https://github.com/Harries/springboot-demo 4.测试 启动spring boot应用会自动创建表查看控制台如下 Hibernate: create table user (id varchar(255) not null, age integer, name varchar(255), sex bit, primary key (id)) engineMyISAM 访问http://127.0.0.1:8088/add?namehblog2插入一条记录。控制台输出 Hibernate: insert into user (age, name, sex, id) values (?, ?, ?, ?) 访问http://127.0.0.1:8088/list查询表中数据控制台输出 Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_, user0_.sex as sex4_0_ from user user0_ 5.引用 http://www.liuhaihua.cn/archives/710351.htmlhttps://www.w3cschool.cn/article/1946cee4c53df8.html