`

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使用Spring-data-jpa简化数据访问层

    就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量类似而枯燥的语句来完成业务逻辑。 为了解决这些大量枯燥的数据操作语句,我们第一个想到的是使用ORM框架,比如:Hibernate。...

    支持多数据库的ORM框架ef-orm.zip

    框架的API设计直接面向数据库操作,不绕弯子,开发者只需要数据库基本知识,不必学习大量新的操作概念即可使用API完成各种DDL/DML操作。 最大限度利用编译器减少编码错误的可能性 API设计和元数据模型(meta-model...

    spring-mvc-boot-security-jpa-rest-student-management-project

    在MySQL数据库上完成CRUD操作。 RESTful端点使用ID进行工作。 渐进式HTTP基本身份验证,用于保护API的安全 要求 Java 玛文 MySQL Sprint Boot Spring5 引导程序+ HTML 数据库配置文件 db_schema.sql ...

    spring-boot-demo_xkcoding.tar.gz

    ElasticSearch(基本操作和高级查询)、Async(异步任务)、集成Dubbo(采用官方的starter)、MongoDB(文档数据库)、neo4j(图数据库)、docker(容器化)、JPA多数据源、Mybatis多数据源、代码生成器、GrayLog(日志收集)、...

    java-usermodel

    这是具有用户,用户电子邮件和用户角色的基本数据库方案。 这个Java Spring REST API应用程序将为客户端提供端点,以读取应用程序数据中包含的各种数据集。 该应用程序还将构成本课程其他地方开发的用户身份验证应用...

    Hibernate实战(第2版 中文高清版)

     14.2 基本的HQL和JPA QL查询   14.2.1 选择   14.2.2 限制   14.2.3 投影   14.3 联结、报表查询和子查询   14.3.1 联结关系和关联   14.3.2 报表查询   14.3.3 利用子查询   14.4 小结   第15...

    spring boot集成demo大全.zip

    ElasticSearch(`基本操作和高级查询`)、Async(`异步任务`)、集成Dubbo(`采用官方的starter`)、MongoDB(`文档数据库`)、neo4j(`图数据库`)、docker(`容器化`)、`JPA多数据源`、`Mybatis多数据源`、`代码生成器`、Gray...

    java-crudyrestaurants

    使用JPA和Hibernate在RDBMS上执行CRUD操作(阅读) 使用JPA和Hibernate实现数据种子类 解释和使用Spring数据关系 使用JsonIgnoreProperties批注来防止无限循环 使用H2控制台和H2 IntelliJ集成来浏览数据 介绍 这是...

    java-getorders

    Java阅读顺序完成该项目的学生表明他们可以: 使用JPA和Hibernate在RDBMS上执行CRUD操作(读取) 使用JPA构造来创建高级查询使用JsonIgnoreProperties批注来防止无限循环使用SQL,JPA和Hibernate通过Spring应用程序...

    JAVA小区物业管理系统的实现.rar

    数据持久化:使用Spring Data JPA或MyBatis等持久化框架与数据库进行交互,实现数据的持久化操作。 安全性和稳定性: 实现了用户身份验证和权限控制,确保用户只能访问其具备权限的功能,保障系统的安全性。 对...

    fastmybatis是一个mybatis开发框架,其宗旨为:简单、快速、有效

    无需编写xml文件即可完成增删改查操作,支持LambdaQuery查询、支持JPA Query Method查询(findByXxx)。支持mysql、sqlserver、oracle、postgresql、sqlite、StarRocks(原DorisDB)。支持自定义sql,对于基本的增删...

    Spring面试题

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...

    Java毕业设计-基于springboot开发的企业资产管理系统-毕业论文(附毕设源代码).rar

    通过友好的用户界面设计,使得用户能够轻松上手,快速完成各项资产管理操作。此外,系统还提供了数据备份与恢复机制,确保了资产数据的安全性和完整性。 在技术上,本系统采用了Spring Boot框架作为后端开发基础,...

    Spring高级之注解驱动开发视频教程

    合集中的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 SpringTest它是针对Junit单元测试的整合。让我们在开发中以及开发后期进行测试时,直接使用Junit结合...

Global site tag (gtag.js) - Google Analytics