第一个 Hibernate 程序(入门详解)
- 说明:运行前请在mysql上手动创建数据库”hibernate”,程序已经完整,完美运行。
文件名 | 作用 |
---|---|
explain.xml | 项目配置说明 |
hibernate.cfg.xml | Hibernate配置文件 |
log4j.properties | log4j日志工具配置文件 |
- explain.xml
<?xml version="1.0" encoding="UTF-8"?>
<项目信息>
<字段>
<术名>Java EE version</术名>
<版本>JavaEE 7 - Web 3.1</版本>
</字段>
<字段>
<术名>Java version</术名>
<版本>1.7</版本>
</字段>
<字段>
<术名>JSTL version</术名>
<版本>1.2.2</版本>
</字段>
<外部依赖包信息>
<字段>
<术名>mysql-connector-java-bin.jar</术名>
<版本>5.1.7</版本>
</字段>
<字段>
<术名>Hibernate version</术名>
<版本>4.1.4</版本>
</字段>
</外部依赖包信息>
</项目信息>
以上除了 Hibernate 的版本不是当前最新的5.2.10以外其它均为当前最新版本。—time:2017年9月5日。
基础目录结构(图):
com.person.hibernate.bean包
Cat.java
package com.person.hibernate.bean;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.QueryHint;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/***
* 配置Cat实体类,实体类(Entity)是指与数据库有影射关系的Java类,
* 一般推荐使用POJO(持久化对象)。
* 如果Cat某字段不需要保存到数据库中,可以用@javax.persistence.Transient配置
* 使用Hibernate持久化数据步骤:
* 1)创建持久化类的实例;
* 2)初始化Configuration对象;
* 3)获取SessionFactory;
* 4)通过SessionFactory打开Session;
* 5)声明事务Transaction;
* 6)通过Session把POJO对象持久化到数据库;
* 7)提交事务关闭Session。
* @author ljj
* */
//@NamedQuery(name = "all cat", query = " select c from Cat c ")
//@NamedNativeQuery(name = "all cat", query = "select * from tb_cat")
@NamedQueries(value = {
@NamedQuery(name = "all cat", query = " select c from Cat c "),
@NamedQuery(name = "cat by name", query = " select c from Cat c where c.name = :name ", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }),
@NamedQuery(name = "cat by mother", query = " select c from Cat c ") })
//@NamedNativeQueries(value = {
// @NamedNativeQuery(name = "all cat", query = "select * from tb_cat"),
// @NamedNativeQuery(name = "all cat", query = "select * from tb_cat"),
// @NamedNativeQuery(name = "all cat", query = "select * from tb_cat") })
@Entity
//注解Entity表示该类能被Hibernate持久化
@Table(name = "tb_cat")
//指定该Entity对应的数据表名
public class Cat {
@Id
@Column(name = "id")
//指定该列为主键
@GeneratedValue(strategy = GenerationType.AUTO)
//主键类型,auto为数据库自增长类型
private Integer id;
@Column(name = "name")
// 指定属性对应的数据库表的列为“name”
private String name;
@Column(name = "description")
// 同上。@Column与name均可省略
private String description;
@ManyToOne
// 指定POJO之间的关系,本例为多对一关系
@JoinColumn(name = "mother_id")
// 该属性对应的列
private Cat mother;
@Temporal(TemporalType.TIMESTAMP)
// 日期类型(DATE, TIME还是TIMESTEMP)
@Column(name = "createDate")
private Date createDate;
@OneToMany(mappedBy = "cat")
//@JoinColumns(value = { @JoinColumn(name = "cat_id", referencedColumnName= "id") })
private List<Event> events = new ArrayList<Event>();
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 String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Cat getMother() {
return mother;
}
public void setMother(Cat mother) {
this.mother = mother;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public List<Event> getEvents() {
return events;
}
public void setEvents