博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hiberate基础用法实例
阅读量:2494 次
发布时间:2019-05-11

本文共 7333 字,大约阅读时间需要 24 分钟。

下面通过一个实际的列子来展示Hibernate的基本用法。

实例:

package com.ydoing.domain;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import javax.persistence.Basic;import javax.persistence.CollectionTable;import javax.persistence.Column;import javax.persistence.ElementCollection;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.Lob;import javax.persistence.MapKeyClass;import javax.persistence.MapKeyColumn;import javax.persistence.OrderColumn;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import javax.persistence.Transient;import org.hibernate.annotations.Formula;@Entity@Table(name = "person")public class Person {
// 主键为ID,最好设置为包装类型Integer @Id @Column(name = "person_id") @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; // 指定字符长度 @Column(name = "name", length = 50, nullable = false) private String name; @Column(name = "age") private int age; // 也可以不指定列名,默认为类的属性名 @Column private String sex; // @Transient表示不用持久化 @Transient private String alias; // @Lob表示大数据类型,FetchType.LAZY表示延迟加载,减少性能开销 @Lob @Basic(fetch = FetchType.LAZY) private byte[] image; // 指定为日期类型 @Temporal(TemporalType.DATE) private Date birthdate; // 属性动态生成 @Formula("(select concat(p.name, p.age, p.sex) from person p where p.person_id = person_id)") private String profile; // List集合类型 // 需要显示初始化集合的类型 @ElementCollection(targetClass = String.class) @CollectionTable(name = "pet_inf",// 指定表名 // 用于映射外键 joinColumns = @JoinColumn(name = "person_id", nullable = false)) @Column(name = "pet_name") @OrderColumn(name = "list_order") private List
pets = new ArrayList<>(); // 数组属性 @ElementCollection(targetClass = String.class) @CollectionTable(name = "school_inf", joinColumns = @JoinColumn(name = "person_id", nullable = false)) @Column(name = "school_name") @OrderColumn(name = "array_order") private String[] schools; // Set集合属性,Set是无序的,不可重复的,因此Set集合属性无须使用@OrderColumn注解映射集合的索引列 @ElementCollection(targetClass = String.class) @CollectionTable(name = "car_inf", joinColumns = @JoinColumn(name = "person_id", nullable = false)) @Column(name = "car_name") private Set
cars = new HashSet<>();// 必须指定接口实现类 // Map集合属性 @ElementCollection(targetClass = Float.class) @CollectionTable(name = "salary_inf", joinColumns = @JoinColumn(name = "person_id", nullable = false)) // 指定key的类型 @MapKeyColumn(name = "salary_type") @MapKeyClass(String.class) // 映射Map的value @Column(name = "money") private Map
payroll = new HashMap<>(); // 必须指定接口实现类 // 映射组件属性,所谓组件的意思是:不是基本数据类型,而是自定义的复合类型,且不是持久化实体 private Address address; public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Map
getPayroll() { return payroll; } public void setPayroll(Map
payroll) { this.payroll = payroll; } public String[] getSchools() { return schools; } public void setSchools(String[] schools) { this.schools = schools; } public String getSex() { return sex; } public Set
getCars() { return cars; } public void setCars(Set
cars) { this.cars = cars; } public void setSex(String sex) { this.sex = sex; } public String getProfile() { return profile; } public void setProfile(String profile) { this.profile = profile; } public Person() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAlias() { return alias; } public void setAlias(String alias) { this.alias = alias; } public byte[] getImage() { return image; } public void setImage(byte[] image) { this.image = image; } public Date getBirthdate() { return birthdate; } public void setBirthdate(Date birthdate) { this.birthdate = birthdate; } public List
getPets() { return pets; } public void setPets(List
pets) { this.pets = pets; } public void setId(Integer id) { this.id = id; }}

组件类

package com.ydoing.domain;import javax.persistence.Column;import javax.persistence.Embeddable;import org.hibernate.annotations.Parent;@Embeddablepublic class Address {
@Column(name = "person_province") private String province; @Column(name = "person_city") private String city; public Address() { } // 属于哪个实体组件 @Parent private Person person; public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public Address(String province, String city) { super(); this.province = province; this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; }}

测试:

package com.ydoing.test;import java.util.Arrays;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import com.ydoing.domain.Address;import com.ydoing.domain.Person;public class Main {    public static void main(String[] args) {        Configuration conf = new Configuration();        conf.configure();        // ServiceRegistry serviceRegistry = new        // ServiceRegistryBuilder().applySettings(conf.getProperties())        // .buildServiceRegistry();        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties())                .build();        SessionFactory factory = conf.buildSessionFactory(serviceRegistry);        Session session = factory.openSession();        Person person = new Person();        person.setName("Jack");        person.setAge(22);        person.setSex("男");        // 不会持久化        person.setAlias("Arron");        // List属性        String[] array = { "cat", "dog", "snake" };        List
pets = Arrays.asList(array); person.setPets(pets); // 数组属性 String[] schools = { "清华", "北大" }; person.setSchools(schools); // Set集合属性 person.getCars().add("奥迪"); person.getCars().add("大众"); // Map属性 person.getPayroll().put("基本工资", (float) 5000); person.getPayroll().put("绩效", (float) 3000); person.setAddress(new Address("浙江", "杭州")); Transaction tx = session.getTransaction(); tx.begin(); session.save(person); Person p = (Person) session.load(Person.class, 12); System.out.println(p.getProfile()); tx.commit(); session.close(); }}

转载地址:http://evhrb.baihongyu.com/

你可能感兴趣的文章
php计算上个月是几月份
查看>>
浅谈 trie树 及其实现
查看>>
60款很酷的 jQuery 幻灯片演示和下载
查看>>
nyoj-20-吝啬的国度(深搜)
查看>>
【NOI 2018】归程(Kruskal重构树)
查看>>
spark 2.4安装
查看>>
Embeded linux之移植boa
查看>>
C之变量初始化的重要性
查看>>
jQuery 学习笔记(jQuery: The Return Flight)
查看>>
Java中常用的测试工具JUnit
查看>>
PHP图形图像的典型应用 --常用图像的应用(验证码)
查看>>
Robot Framework-Ride界面介绍及库的添加
查看>>
IntelliJ IDEA 连接数据库 详细过程
查看>>
redis完全攻略
查看>>
D3---01基础的柱状图制作(转)
查看>>
Time-Varying Mesh Compression
查看>>
SocketServer源码学习(二)
查看>>
编写DLL所学所思(1)——导出函数
查看>>
POJ3006-Dirichlet's Theorem on Arithmetic Progressions
查看>>
QT分页控件,开源,供大家使用
查看>>