`
chengyue2007
  • 浏览: 1493300 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JPA视频学习 增删改查

    博客分类:
  • JPA
阅读更多

3.定义实体bean:

import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
public class Person {

	private Integer id;
	private String name;
	private Date birthday;//1988-02-01
	private Gender gender=Gender.MAN;
	private String info;
	private Byte[] file;
	private String imagePathString;
	
	public Person(){
		
	}
	
	public Person(String name){
		this.name=name;
	}
	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	@Column(length=10,nullable=false)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Temporal(TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Enumerated(EnumType.STRING)//将索引值保存进数据库
	@Column(length=5,nullable=false) //设置长度
	public Gender getGender() {
		return gender;
	}

	public void setGender(Gender gender) {
		this.gender = gender;
	}

	@Lob //大数据字段的说明,用在String上面是个大文本类型
	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	@Lob //大数据字段说明,用在这里是存放二进制数据的类型
	@Basic(fetch=FetchType.LAZY)//延迟加载,当访问此属性的get方法时才会从数据库加载到内存,
	                            //此时必须保证em处于打开状态,否则会有延迟加载错误。
	public Byte[] getFile() {
		return file;
	}

	public void setFile(Byte[] file) {
		this.file = file;
	}

	public void setImagePathString(String imagePathString) {
		this.imagePathString = imagePathString;
	}

	@Transient //此属性不成为持久化字段
	public String getImagePathString() {
		return imagePathString;
	}
	
	
	
	
}
枚举类:
package com.persia.jpa;

public enum Gender {
  MAN,WOMAN
}

4.添加测试方法:

package junit.test;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.BeforeClass;
import org.junit.Test;
import com.persia.jpa.Person;

public class PersonTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	
	}
    
	//@Test 
	public void save(){
		EntityManagerFactory fac=Persistence.createEntityManagerFactory("HelloJPAPU");
		//此时数据库表已经建立,若没有表,很可能是实体的注解出错了。
		EntityManager em=fac.createEntityManager();
		em.getTransaction().begin();//开启事务
		Person person=new Person("linda");
		person.setBirthday(new Date());
		em.persist(person);
		em.getTransaction().commit();//提交事务
		em.close();
		fac.close();
	}
	
	//@Test 
	public void getPerson(){
		//读取不用开启事务
		EntityManagerFactory fac=Persistence.createEntityManagerFactory("HelloJPAPU");
		EntityManager em=fac.createEntityManager();
		
		Person p=em.find(Person.class, 1);//不存在返回null
		System.out.println(p.getName());
		
		em.close();
		fac.close();
	}
	
	//@Test 
	public void getPerson2(){
		//读取不用开启事务
		EntityManagerFactory fac=Persistence.createEntityManagerFactory("HelloJPAPU");
		EntityManager em=fac.createEntityManager();
		
		Person p=em.getReference(Person.class, 2);//延迟初始化,不会立刻从数据库得到记录,只是得到一个代理对象	                                         
		System.out.println(p.getName()); //当我们访问这个代理对象的属性时,才从数据库得到记录,此时必须保证em是开着的,否则出现延迟加载例外。
		                                //此时若访问时,不存在该实体则抛出例外EntityNotFoundException
		em.close();
		fac.close();
	}
	
	//@Test
	public void updatePerson(){
		EntityManagerFactory fac=Persistence.createEntityManagerFactory("HelloJPAPU");
		EntityManager em=fac.createEntityManager();
		em.getTransaction().begin();//开启事务
		Person p=em.find(Person.class, 1);
		p.setName("helloworld");//此时可以更新,主要有如下:
		/**
		 * 1.跟当前事务关联
		 * 2.实体bean的状态为托管状态
		 * 
		 * 实体的状态:
		 * 1.新建 new 
		 * 2.托管 managed
		 * 3.游离(脱管)
		 * 4.删除
		 */
		em.getTransaction().commit();//提交事务
		em.close();
		fac.close();
	}
	
	//@Test
	public void updatePerson2(){
		EntityManagerFactory fac=Persistence.createEntityManagerFactory("HelloJPAPU");
		EntityManager em=fac.createEntityManager();
		em.getTransaction().begin();//开启事务
		Person p=em.find(Person.class, 1);
		em.clear();//把实体管理器中的所有实体变成游离状态,此时应该用merge来更新
		p.setName("hello3");//此时可以更新,主要有如下:
		em.merge(p);//用于把对处于游离状态的实体bean的更新同步到数据库。
		em.getTransaction().commit();//提交事务
		em.close();
		fac.close();
	}
	
	@Test
	public void delete(){
		EntityManagerFactory fac=Persistence.createEntityManagerFactory("HelloJPAPU");
		EntityManager em=fac.createEntityManager();
		em.getTransaction().begin();//开启事务
		Person p=em.find(Person.class, 1);
		em.remove(p);//删除托管状态的实体bean
		em.getTransaction().commit();//提交事务
		em.close();
		fac.close();
	}
}
分享到:
评论

相关推荐

    JPA_1_增删改查完整源码(含jar)

    这是本人观看传智的视频,整理出来的完整的源码,及学习步骤,学了总会忘记,方便今后复习。代码可以直接运行,jar包完整,资源较大,分几块分享(1-5,按照学习步骤写的)。

    JPA_学习过程整理

    最近比较清闲,终于有空好好把传智的jpa视频整理了一些,因为每次复习都看视频比较麻烦,索性自己整理一份文档,方便查看。...有一些基本的增删改查例子,及测试用例; 重点学习一对多,多对多关系;

    基于SpringBoot+SpringCloud的微服务大型在线学习平台实现【服务端源码+数据库】.zip

    媒资管理:视频上传,视频处理,媒资增删改查,媒资与课程计划关联 学习中心:视频播放,课程计划查询,动态获取视频地址 认证中心:登录,登出,查询JWT用户信息,权限校验管理,Zuul网关路由,拦截 订单服务:...

    MyEclipse JPA 快速入门开发视频教程

    3. **数据访问对象(DAO)设计**:掌握如何创建DAO接口和实现类,以便通过JPA API进行数据的增删改查操作。 4. **查询语言(JPQL)**:学习使用Java Persistence Query Language,一种面向对象的查询语言,替代SQL...

    JPA_4_多对多关联关系

    这部分知识是整个jpa学习过程中最复杂...针对JPA资料进行整理,根据传智播客的教学视频,边看边写,文档包含了jpa的基本概念,相关注解解释,及一些增删改查的demo。本文档方便了对jpa的学习与复习,快速掌握基本操作。

    JAVAEE 快速自学路线及详细的学习资源和方法

    * SQL 基础:增删改查、多表查询 * JDBC 编程:JDBC 原理、JDBC 连接库、JDBC API * 数据库连接池、存储过程、触发器、ORM 思想 模块三:WEB 开发基础 * HTML 语言:HTML 标签、表单标签、CSS * JavaScript 开发:...

    基于SpringBoot+Vue智慧图书管理系统设计与实现(源码+部署说明+演示视频+源码介绍).zip

    在功能上,该系统实现了图书的增删改查,用户的注册登录,借书还书等基本功能,同时还提供了书籍分类,搜索,推荐等高级功能,满足了一般图书管理系统的需求。 在技术实现上,后端采用了JPA进行数据库操作,使用...

    springboot粉笔圈在线教育平台(附源码+数据库)57605

    (2)分类搜索:允许用户通过分类关键字、标签等方式搜索和筛选学习课程和视频。 (3)课前测试:允许用户在线进行课前测试,通过...(9)我的笔记:用户可以在“我的笔记”查看历史已添加的笔记信息,可以进行增删改查。

    java学习路线图doc

    学习Oracle或SQL的基础,包括增删改查操作和多表查询,以及JDBC编程,理解JDBC的工作原理,掌握连接库的使用,进阶到JDBC高级部分,如数据库连接池和存储过程,这将提升你的数据库操作能力。 在Web开发基础阶段,你...

    基于Java的教务查询系统设计与实现(源代码+数据库+部署文档+部署视频).zip

    在教务查询系统中,Java主要负责后端逻辑处理,包括数据的增删改查、业务逻辑的实现等。利用Java的面向对象特性,我们可以将复杂的教务管理问题抽象成一个个类,通过对象之间的交互来实现系统的功能。此外,Java的...

    尚硅谷教学视频

    - **JDBC视频教程**:讲解如何通过Java程序连接数据库,并进行增删改查等基本操作。 ### JavaWeb阶段 #### 3. 前端技术 - **JavaScript DOM编程视频教程**:介绍JavaScript的基础语法及如何操作DOM(文档对象模型...

    Java技术面试课程,通过参与这门课程,学习者将能够系统地学习和巩固Java技术知识,并在面试中展现自己的技术能力和优势

    学习者将学习如何编写SQL语句,进行数据的增删改查操作,并理解如何在Java程序中使用JDBC(Java Database Connectivity)与数据库进行通信。 最后,课程还关注面试准备和技巧。这部分内容会提供面试常见问题的实例...

    精品--基于Java的视频点播网站,基于java+springboot+vue开发的短视频播放系统 - 毕业设计 -.zip

    在这个视频点播系统中,Spring Data JPA可能用于处理数据库操作,如视频、用户信息的增删改查。 4. **Hibernate**: Hibernate是Java领域常用的ORM框架,它通过映射Java对象到数据库表,实现了对象关系的透明化管理...

    2019年JAVAEE全套视频.zip

    JDBC(Java Database Connectivity)是Java访问数据库的标准接口,通过JDBC,开发者可以连接各种关系型数据库,执行SQL语句,进行数据的增删改查操作。在实际项目中,ORM(Object-Relational Mapping)框架如...

    守望先锋主题有视频资源版 java EE项目(包括mysql代码)

    开发者可能使用了JDBC(Java Database Connectivity)API来与MySQL进行交互,执行SQL语句进行数据的增删改查操作。此外,为了优化数据访问效率,可能还涉及到了索引、事务管理和存储过程等高级特性。 项目中提到了...

    廖师兄的springboot项目视频

    我们可以使用Spring Data JPA来操作数据库,进行菜品的增删改查,同时配合Hibernate作为JPA的实现,简化数据访问层的代码。 订单处理涉及到并发和事务管理,SpringBoot内置的Transaction Management支持声明式事务...

    基于springboot的光影视频源码数据库.zip

    1. **后端**:基于SpringBoot,实现RESTful API接口,用于与前端交互,处理增删改查、用户认证、视频流处理等操作。这里可能包括Spring Security进行权限控制,以及Spring Data JPA或MyBatis进行数据库操作。 2. **...

    SpringData视频教程

    除了基本的增删改查操作之外,SpringData还支持复杂的查询需求。比如通过Specification机制可以构建动态查询条件;而Querydsl则提供了类似SQL的语法来表达复杂的查询逻辑,这些都是传统ORM框架难以提供的高级特性。 ...

    网页视频下载

    - **数据库操作**:利用PHP连接MySQL等数据库,进行视频信息的增删改查操作。 ### 三、视频清晰度提升技术 #### 1. 视频编码技术 为了提高视频的清晰度,通常会采用H.264、H.265等先进的视频编码格式。这些格式...

Global site tag (gtag.js) - Google Analytics