主要调用工具类JpaUtils类

package cn.itcast.utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
* 解决静态实体管理器工厂的浪费资源和耗时问题
* 通过静态代码块的形式,当程序第一次访问此工具类时,创建一个公共的实体管理器工厂对象
*
* 第一次访问getEntityManager方法:经过静态代码块创建一个factory对象,再调用方法创建一个EntityManager对象
* 第二次访问getEntityManager方法:直接通过一个已经创建好的factory对象,创建EntityManager对象
*/
public class JpaUtils {
private static EntityManagerFactory factory;
static {
//1.加载配置文件,创建entityManagerFactory
factory = Persistence.createEntityManagerFactory("myJpa");
}
/**
* 获取EntityManager对象
*/
public static EntityManager getEntityManager(){
return factory.createEntityManager();
}
}
主要在persistence.xml更改一下把之前的create插入改成update更新
<property name="hibernate.hbm2ddl.auto" value="create"/>

主要的实体类

package cn.itcast.domain;

import javax.persistence.*;

/**
* 客户实体类
* 配置映射关系
* 1、实体类和表的映射关系
* 2、实体类中属性和表中字段的映射关系
* @Entity:声明实体类
* @Table:配置实体类和表的映射关系
* name:配置数据库标的名称
* 2.实体类中属性和表中字段的映射光线
*/
@Entity
@Table(name = "cst_customer")
public class Customer {
/**
* @Id:声明主键配置
* @GeneratedValue:配置主键的生成策略
* GenerationType.IDENTITY:自增 MySQL
* 底层数据库必须支持自增长
* GenerationType.SEQUENCE:序列 oracle
* 底层数据库必须支持序列
* GenerationType.TABLE:
* jpa提供的一种机制,通过一张数据库表的形式帮助我们完成自增长
* GenerationType.AUTO:
* 有程序自动的帮助我们选择主键生成策略
* @Column:配置属性和字段的映射关系
* name:数据库中字段的名称
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cust_id")
private Long custId;//客户主键
@Column(name = "cust_name")
private String custName;//客户名称
@Column(name = "cust_source")
private String custSource;//客户来源
@Column(name = "cust_industry")
private String custIndustry;//客户级别
@Column(name = "cust_level")
private String custLevel;//客户所属行业
@Column(name = "cust_address")
private String custAddress;//客户地址
@Column(name = "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;
}

@Override
public String toString() {
return "Customer{" +
"custId=" + custId +
", custName='" + custName + '\'' +
", custSource='" + custSource + '\'' +
", custIndustry='" + custIndustry + '\'' +
", custLevel='" + custLevel + '\'' +
", custAddress='" + custAddress + '\'' +
", custPhone='" + custPhone + '\'' +
'}';
}
}
最后测试testFind类
/**
* 根据id查询客户
*/
public void testFind(){
//1根据工具类获取entityManager
EntityManager entityManager=JpaUtils.getEntityManager();
//3.获取事务对象,开启事务
EntityTransaction transaction=entityManager.getTransaction();//获取事务对象
transaction.begin();//开启事务
//3.增删改查--根据id查询客户
Customer customer=entityManager.find(Customer.class,1l);
System.out.print(customer);
//5.提交事务(回滚事务)
transaction.commit();
//6.释放资源
entityManager.close();
}
在测试的时候主要在第三步的增删改查中,调用entityManager中的方法,如
1、删除调用remove(Object)方法
//3.增删改查--删除客户
//根据id查询客户
Customer customer=entityManager.find(Customer.class,1l);
//调用remove方法完成删除工作
entityManager.remove(customer);

2、更新调用merge(Object)方法
//3.增删改查--更新操作
//i查询操作
Customer customer=entityManager.find(Customer.class,1l);
//ii更新客户
customer.setCustIndustry("IT农码");
entityManager.merge(customer);

Spring Data JPA 基础第二篇的更多相关文章

  1. 【Spring Data 系列学习】Spring Data JPA 基础查询

    [Spring Data 系列学习]Spring Data JPA 基础查询 前面的章节简单讲解了 了解 Spring Data JPA . Jpa 和 Hibernate,本章节开始通过案例上手 S ...

  2. Spring Data JPA教程, 第二部分: CRUD(翻译)

    我的Spring Data Jpa教程的第一部分描述了,如何配置Spring Data JPA,本博文进一步描述怎样使用Spring Data JPA创建一个简单的CRUD应用.该应用要求如下: pe ...

  3. spring data jpa 创建方法名进行简单查询

    版权声明:本文为博主原创文章,未经博主允许不得转载. spring data jpa 可以通过在接口中按照规定语法创建一个方法进行查询,spring data jpa 基础接口中,如CrudRepos ...

  4. Spring Data JPA 教程(翻译)

    写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...

  5. Spring Data JPA 整合Spring 第二篇

    主要是在CustomerDao中去写一些代码,在调用Query中去用SQL 例如 public interface CustomerDao extends JpaRepository<Custo ...

  6. Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL

    在数据访问这章的第一篇文章<Spring中使用JdbcTemplate访问数据库> 中,我们已经介绍了如何使用Spring Boot中最基本的jdbc模块来实现关系型数据库的数据读写操作. ...

  7. Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置

    上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...

  8. Spring Data Jpa 详解 (配置篇)

    前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...

  9. SpringBoot第九篇:整合Spring Data JPA

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10910059.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言   前面几章, ...

随机推荐

  1. 攻克solo第七课(Randy Rhoads风格)

    本期文章,笔者将通过Guitar Pro 7吉他软件跟大家分享一下Randy Rhoads的solo句子. 相信很多精研电吉他的朋友都会听过这个一手把Ozzy Osbourne从离开黑色安息日乐队的深 ...

  2. FL Studio中有关减少CPU占用率的一些技巧

    在使用FL Studio20进行音乐制作时经常容易碰到的工程卡顿,声音延迟现象绝大部分是由于电脑CPU超负荷运行而导致的.除了提升电脑本身的性能以外,在FL Studio20中我们也可以运用一些方法来 ...

  3. ABBYY FineReader文档对比实例讲解

    ABBYY FineReader企业版与标准版有一个重大的区别,就是企业版有对比文档的功能,今天通过下面的文档对比实例,来向大家展示一下OCR文字识别工具ABBYY FineReader的使用技巧. ...

  4. 一键加Q群的实现

    打开网址 选择创建的群 选择所需要的二维码或者代码

  5. thinkphp3.2 添加自定义类似__ROOT__的变量

    1 thinkphp3.2 添加自定义类似__ROOT__的变量 2 3 在config.php文件中 4 return array( 5 '' => '', 6 'TMPL_PARSE_STR ...

  6. 【ACwing 96】奇怪的汉诺塔——区间dp

    (题面来自ACwing) 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆盘,n的数量是恒定的. 3.每个圆盘的尺寸都不相同. 4.所有的圆盘在开始时都堆叠在塔A上,且圆盘尺 ...

  7. E - Knapsack 2 题解(超大01背包)

    题目链接 题目大意 给你一n(n<=100)个物品,物品价值最大为1e3,物品体积最多为1e9,背包最大为1e9 题目思路 如果按照平常的背包来算那么时间复杂度直接O(1e11) 这个你观察就发 ...

  8. 「实验课选题详解」用C语言实现万年历

    题目要求 编程实现万年历,要求: 可根据用户输入或系统日期进行初始化,如果用户无输入则显示系统日期所在月份的月历,并突出显示当前日期: 可根据用户输入的日期查询,并显示查询结果所在月份的月历,突出显示 ...

  9. 【mq读书笔记】mq消息发送

    钩子的注册: DefaultMQProducerImpl#registerSendMessageHook注册钩子处理类,可注册多个. public SendResult sendMessage( fi ...

  10. On-Demand Learning for Deep Image Restoration

    摘要 论文来源:ICCV 2017 之前的缺点:目前的机器学习方法只专注于在特定困难程度的图像损坏(如一定程度的噪声或模糊)情况下进行良好的训练模型. 改进的方法:提出了一种基于深度卷积神经网络的按需 ...