赞
踩
下面通过一个实际的列子来展示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<String> 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<String> 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<String, Float> payroll = new HashMap<>(); // 必须指定接口实现类
-
- // 映射组件属性,所谓组件的意思是:不是基本数据类型,而是自定义的复合类型,且不是持久化实体
- private Address address;
-
- public Address getAddress() {
- return address;
- }
-
- public void setAddress(Address address) {
- this.address = address;
- }
-
- public Map<String, Float> getPayroll() {
- return payroll;
- }
-
- public void setPayroll(Map<String, Float> payroll) {
- this.payroll = payroll;
- }
-
- public String[] getSchools() {
- return schools;
- }
-
- public void setSchools(String[] schools) {
- this.schools = schools;
- }
-
- public String getSex() {
- return sex;
- }
-
- public Set<String> getCars() {
- return cars;
- }
-
- public void setCars(Set<String> 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<String> getPets() {
- return pets;
- }
-
- public void setPets(List<String> pets) {
- this.pets = pets;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
组件类
- package com.ydoing.domain;
- import javax.persistence.Column;
- import javax.persistence.Embeddable;
- import org.hibernate.annotations.Parent;
- @Embeddable
- public 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;
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
测试:
- 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<String> 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();
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
版权声明:本文为博主原创文章,未经博主允许不得转载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。