第一个类:Person.java

package org.crazyit.app.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyClass;
import javax.persistence.MapKeyColumn;
import javax.persistence.OrderColumn;
import javax.persistence.Table;

@Entity
@Table(name = "person_inf")
public class Person implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7093602310657352229L;

// 标识属性
//@Id
//@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "person_id")
private Integer id;
private int age;
// private String name;

// 组件属性
//private Name name;

// // 多列作为联合主键,对象实现序列号,有无参构造,建议重写equal()和hashCode()方法
// @Id // 属性标识
// private String first;
// @Id // 属性标识
// private String last;

//组件属性,作为复合主键,标识对象属性,并且有程序给出标识属性值。此时person对象的标识属性不再是id.
//组件必须序列号,有无参构造方法,建议重写equal()和hashCode()方法。
@EmbeddedId
// @AttributeOverrides({
// @AttributeOverride(name="first",column=@Column(name="first_Name")),
// @AttributeOverride(name="last",column=@Column(name="last_name"))
// })
private Name name;

/*// 说明:映射组件内集合属性的注解与映射实体类里集合属性的注解没有任何区别。
// map集合属性==组件属性为集合,保存该对象关联的程度(比如:好坏)
@ElementCollection(targetClass = Integer.class)
@CollectionTable(name = "power_inf", // 指定表名
joinColumns = @JoinColumn(name = "person_id", nullable = false) )
@MapKeyColumn(name = "name_aspect")
@MapKeyClass(String.class)
@Column(name = "name_power", nullable = false)
private Map<String, Integer> power = new HashMap<String, Integer>();

// list集合属性元素为组件
@ElementCollection(targetClass = Name.class)
@CollectionTable(name = "nick_power_inf", joinColumns = @JoinColumn(name = "person_id", nullable = false) )
@OrderColumn(name = "list_order")
private List<Name> nicks = new ArrayList<Name>();

// map集合元素的key为组件,则需要重写该组件的equal()和hashCode()方法。
// 建议使用@MapKeyClass注解指定MapKey的类型

// List集合属性性,保存该对象关联的学校
@ElementCollection(targetClass = String.class)
// 映射保存集合属性的表
@CollectionTable(name = "school_inf", // 指定表名
joinColumns = @JoinColumn(name = "person_id", nullable = false) )
// 指定保存集合元素的列为school_name
@Column(name = "school_name")
// 映射集合元素索引的列
@OrderColumn(name = "list_order")
List<String> schools = new ArrayList<String>();

// Set集合属性,保存该对象关联的工作
@ElementCollection(targetClass = String.class)
@CollectionTable(name = "job_inf", // 指定表名
joinColumns = @JoinColumn(name = "person_id", nullable = false) )
// 指定保存元素的列为job_name,nullable=false增加非空约束
@Column(name = "job_name")
Set<String> jobs = new HashSet<String>();
*/
public Integer getId() {
return id;
}

public void setId(Integer 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 List<String> getSchools() {
return schools;
}

public void setSchools(List<String> schools) {
this.schools = schools;
}

public Set<String> getJobs() {
return jobs;
}

public void setJobs(Set<String> jobs) {
this.jobs = jobs;
}

public Name getName() {
return name;
}*/

public void setName(Name name) {
this.name = name;
}

/* public Map<String, Integer> getPower() {
return power;
}

public void setPower(Map<String, Integer> power) {
this.power = power;
}

public List<Name> getNicks() {
return nicks;
}

public void setNicks(List<Name> nicks) {
this.nicks = nicks;
}
*/
/* public String getFirst() {
return first;
}

public void setFirst(String first) {
this.first = first;
}

public String getLast() {
return last;
}

public void setLast(String last) {
this.last = last;
}*/

}

//第二个类:Name.java

package org.crazyit.app.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Id;

import org.hibernate.annotations.Parent;

/**
* 映射组件
*
* @author user
*
*/
@Embeddable//标识组件
public class Name implements Serializable {

/**
*
*/
private static final long serialVersionUID = 5930988577308921103L;
@Column(name = "first_name")
private String first;
@Column(name = "last_name")
private String last;
@Parent
private Person ower;

// 无参构造方法
public Name() {
}

// 初始化全部成员变量
public Name(String first, String last) {
this.first = first;
this.last = last;
}

// 重写equal和hashCode方法
public String getFirst() {
return first;
}

@Override
public int hashCode() {
final int prime = 31;
return getFirst().hashCode() * prime + getLast().hashCode();
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj != null && obj.getClass() == Name.class) {
Name target = (Name) obj;
return target.getFirst().equals(getFirst()) && target.getLast().equals(getLast());
}
return false;
}

public void setFirst(String first) {
this.first = first;
}

public String getLast() {
return last;
}

public void setLast(String last) {
this.last = last;
}

public Person getOwer() {
return ower;
}

public void setOwer(Person ower) {
this.ower = ower;
}
}

//第三个类:主类Start.java

package org.crazyit.app.service;

import org.crazyit.app.domain.Name;
import org.crazyit.app.domain.Person;
import org.crazyit.app.utils.HibernateSessionFactory;
import org.hibernate.Session;

public class Start {

public static void main(String[] args) {

Session session = HibernateSessionFactory.currentSession();
session.beginTransaction();

// //集合属性实例
// Person person = new Person();
// person.setAge(20);
// person.setName("crazyit.org");
// // list集合属性
// person.getSchools().add("小学");
// person.getSchools().add("中学");
// // set集合属性
// person.getJobs().add("开发");
// person.getJobs().add("测试");
// session.save(person);

// //组件属性实例
// Person person=new Person();
// person.setAge(20);
// //设置组件属性
// person.setName(new Name("liu","xw"));
// session.save(person);

// //组件属性为集合
// Person person=new Person();
// person.setAge(20);
// person.getPower().put("0", 1);
// person.getPower().put("1", 1);
// session.save(person);

// //集合属性的元素为组件
// Person person=new Person();
// person.setAge(20);
// person.getNicks().add(new Name("z","xj"));
// person.getNicks().add(new Name("liu","xj"));
// session.save(person);

//组件作为复合主键=======>bug:运行出错了?
//出错原因,集合属性和集合组件那些知识点的中,@joinColumn定义了外键约束条件,所以会报错。
//注释掉这些,就可以测试这个知识点。
Person person = new Person();
person.setName(new Name("z", "xj"));
person.setName(new Name("liu", "xj"));
session.save(person);

// //多列作为联合主键
// Person person=new Person();
// person.setFirst("liu");
// person.setLast("xiaowei");
// session.save(person);

session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}

///////////////////////////////////////////////////////////

项目启动:

1.配置文件:hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<!-- 数据库基本配置 -->
<property name="connection.url">jdbc:mysql://localhost:3306/db_hibernate</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">create</property>
<property name="show_sql">true</property>
<!-- c3p0配置 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">true</property>
<!-- 罗列所有持久化类的类名 -->
<mapping class="org.crazyit.app.domain.News"/>
<mapping class="org.crazyit.app.domain.Person"/>
</session-factory>
</hibernate-configuration>

//2.sessionFactory工具类:HibernateSessionFactory.java

package org.crazyit.app.utils;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {
/**
* Examples:
* CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
* CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".
*/
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
/** Holds a single instance of Session */
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
/** The single instance of hibernate configuration */
private static final Configuration cfg = new Configuration();
/** The single instance of hibernate SessionFactory */
private static org.hibernate.SessionFactory sessionFactory;

/**
* Returns the ThreadLocal Session instance. Lazy initialize the
* SessionFactory if needed.
*
* @return Session
* @throws HibernateException
*/
@SuppressWarnings("deprecation")
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();

if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}

return session;
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);

if (session != null) {
session.close();
}
}
/**
* Default constructor.
*/
private HibernateSessionFactory() {

}
}

//3.引入的jars,测试使用的是hibernate-release-4.3.5.Final

hibernate/lib/required目录下所有jar
hibernate/lib/optional/c3p0目录下所有jar
mysql驱动jar

hibernate base的更多相关文章

  1. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  2. HIbernate java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z

    [HIbernate]java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGe ...

  3. 报错:Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): cn.itcast.bos.domain.base.SubArea

    因为 实体类中的主键 是String类型 不能自动为其分配id  所以需要手动设置在service层   model.setId(UUID.randomUUID().toString());

  4. Hibernate全套增删改查+分页

    1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...

  5. 搭建SpringMVC+Spring+Hibernate平台

    一. 开发环境 1. 点击此查看并下载需要的 Eclipse IDE for Java EE Developers 开发工具,推荐选用32位   2. 点击此查看并下载需要的 MySQL Server ...

  6. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  7. Hibernate 小阶段总结

    (一)Hibernate入门 通俗的话来说:Hibernate是用于面向对象操控数据库,对JDBC进行轻量级封装.(在java世界中传统的来说是JDBC访问数据库.) 1)Hibernate定性:对象 ...

  8. hibernate基础dao类

    此文章是基于 搭建SpringMVC+Spring+Hibernate平台 功能:数据库的保存.更新.删除:sql.hql查询:分页查询:调用存储过程 创建hibernate基础dao类: BaseD ...

  9. Hibernate 简介

    其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...

随机推荐

  1. 【GoLang】类型和作用在它上面定义的方法必须在同一个包里定义

    cannot define new methods on non-local type int 参考资料: http://wiki.jikexueyuan.com/project/the-way-to ...

  2. 不懂点CAP理论,你好意思说你是做分布式的吗?

  3. Oracle 级联删除

    alter table ForeignTable(附表)add constraint fk_MainTable_ForeignTable(关联表中的外键) foreign key(ForeignTab ...

  4. 在eclipse上开发hadoop2.5.2程序的快捷方法

    本文仍然使用MapReduce的经典例子 WordCount来测试eclipse的开发环境. 与大部分教程不同的是,本文使用的hadoop是2.5.2的版本,相较于之前的0.X版本,hadoop 2. ...

  5. centos locate搜索工具

    locate搜索工具 [root@localhost ~]# yum install mlocate [root@localhost ~]# locate passwd locate: can not ...

  6. MMO可见格子算法

    看注释吧,写的很清楚了 using System; using System.Collections.Generic; using System.Diagnostics; using System.L ...

  7. 日历插件My97DatePicker的使用

    在开发过程中,我们会经常遇到让用户输入日期的表单,这类表单处理起来也不是太繁琐,就是简单的字符串和日期之间的转换.但是,如果用户不按照已设定的日期格式进行输入,必定会造成不必要的麻烦.为了更好的处理这 ...

  8. [Android Pro] Gradle tip #3-Task顺序

    reference to : http://blog.csdn.net/lzyzsd/article/details/46935405 原文链接 我注意到我在使用Gradle的时候遇到的大多数问题都是 ...

  9. July 1st, Week 27th Friday, 2016

    It does not do to dwell on dreams, and forget to live. 不要生活在梦里,不要沉醉于空想而疏忽了生活. Stand straightly, and ...

  10. android SDK 更新问题完美解决 http://dl-ssl.google.com refused

    现在由于GWF,google基本和咱们说咱见了,就给现在在做Android  或者想学习Android 的朋友带来了诸多的不便,最简单的就是Android SDK Manager 你无法更新了. 现在 ...