maven搭建JPA开发环境
1 依赖的maven pom文件
    主要有hibernate-core、hibernate-entitymanager、javax-persistence、mysql驱动
<?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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>jap-xx</artifactId>
<groupId>com.cmos</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>jpa-01</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hibernate.version>4.3.8.Final</hibernate.version>
<junit.version>4.12</junit.version>
<java.version>1.8</java.version>
</properties> <dependencies>
<!--hibernate-core-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- hibernate-entitymanager-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!--javax.persistence-->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</project>
2 配置persistence.xml文件
    在资源文件夹下创建META-INF文件夹,创建persistence.xml文件

<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/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="com.cmos.jpa" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql:///jpa"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="gosaint"/>
<!--mysql方言-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<!--显示sql-->
<property name="hibernate.show_sql" value="true"/>
<!--自动建表-->
<property name="hibernate.hbm2ddl.auto" value="create"/>
<!--格式化sql-->
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
3 创建实体类Employee类。
    新建数据库,名为jpa,配置好上述的persistence.xml文件;新建实体类Employee

package com.cmos.jpa;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
private String password;
...
省略getter()和setter()
}

4 新建测试类EmployeeTest

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence; import com.cmos.jpa.Employee; import org.junit.Test; public class EmployeeTest { @Test
public void save() throws Exception {
Employee employee=new Employee();
employee.setName("张三");
employee.setPassword("123456");
String persistenceUnitName="com.cmos.jpa";
// 1 获取实例管理工厂
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
// 2 获取实例管理对象
EntityManager entityManager = entityManagerFactory.createEntityManager();
// JAP默认事务不开启
EntityTransaction transaction = entityManager.getTransaction();
//3 开启事务
transaction.begin();
//4 持久化操作
entityManager.persist(employee);
//5 提交事务
transaction.commit();
//6 关闭资源
entityManager.close();
entityManagerFactory.close(); }
}
如下的结果显示:

查看数据库,发现存在测试数据!
5 注解解释
上述的注解解释:
① @Entity:表示实体对象,这个对象和数据库的表建立对应关系
② @Table(name="表名") 如果没有配置该注解或者该注解使用默认值关系,那么表的名称为类名称,首字母小写
③ @Id 表示主键
④ @GeneratedValue 配置主键的生成策略,默认值是@GeneratedValue(strategy = GenerationType.AUTO)
 主键策略如果是:strategy = GenerationType.AUTO  在Mysql中就是:主键:AUTO_INCREMENT,在Oracle中就是序列;
表示主键自动
⑤ @Column注解:加在字段上,如果希望字段的名称和数据库对应的字段不一致,可以使用该注解,并且设置对应的列名;如果希望一致,可以不用加该注解
6 工具类抽取

public class JPAUtils {
private static EntityManagerFactory entityManagerFactory;
static {
try {
String persistenceUnitName="com.cmos.jpa";
entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
}catch (Exception e){
throw new RuntimeException("配置文件出错"+e.getMessage());
} }
public static EntityManager getEntity(){
return entityManagerFactory.createEntityManager();
} public static void close(){
if(entityManagerFactory!=null){
entityManagerFactory.close();
}
}
}
7 测试CRUD操作
    补充:建表策略是create:表示先删除表,然后建立新的表;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence; import com.cmos.jpa.Employee;
import com.cmos.jpa.JPAUtils; import org.junit.Before;
import org.junit.Test; /**
* 查询一个: find(T.class,Long id)
* 修改: merge(T)
* 保存:persistence(T)
* 删除:remove(T) 直接删除对象
*
*/
public class EmployeeTest2 {
/**
* 保存
*/
@Before
public void save(){
Employee employee=new Employee();
employee.setName("张三");
employee.setPassword("123456");
Employee employee2=new Employee();
employee2.setName("里斯");
employee2.setPassword("123456");
EntityManager entity = JPAUtils.getEntity();
EntityTransaction transaction = entity.getTransaction();//获取事务
transaction.begin();
entity.persist(employee);
transaction.commit();
}
@Test
public void queryAndUpdate(){
EntityManager entity = JPAUtils.getEntity();
entity.getTransaction().begin();
//查询
Employee employee = entity.find(Employee.class, 1L);
System.out.println(employee);
employee.setName("xyz");
employee.setPassword("99999");
//修改
entity.merge(employee);
System.out.println(employee);
entity.getTransaction().commit();
} @Test
public void delete(){
EntityManager entity = JPAUtils.getEntity();
entity.getTransaction().begin();
Employee employee = entity.find(Employee.class, 1L);
entity.remove(employee);
System.out.println(employee);
entity.getTransaction().commit();
} //JPQL查询
@Test
public void queryJPQL(){
EntityManager entity = JPAUtils.getEntity();
entity.getTransaction().begin();
String jpql="select o from Employee o";
Query query = entity.createQuery(jpql);
List<Employee> resultList = query.getResultList();
for (Employee e:resultList) {
System.out.println("0000000000");
System.out.println(e);
}
entity.getTransaction().commit(); } }
7 配置自动建表
create-drop:删除表----建表----删除表(一般不用)
 删除表的时间:EntityManageFactory关闭之后
create----删除表----建立表
update----用在项目中
validate----数据库已经存在(项目已经上线)
总结:JPA的CRUD操作:
查询:find或者使用JPQL查询;
保存:persistence
修改:merge
删除: remove
 
 
 
 
 
 
 
 
 
 
 
 

1 JPA入门----项目搭建以及CRUD的更多相关文章

  1. 004-Spring boot 快速入门-项目搭建与启动、SpringBootApplication、启动图标

    一.官方地址 Spring:http://spring.io/ Spring Project:http://spring.io/projects Spring boot:https://project ...

  2. 002-Spring4 快速入门-项目搭建、基于注解的开发bean,Bean创建和装配、基于注解的开发bean,Bean初始化销毁、Bean装配,注解、Bean依赖注入

    一.项目搭建 1.项目创建 eclipse→project explorer→new→Project→Maven Project 默认配置即可创建项目 2.spring配置 <dependenc ...

  3. 【Unity/Kinect】Kinect入门——项目搭建

    本文是Unity Store里的官方Demo包中的ReadMe翻译(别人翻的),介绍了用Unity如何入门搭建起一个Kinect项目工程. 非常感谢下面这位大大的无私奉献! http://www.ma ...

  4. eslint 入门项目搭建过程

    github 地址 : https://github.com/gebin/eslint-demo 运行该项目 npm install npm start 访问 http://localhost:900 ...

  5. Vue -cli 入门 --项目搭建(一)

    一. 安装node.js环境. 在node.js官网下载稳定版本(https://nodejs.org/en/) 下载完成后点击安装,安装过程很简单,一直next即可,安装完成会自动添加node及np ...

  6. 架构师入门:搭建双注册中心的高可用Eureka架构(基于项目实战)

    本文的案例是基于 架构师入门:搭建基本的Eureka架构(从项目里抽取) 改写的. 在上文里,我们演示Eureka客户端调用服务的整个流程,在这部分里我们将在架构上有所改进.大家可以想象下,在上文里案 ...

  7. Vue-cli入门(一)——项目搭建

    Vue-cli入门(一)——项目搭建 前言: Vue-cli是一款基于vue的项目脚手架工具,其集成了webpack环境和主要的依赖,对于我们的项目搭建.开发.打包.维护管理等都是非常的方便. 主要内 ...

  8. 入门项目数字手写体识别:使用Keras完成CNN模型搭建(重要)

    摘要: 本文是通过Keras实现深度学习入门项目——数字手写体识别,整个流程介绍比较详细,适合初学者上手实践. 对于图像分类任务而言,卷积神经网络(CNN)是目前最优的网络结构,没有之一.在面部识别. ...

  9. SpringCloud学习之手把手教你用IDEA搭建入门项目(三)

    本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(二)>,不清楚的请到我的博客空间查看后再看本篇博客,上面两篇博客成功创建了一个简单的SpringCloud项目 ...

随机推荐

  1. 《Scala入坑笔记》缘起 3天就搞了一个 hello world

    有小伙伴向我咨询 play framework 的问题,我就想了解一下 play framework ,按照官方的文档,要使用 SBT 安装,就掉进了 SBT 的坑. 第一坑:国外仓库太慢 安装完成后 ...

  2. boost库做什么用呢?

    1.C++标准库不是已经很全面了吗?Boost又不是界面库,它主要解决些什么问题呢?哪类问题?2.Boost的开发人员都是C++标准委员会的吧,为什么没把它列做标准库,有什么不完善的问题吗? 3.Bo ...

  3. Win7系统64位环境下使用Apache——下载mod_jk

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/70313329 本文出自[我是干勾鱼的博客] 之前在几篇文章: Win7系统64位 ...

  4. 关于for循环中是否需要缓存length值的个人总结

    在JS性能优化中,有一个常见的小优化,即 // 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = arr.leng ...

  5. 【解题报告】[动态规划]RQNOJ PID2 / 开心的金明

    原题地址:http://www.rqnoj.cn/problem/2 解题思路:背包问题. 状态转移方程:DP[i][j]=max(DP[i-v[j]][j-1]+p[j]*v[j],DP[i][j- ...

  6. HihoCoder 1044 01-string 贪心

    1144 : 01串 时间限制:7000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001& ...

  7. linux用netstat查看服务及监听端口

    [root@localhost ~]# netstat -nlp netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接 ...

  8. 手把手使用 Webpack 4 建立 VUE 项目

    手把手使用 Webpack 4 建立 VUE 项目 安装 node.js 略 安装 cnpm 略 安装 webpack cnpm install webpack -g 安装 vue-cli cnpm ...

  9. Rancher使用入门

    http://tonybai.com/2016/04/14/an-introduction-about-rancher/

  10. 用Toast来增加调试效率的小技巧

    import android.content.Context; import android.widget.Toast; /** * Created by apple on 10/7/15. */ p ...