`

JPA完成对数据库的单表基本操作

    博客分类:
  • JPA
阅读更多

1,实体Bean配置如下:

package com.mengya.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;

import com.mengya.util.Gender;

//表示实体Bean
@Entity
//设置表名
@Table(name = "PERSON")
public class Person {

	private Integer id;

	private String name;

	private Date birthday;
	
	private String info;
	
	private byte[] file;
	
	private String imagePath;
	
	// 枚举类型
	// 设置该列的默认值,在字段后面赋初始值
	private Gender sex = Gender.MAN;

	public Person() {

	}
	public Person(String name) {
		this.name = name;
	}

	// 放在get方法上面或字段上面
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	// 设置该列在数据中列名,长度,非空
	@Column(name = "p_name", length = 10, nullable = false)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	// 设置日期的格式为yyyy-MM-dd
	@Temporal(TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}

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

	// 取其枚举的值
	@Enumerated(EnumType.STRING)
	// 取其枚举的索引
	// @Enumerated(EnumType.ORDINAL);
	@Column(length = 10, nullable = false)
	public Gender getSex() {
		return sex;
	}

	public void setSex(Gender sex) {
		this.sex = sex;
	}
	
	//@Lob表示大的文本字段
	//@Basic(fetch=FetchType.LAZY)设置该字段是否懒加载
	@Lob @Basic(fetch=FetchType.LAZY)
	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}
	
	//大的二进制字段
	@Lob
	public byte[] getFile() {
		return file;
	}

	public void setFile(byte[] file) {
		this.file = file;
	}
	
	//非持久化字段(数据库中没有字段与之对应)
	@Transient
	public String getImagePath() {
		return imagePath;
	}

	public void setImagePath(String imagePath) {
		this.imagePath = imagePath;
	}

}

 

数据库操作如下:

 

package junit.test;


import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.List;

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

import org.junit.BeforeClass;
import org.junit.Test;

import com.mengya.bean.Person;
import com.mengya.util.Gender;

public class PersonTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}
	
	@Test public void save(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		manager.getTransaction().begin();
		
		Person p=new Person();
		p.setName("小酱油");
		DateFormat df=DateFormat.getDateInstance();
		try {
			Date d=df.parse("1986-8-25");
			p.setBirthday(d);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		p.setSex(Gender.WOMAN);
		
		manager.persist(p);
		
		manager.getTransaction().commit();
		manager.close();
		factory.close();
	}
	
	@Test public void getPerson(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		//类似Hibernate中的get方法
		Person p=manager.find(Person.class, 2);
		System.out.println(p.getId() + p.getName() + p.getSex());
		manager.close();
		factory.close();
	}
	
	@Test public void getPerson2(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		//类似Hibernate中的load方法,没有真正的访问数据库,返回的只是一个代理对象
		//若在manager.close()之前没有访问p对象而是在它之后访问p对象的属性则会出错
		Person p=manager.getReference(Person.class, 2);
		System.out.println(p.getName());//这个时候才真正的访问数据库加载数据
		manager.close();
		factory.close();
	}
	
	@Test public void updatePerson(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		manager.getTransaction().begin();
		//由于处于托管状态并且处于事务当中故当事务提交时与数据库同步
		Person p=manager.find(Person.class, 2);
		p.setName("梦娅");
		manager.getTransaction().commit();
		manager.close();
		factory.close();
	}
	
	@Test public void updatePerson2(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		manager.getTransaction().begin();
		Person p=manager.find(Person.class, 3);
		manager.clear();//clear方法使p由托管状态变成游离状态
		p.setName("张明学");
		manager.merge(p);//merge方法将实体对象与数据库同步
		manager.getTransaction().commit();
		manager.close();
		factory.close();
	}
	
	@Test public void deletePerson(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		manager.getTransaction().begin();
		Person p=manager.find(Person.class, 2);
		//Person p=manager.getReference(Person.class, 2);
		manager.remove(p);
		manager.getTransaction().commit();
		manager.close();
		factory.close();
	}
	
	//单个查询
	@Test public void query(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager = factory.createEntityManager();
		String querySql="select p from Person p where p.id=?1";
		Query query=manager.createQuery(querySql);
		query.setParameter(1, 1);
		Person p=(Person) query.getSingleResult();
		System.out.println(p.getName());
		manager.close();
		factory.close();
	}
	
	//批量查询
	@Test public void queryAll(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager=factory.createEntityManager();
		String querySql = "select p from Person p";
		Query query=manager.createQuery(querySql);
		List<Person> personList=query.getResultList();
		for(Person p:personList){
			System.out.println(p.getName());
		}
		manager.close();
		factory.close();
	}
	
	@Test public void updateQuery(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager = factory.createEntityManager();
		manager.getTransaction().begin();
		String querySql = "update Person p set p.name=:name where p.id=:id";
		Query query=manager.createQuery(querySql);
		query.setParameter("name", "梦娅");
		query.setParameter("id", 1);
		query.executeUpdate();
		manager.getTransaction().commit();
		manager.close();
		factory.close();
	}
	
	@Test public void deleteQuery(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
		EntityManager manager = factory.createEntityManager();
		manager.getTransaction().begin();
		String querySql = "delete Person where id=:id";
		Query query=manager.createQuery(querySql);
		query.setParameter("id", 1);
		query.executeUpdate();
		manager.getTransaction().commit();
		manager.close();
		factory.close();
	}
	
}

 

  • JPA_Dome.rar (9.9 KB)
  • 描述: 我的例实
  • 下载次数: 118
分享到:
评论

相关推荐

    利用springboot-jpa实现对数据库的增删改查操作

    至此,我们已经完成了Spring Boot + JPA实现对MySQL数据库的增删改查功能。通过这种方式,开发者可以专注于业务逻辑,而不必关心底层数据库操作的细节,大大提高了开发效率。在实际项目中,还可以结合其他Spring ...

    JPA_由数据库生成JavaBean

    - 通过使用JPA的注解,如`@Entity`(表示这是一个实体类)、`@Table`(指定数据库表名)、`@Id`(标识主键)、`@GeneratedValue`(主键生成策略)等,可以对JavaBean进行更精细的配置。 5. **使用生成的JavaBean**...

    Spring Data JPA数据库操作教程.zip

    - 博客园.url"、"JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3 - crawl+ - 用上DAO层了.url"这些链接很可能是博客文章,详细解释了如何使用Spring Data JPA进行数据库操作,包括基本的CRUD...

    Maven+SpringBoot+JPA单表增删改查实例

    本项目选择了"Maven+SpringBoot+JPA"这一技术栈,旨在提供一个简单的单表操作示例,帮助开发者快速理解如何在Spring Boot环境下使用Maven构建项目,并通过Spring Data JPA实现数据的增删改查功能。 首先,让我们...

    jpa对表的crud操作

    JPA(Java Persistence API)是Java平台上的标准持久层框架,它为ORM(Object-Relational Mapping)提供了统一的API,使得开发人员可以方便地在Java应用中进行数据库操作。CRUD是创建(Create)、读取(Read)、更新...

    JPA基本概念实例操作

    ### JPA基本概念实例操作详解 #### EntityManager与基本概念 - **EntityManager简介**:`EntityManager`,也称为实体管理器,是Java Persistence API (JPA) 中的核心接口之一,负责处理实体对象的生命周期管理和...

    Gradle+SpringBoot+JPA单表的增删改查实例

    在本项目中,我们主要探讨的是如何利用Gradle构建工具,SpringBoot框架,以及Java Persistence API(JPA)来实现单表的增删改查功能。这是一个非常适合初学者上手的实例,它将帮助你理解如何在实际开发环境中集成...

    Spring Data JPA 简化 JPA 开发

    Spring Data JPA 是一个由 Spring 框架...这样,Spring Data JPA 将自动生成实现,提供对 Person 表的所有基本操作。通过这样的方式,开发者可以快速构建数据访问层,专注于业务逻辑,而不必过多关注底层的数据库操作。

    JPA一对一关系实例配置

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库...这就是JPA中一对一关系的基本配置和使用方式。在实际开发中,根据项目需求,你可能还需要考虑懒加载、fetch策略、级联操作等方面的优化和调整。

    JPA入门(一)

    JPA基本操作** - **CRUD操作**: JPA 提供了 create、read、update 和 delete 方法,对应于数据库的增删改查操作。 - **查询语言(JPQL)**: JPA有自己的查询语言,类似于SQL,可以执行复杂的查询操作。 - ** ...

    JPA+MySQL完整实例

    **增删查改**是数据库操作的基本操作: 1. **增加(Insert)**:使用`EntityManager`的`persist()`方法将新实体插入数据库。 2. **删除(Delete)**:调用`remove()`方法来删除一个托管实体,或者设置其标识符为null...

    jpa的自定义CURD

    在这个“jpa的自定义CURD”主题中,我们将深入探讨如何通过JPA实现对数据库的基本操作,即创建(Create)、读取(Read)、更新(Update)和删除(Delete)。 **创建(Create)**: 在JPA中,创建新记录通常是通过`...

    spring jpa

    在Spring JPA中,你可以通过定义Repository接口来实现对数据库的操作,而Spring会自动帮你完成数据访问的大部分工作。 1. **什么是JPA?** Java Persistence API (JPA) 是Java平台上的一个标准,它定义了如何在Java...

    SpringBoot+JPA.zip

    在"SpringBoot+JPA.zip"这个压缩包中,你将找到一个入门级的示例项目,它展示了如何在SpringBoot环境中使用JPA进行基本的数据库操作,包括增(Create)、删(Delete)、改(Update)和查(Query)。这个项目对于初学...

    配置jPA办法

    它提供了一种方式将Java类映射到数据库表,从而简化数据库操作。以下是如何在Eclipse环境下配置JPA的详细步骤: 1. **添加OpenJPA库**: 首先,你需要在Eclipse中设置用户库来包含OpenJPA的依赖。进入`Window` -&gt; ...

    JPA快速入门初步(myeclipse)

    在"JPA快速入门初步(myeclipse)"中,我们将学习如何在MyEclipse中设置JPA项目,理解基本的JPA概念,以及如何使用注解来定义实体和映射数据库表。 1. **JPA基础概念**: - **实体(Entity)**: 表示数据库中的表...

    JSP连接数据库基本操作项目实例

    在本项目实例"JSP连接数据库基本操作"中,我们将探讨如何使用Java Server Pages (JSP) 技术与MySQL数据库进行交互。JSP是一种基于Java的动态网页开发技术,常用于构建服务器端的Web应用程序。它允许开发者将HTML、...

    JPA.rar_jpa

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据,它为开发者提供了一种对象/关系映射(ORM)工具,将数据库操作转换为对Java对象的操作,从而简化了数据库应用的开发。JPA是...

    JPA搭建环境所需的jar包

    总的来说,搭建JPA环境需要对JPA规范有基本理解,并确保项目中包含了正确的jar包,特别是JPA API、Hibernate实现、JDBC驱动以及可能的事务管理组件。通过这些,你可以轻松地在Java应用中实现对象与数据库的无缝对接...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    它将Java对象与数据库表进行映射,使得开发者可以通过操作对象来完成数据库操作。Hibernate提供了事务管理、缓存机制和一对多、多对一等复杂关系的处理。在项目中,我们需要配置Hibernate的实体类、实体管理工厂以及...

Global site tag (gtag.js) - Google Analytics