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();
}
}
分享到:
- 2009-10-12 14:47
- 浏览 2197
- 评论(0)
- 论坛回复 / 浏览 (0 / 3068)
- 查看更多
相关推荐
就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量类似而枯燥的语句来完成业务逻辑。 为了解决这些大量枯燥的数据操作语句,我们第一个想到的是使用ORM框架,比如:Hibernate。...
框架的API设计直接面向数据库操作,不绕弯子,开发者只需要数据库基本知识,不必学习大量新的操作概念即可使用API完成各种DDL/DML操作。 最大限度利用编译器减少编码错误的可能性 API设计和元数据模型(meta-model...
在MySQL数据库上完成CRUD操作。 RESTful端点使用ID进行工作。 渐进式HTTP基本身份验证,用于保护API的安全 要求 Java 玛文 MySQL Sprint Boot Spring5 引导程序+ HTML 数据库配置文件 db_schema.sql ...
ElasticSearch(基本操作和高级查询)、Async(异步任务)、集成Dubbo(采用官方的starter)、MongoDB(文档数据库)、neo4j(图数据库)、docker(容器化)、JPA多数据源、Mybatis多数据源、代码生成器、GrayLog(日志收集)、...
这是具有用户,用户电子邮件和用户角色的基本数据库方案。 这个Java Spring REST API应用程序将为客户端提供端点,以读取应用程序数据中包含的各种数据集。 该应用程序还将构成本课程其他地方开发的用户身份验证应用...
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...
ElasticSearch(`基本操作和高级查询`)、Async(`异步任务`)、集成Dubbo(`采用官方的starter`)、MongoDB(`文档数据库`)、neo4j(`图数据库`)、docker(`容器化`)、`JPA多数据源`、`Mybatis多数据源`、`代码生成器`、Gray...
使用JPA和Hibernate在RDBMS上执行CRUD操作(阅读) 使用JPA和Hibernate实现数据种子类 解释和使用Spring数据关系 使用JsonIgnoreProperties批注来防止无限循环 使用H2控制台和H2 IntelliJ集成来浏览数据 介绍 这是...
Java阅读顺序完成该项目的学生表明他们可以: 使用JPA和Hibernate在RDBMS上执行CRUD操作(读取) 使用JPA构造来创建高级查询使用JsonIgnoreProperties批注来防止无限循环使用SQL,JPA和Hibernate通过Spring应用程序...
数据持久化:使用Spring Data JPA或MyBatis等持久化框架与数据库进行交互,实现数据的持久化操作。 安全性和稳定性: 实现了用户身份验证和权限控制,确保用户只能访问其具备权限的功能,保障系统的安全性。 对...
无需编写xml文件即可完成增删改查操作,支持LambdaQuery查询、支持JPA Query Method查询(findByXxx)。支持mysql、sqlserver、oracle、postgresql、sqlite、StarRocks(原DorisDB)。支持自定义sql,对于基本的增删...
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...
通过友好的用户界面设计,使得用户能够轻松上手,快速完成各项资产管理操作。此外,系统还提供了数据备份与恢复机制,确保了资产数据的安全性和完整性。 在技术上,本系统采用了Spring Boot框架作为后端开发基础,...
合集中的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 SpringTest它是针对Junit单元测试的整合。让我们在开发中以及开发后期进行测试时,直接使用Junit结合...