`
Ydoing
  • 浏览: 106011 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hiberate基础用法实例

 
阅读更多

下面通过一个实际的列子来展示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;
    }

}

组件类

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;
    }
}

测试:

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();
    }
}
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    hibernate3应用实例

    hibernate3应用实例hibernate3应用实例hibernate3应用实例hibernate3应用实例

    一个Hibernate的简单实例

    本实例旨在为初学者提供一个基础的Hibernate使用教程,帮助理解其基本概念和工作流程。 首先,我们需要了解Hibernate的核心组件。Hibernate框架主要由以下部分构成: 1. **Hibernate配置文件(hibernate.cfg.xml)...

    Struts2_Spring_Hibernate整合开发实例

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在...通过阅读和实践这个实例,开发者不仅可以理解三大框架的基本用法,还能掌握实际开发中的最佳实践,为构建高质量的Java Web应用打下坚实的基础。

    struts2+hibernate实例项目

    struts2+hibernate简单应用实例struts2+hibernate简单应用实例struts2+hibernate简单应用实例

    Hibernate应用实例开发

    Hibernate应用实例开发 Hibernate功能介绍

    java-Struts2-Spring和Hibernate架构应用实例.doc

    "Java-Struts2-Spring和Hibernate架构应用实例" 本文主要讲述了如何使用Struts2、Spring和Hibernate框架来实现一个图书管理系统,涵盖了基本的增加、删除、修改、查询等功能。下面是对标题、描述、标签和部分内容的...

    Hibernate+struts实例学习

    - 数据库设计与表创建是学习Hibernate与Struts实例的基础,需要掌握SQL语言和数据库基本操作。 - 在Java Web工程中配置数据源,了解不同数据库的配置方法和差异。 - Hibernate配置文件的编写,包括SessionFactory的...

    Hibernate5实例程序

    在本实例程序中,我们将深入探讨Hibernate5的主要特性和用法。 1. **Hibernate简介** Hibernate5是Hibernate框架的最新版本,它提供了一种在Java应用中管理关系数据库的高效方法。通过ORM,Hibernate将Java对象与...

    hibernate3实例包

    这表明我们将讨论的是关于Hibernate 3的一个实例集合,Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转换为对对象的操作,从而简化了Java应用程序中的数据库编程。 描述中的重复...

    struts+hibernate整合登录实例

    在这个“Struts+Hibernate整合登录实例”中,我们将深入探讨如何将这两个框架集成到一起,实现一个完整的登录系统。 **Struts框架** Struts是一个基于MVC设计模式的Java Web应用框架,它提供了对HTTP请求处理、业务...

    hibernate入门简单实例

    这个“hibernate_first”压缩包提供了一个适合初学者的简单实例,帮助理解Hibernate的基础用法。以下是关于Hibernate入门的一些关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类的过程,...

    hibernate,hibernate实例源码

    【hibernate,hibernate实例源码】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。通过提供一套API和元数据配置,Hibernate可以将Java对象自动持久化到关系数据库...

    Struts2、Spring和Hibernate应用实例

    在提供的文件中,"马士兵hibernate学习笔记(原版)-你信不信_我反正是信了.doc"可能包含有关Hibernate的基础知识、配置、实体映射、查询等方面的内容,是学习和理解Hibernate的好资源。"Spring和Hibernate"可能涵盖了...

    hibernate小白极简实例

    这个实例将涵盖Hibernate的基础知识,包括注解方式和XML配置方式。 1. **安装与配置** 在开始之前,你需要在项目中添加Hibernate的依赖库,通常通过Maven或Gradle来管理。确保包含相应的Hibernate、JDBC驱动(对于...

    Hibernate + Struts 实例

    【标题】"Hibernate + Struts 实例"是一个典型的Java Web开发中的整合应用,它结合了两个重要的开源框架:Hibernate作为持久层框架,Struts作为控制层框架。这种整合旨在提供一个高效、灵活且易于维护的Web应用程序...

    Spring+Hibernate+MySql的应用实例

    **Spring+Hibernate+MySql应用实例详解** 在Java Web开发领域,Spring、Hibernate和MySQL是三个非常关键的技术组件。Spring作为一个全面的框架,提供了一种轻量级的控制反转(IoC)和面向切面编程(AOP)的解决方案...

    JSF集成Spring_Framework和Hibernate开发应用实例

    【JSF集成Spring Framework和Hibernate开发应用实例】的详述 JavaServer Faces (JSF) 是一种基于MVC(Model-View-Controller)模式的Java EE应用程序用户界面框架,适用于构建复杂的Web应用。JSF提供了丰富的组件库...

    hibernate关联映射实例

    通过这些实例,开发者可以学习到如何在实际项目中应用Hibernate,理解其核心机制,并提高数据库操作的效率。熟悉这些映射方式对于开发复杂的Java应用至关重要,它们帮助我们将复杂的数据库结构转化为易于管理和操作...

    Hibernate数据库操作实例.zip

    **标题与描述解析** 标题"Hibernate数据库操作实例.zip"表明...这个压缩包中的实例可能会涵盖以上所有或部分知识点,通过运行和分析这些实例,开发者可以深入理解Hibernate的工作原理,并提升在实际项目中的应用能力。

Global site tag (gtag.js) - Google Analytics