JPA(java持久化API)的环境的搭建
因为我使用的是java工程
所以需要引入的依赖有:
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.7</maven.compiler.source>
- <maven.compiler.target>1.7</maven.compiler.target>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.hibernate.version>5.0.7.Final</project.hibernate.version>
- </properties>
- <dependencies>
- <!-- junit -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- <!-- hibernate对jpa的支持包 -->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <version>${project.hibernate.version}</version>
- </dependency>
- <!-- c3p0 -->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-c3p0</artifactId>
- <version>${project.hibernate.version}</version>
- </dependency>
- <!-- log日志 -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <!-- Mysql and MariaDB -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.6</version>
- </dependency>
- </dependencies>
2.创建客户的实体类和数据库表
- /*创建客户表*/
- CREATE TABLE cst_customer (
- cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
- cust_name varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
- cust_source varchar(32) DEFAULT NULL COMMENT '客户信息来源',
- cust_industry varchar(32) DEFAULT NULL COMMENT '客户所属行业',
- cust_level varchar(32) DEFAULT NULL COMMENT '客户级别',
- cust_address varchar(128) DEFAULT NULL COMMENT '客户联系地址',
- cust_phone varchar(64) DEFAULT NULL COMMENT '客户联系电话',
- PRIMARY KEY (`cust_id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
创建实体类
- public class Customer implements Serializable {
- private Long custId;
- private String custName;
- private String custSource;
- private String custIndustry;
- private String custLevel;
- private String custAddress;
- private String custPhone;
- public Long getCustId() {
- return custId;
- }
- public void setCustId(Long custId) {
- this.custId = custId;
- }
- public String getCustName() {
- return custName;
- }
- public void setCustName(String custName) {
- this.custName = custName;
- }
- public String getCustSource() {
- return custSource;
- }
- public void setCustSource(String custSource) {
- this.custSource = custSource;
- }
- public String getCustIndustry() {
- return custIndustry;
- }
- public void setCustIndustry(String custIndustry) {
- this.custIndustry = custIndustry;
- }
- public String getCustLevel() {
- return custLevel;
- }
- public void setCustLevel(String custLevel) {
- this.custLevel = custLevel;
- }
- public String getCustAddress() {
- return custAddress;
- }
- public void setCustAddress(String custAddress) {
- this.custAddress = custAddress;
- }
- public String getCustPhone() {
- return custPhone;
- }
- public void setCustPhone(String custPhone) {
- this.custPhone = custPhone;
- }
- }
3.编写实体类和数据库表的映射配置
在实体类上使用JPA注解的形式配置映射关系
- /**
- * * 所有的注解都是使用JPA的规范提供的注解,
- * * 所以在导入注解包的时候,一定要导入javax.persistence下的
- */
- @Entity //声明实体类
- @Table(name="cst_customer") //建立实体类和表的映射关系
- public class Customer {
- @Id//声明当前私有属性为主键
- @GeneratedValue(strategy=GenerationType.IDENTITY) //配置主键的生成策略
- @Column(name="cust_id") //指定和表中cust_id字段的映射关系
- private Long custId;
- @Column(name="cust_name") //指定和表中cust_name字段的映射关系
- private String custName;
- @Column(name="cust_source")//指定和表中cust_source字段的映射关系
- private String custSource;
- @Column(name="cust_industry")//指定和表中cust_industry字段的映射关系
- private String custIndustry;
- @Column(name="cust_level")//指定和表中cust_level字段的映射关系
- private String custLevel;
- @Column(name="cust_address")//指定和表中cust_address字段的映射关系
- private String custAddress;
- @Column(name="cust_phone")//指定和表中cust_phone字段的映射关系
- private String custPhone;
- public Long getCustId() {
- return custId;
- }
- public void setCustId(Long custId) {
- this.custId = custId;
- }
- public String getCustName() {
- return custName;
- }
- public void setCustName(String custName) {
- this.custName = custName;
- }
- public String getCustSource() {
- return custSource;
- }
- public void setCustSource(String custSource) {
- this.custSource = custSource;
- }
- public String getCustIndustry() {
- return custIndustry;
- }
- public void setCustIndustry(String custIndustry) {
- this.custIndustry = custIndustry;
- }
- public String getCustLevel() {
- return custLevel;
- }
- public void setCustLevel(String custLevel) {
- this.custLevel = custLevel;
- }
- public String getCustAddress() {
- return custAddress;
- }
- public void setCustAddress(String custAddress) {
- this.custAddress = custAddress;
- }
- public String getCustPhone() {
- return custPhone;
- }
- public void setCustPhone(String custPhone) {
- this.custPhone = custPhone;
- }
- }
常用的注解的说名:
- @Entity
- 作用:指定当前类是实体类。
- @Table
- 作用:指定实体类和表之间的对应关系。
- 属性:
- name:指定数据库表的名称
- @Id
- 作用:指定当前字段是主键。
- @GeneratedValue
- 作用:指定主键的生成方式。。
- 属性:
- strategy :指定主键生成策略。
- @Column
- 作用:指定实体类属性和数据库表之间的对应关系
- 属性:
- name:指定数据库表的列名称。
- unique:是否唯一
- nullable:是否可以为空
- inserttable:是否可以插入
- updateable:是否可以更新
- columnDefinition: 定义建表时创建此列的DDL
- secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点]
配置核心的配置文件:
在ajava工程的src路径下创建一个名为META-INF的文件夹,在此文件夹下创建一个名为persistence.xml的配置文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
- version="2.0">
- <!--配置持久化单元
- name:持久化单元名称
- transaction-type:事务类型
- RESOURCE_LOCAL:本地事务管理
- JTA:分布式事务管理 -->
- <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
- <!--配置JPA规范的服务提供商 -->
- <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
- <properties>
- <!-- 数据库驱动 -->
- <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
- <!-- 数据库地址 -->
- <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ssh" />
- <!-- 数据库用户名 -->
- <property name="javax.persistence.jdbc.user" value="root" />
- <!-- 数据库密码 -->
- <property name="javax.persistence.jdbc.password" value="111111" />
- <!--jpa提供者的可选配置:我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配 -->
- <property name="hibernate.show_sql" value="true" />
- <property name="hibernate.format_sql" value="true" />
- <property name="hibernate.hbm2ddl.auto" value="create" />
- </properties>
- </persistence-unit>
- </persistence>
实现curd操作
- package com.qingmu;
- import org.junit.Test;
- import javax.persistence.EntityManager;
- import javax.persistence.EntityManagerFactory;
- import javax.persistence.EntityTransaction;
- import javax.persistence.Persistence;
- /**
- * @Auther:qingmu
- * @Description:脚踏实地,只为出人头地
- * @Date:Created in 15:13 2019/5/14
- */
- public class SpringDataJPATest {
- /**
- * 增
- */
- @Test
- public void insertIntoTest(){
- //创建一个实体管理工厂,借助于Persistence中的静态方法.
- // 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
- //创建实体管理类
- EntityManager entityManager = entityManagerFactory.createEntityManager();
- //获取事务对象
- EntityTransaction transaction = entityManager.getTransaction();
- //开启事务
- transaction.begin();
- Customer customer = new Customer();
- customer.setCustName("青木");
- //保存操作
- entityManager.persist(customer);
- //事务进行提交
- transaction.commit();
- //关闭资源
- entityManager.close();
- entityManagerFactory.close();
- }
- /**
- * 查
- */
- @Test
- public void find1(){
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
- EntityManager entityManager = entityManagerFactory.createEntityManager();
- //查找,不需要添加事务
- Customer customer = entityManager.find(Customer.class, 1L);
- System.out.println(customer);
- entityManager.close();
- entityManagerFactory.close();
- }
- @Test
- public void find2(){
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
- EntityManager entityManager = entityManagerFactory.createEntityManager();
- Customer customer = entityManager.getReference(Customer.class, 1L);
- System.out.println(customer);
- entityManager.close();
- entityManagerFactory.close();
- }
- /**
- * 更新
- */
- @Test
- public void update(){
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
- EntityManager entityManager = entityManagerFactory.createEntityManager();
- EntityTransaction transaction = entityManager.getTransaction();
- transaction.begin();
- Customer customer = new Customer();
- customer.setCustId(1L);
- customer.setCustName("青木川崎");
- Customer customer1 = entityManager.merge(customer);
- System.out.println(customer1);
- transaction.commit();
- entityManager.close();
- entityManagerFactory.close();
- }
- /**
- * 删
- * 使用jpa进行删除的时候,需要先进行查询
- * 因为删除的时候,要删除的实体类没有被entityManagerFactory控制(也就是cache(缓存)中没有这个东西
- *所以不能进行删除
- */
- @Test
- public void delete(){
- /**
- * 创建实体类管理工厂,借助于Persistence来创建entityManagerFactory
- * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
- */
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
- //创建entityManager对象
- EntityManager entityManager = entityManagerFactory.createEntityManager();
- //创建事务
- EntityTransaction transaction = entityManager.getTransaction();
- //开启事务
- transaction.begin();
- Customer customer = entityManager.find(Customer.class, 1L);
- entityManager.remove(customer);
- transaction.commit();
- entityManager.close();
- }
- }
JPA(java持久化API)的环境的搭建的更多相关文章
- Java开发和运行环境的搭建
Java开发需要准备的东西? JDK+Eclipse 其中JDK的意思是Java开发工具包,Eclipse是进行用于做Java程序开发的工具(当然你也可以用记事本什么的去做). 其他开发工具:JCre ...
- 关于注解-Hebernate与JPA(java persistence api)
The JPA spec. defines the JPA annotation in the javax.persistence package. Hibernate not only implem ...
- JavaEE Tutorials (8) - Java持久化API介绍
8.1实体96 8.1.1实体类的需求97 8.1.2实体类中的持久化字段和属性97 8.1.3实体的主键101 8.1.4实体关系中的多重性103 8.1.5实体关系中的方向103 8.1.6实体中 ...
- 基于eclipse的java与mysql开发环境的搭建
本文主要介绍 Java与MySQL的连接 1.安装jdk 略~ 园子里有很多 2.安装mysql 略~ 3.下载并安装JDBC,通过mysql官网下载 http://dev.mysql.com/d ...
- JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
15.1二级缓存概述190 15.1.1控制实体是否可以缓存19115.2指定缓存模式设置来提高性能192 15.2.1设置缓存获取和存储模式192 15.2.2通过编程方式控制二级缓存194
- 【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)
首先.在開始搭建MyEclipse的开发环境之前.还有三步工具的安装须要完毕,仅仅要在安装配置成功之后才干够进入以下的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官 ...
- 在IDEA中搭建Java源码学习环境并上传到GitHub上
打开IDEA新建一个项目 创建一个最简单的Java项目即可 在项目命名填写该项目的名称,我这里写的项目名为Java_Source_Study 点击Finished,然后在项目的src目录下新建源码文件 ...
- Java Persistence API(转)
定义 Java Persistence API JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.[编辑本段]起源 Sun引入新的JPA ORM规范 ...
- JPA(Java Persistence API)Java持久化API-介绍
JPA全称: Java Persistence API JPA的宗旨是为POJO提供持久化标准规范,能够脱离容器独立运行,很方便开发和测试.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关 ...
随机推荐
- Django 分析(一)Requst、Middleware 和 Response 数据流
0. 前言 通过 Django 编写 HTTP 接口时,我们需要指定 URL.Model 和 Views 函数(或者指定 RESTBaseView 对象解析参数和编写逻辑) 编写逻辑时的基本思路就是解 ...
- Shell脚本之一 Shell脚本简介
一.什么是shell? 我们平时所说的 Shell 可以理解为 Linux 系统提供给用户的使用界面.Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境.当一个用户登录 Linux 之后 ...
- centos上nginx转发tcp请求
下载最新版nginx > wget http://nginx.org/download/nginx-1.17.1.tar.gz 解压缩 > tar zxvf nginx-1.17.1.ta ...
- history 用法大全
history 命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件. 语法 history [options] [file] ...
- SpringBoot工程常见报错汇总
1.Springboot测试类运行报错 java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you ...
- C语言创建链表
一.链表中结点的存储 链表的结点左边一部分是存放的数据,右边一部分是后继指针指向下一个结点的地址.C语言中通常定义一个结构体类型来存储一个结点,如下: struct node { int data; ...
- Java学习:泛型简介
泛型 泛型:是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型 泛型也可以看出是一个变量,用来接受数据类型 E e : Element 元素 T t : Type 类型 Array ...
- 使用php函数防止SQL注入方法
什么是SQL注入? SQL注入是指在你系统防御之外,某人将一段Mysql语句注入到你的数据库.注入通常发生在系统要求用户输入数据的时候,比如用户名的输入,用户可能输入的不是一个用户名,而是一段SQL语 ...
- C# 连接数据库的配置方法
写在前面 在项目的开发过程中我门常常遇到会忘记数据库连接的配置的写法的尴尬处境.俗话说,好记性不如烂笔头.所以,mark一下. 1.Sqlserver数据库连接 <connectionStrin ...
- django子应用
在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该 ...