hibernate的总结构预览:
(PS:1注意在serivce的包中全部是空的.2在pojo类中必须有一个无参的构造方法,这里我删除了)
package com.dqd.domain;
import java.util.Date;
//该pojo按照规范序列化,目的是可以唯一的标识对象
/**
* com.dqd.domain/Employee.java
* @author Dqd
*/
public class Employee implements java.io.Serializable{
private static final long serivalVersionUID = 1L;
private Integer eId;
private String eName;
private String eEmail;
private Date ehiredate;
public Integer geteId() {
return eId;
}
public void seteId(Integer eId) {
this.eId = eId;
}
public String geteName() {
return eName;
}
public void seteName(String eName) {
this.eName = eName;
}
public String geteEmail() {
return eEmail;
}
public void seteEmail(String eEmail) {
this.eEmail = eEmail;
}
public Date getEhiredate() {
return ehiredate;
}
public void setEhiredate(Date ehiredate) {
this.ehiredate = ehiredate;
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- dtd文件的查找 -->
<!--
/**
* com.dqd.domain/Employee.hbm.xml
* @author Dqd
*/
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.dqd.domain">
<class name="Employee" table="employee">
<!-- id元素用于指定主键 -->
<!-- <id name="eId" column="eId" type="java.lang.Integer">
该元素用于指定主键的生成策略
<generator class="sequence">
<param name="sequence">emp_seq</param>
</generator>
针对于oreacl数据库的语句
</id>-->
<id name="eId" column="eId" type="java.lang.Integer">
<generator class="increment">
</generator>
</id>
<!-- 其他属性的配置 -->
<property name="eName" type="java.lang.String">
<column name="eName" not-null="false"/>
</property>
<property name="eEmail" type="java.lang.String" >
<column name="eEmail" not-null="false"></column>
</property>
<property name="ehiredate" type="java.util.Date">
<column name="ehiredate" not-null="false"></column>
</property>
</class>
</hibernate-mapping>
package com.dqd.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
//一个单例
/**
* com.dqd.util/MySessionFactory.java
* @author Dqd
*
*/
final public class MySessionFactory {
private MySessionFactory(){
}
private static SessionFactory sessionFactory = null;
private static ServiceRegistry serviceRegistry = null;
private static Configuration configuration =null;
static{
configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
package com.dqd.view;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import com.dqd.domain.Employee;
import com.dqd.util.MySessionFactory;
/**
* com.dqd.view/TestMain.java
* @author Dqd
*
*/
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1创建Configuation对象2.创建会话工厂3.创建会话4.事物提交
//我们用hbm完成增删改查
//A.增加用户addEmployee();
//B.修改用户changeEmployee();
//C.删除delEmployee();
changeEmployee();//发生异常的回滚(其他几个方法都应当效仿此方法)
}
public static void delEmployee() {
Session session = MySessionFactory.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
Employee emp =(Employee) session.load(Employee.class, 2);
session.delete(emp);
transaction.commit();
session.close();
}
public static void changeEmployee() {
Session session = MySessionFactory.getSessionFactory().openSession();
Transaction transaction = null;
//获取要修改的用户,load通过主键获取对象实例
try{
transaction = session.beginTransaction();
Employee emp = (Employee)session.load(Employee.class,1);
emp.seteName("Grit_ICPC");
int i = 9/0;
transaction.commit();
}catch(Exception e){
if(transaction!=null){
transaction.rollback();
}
throw new RuntimeException(e.getMessage());
}finally{
if( (session!=null)&&(session.isOpen()) ){
session.close();
}
}
}
public static void addEmployee() {
//去找配置的文件,完成初始化
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//SessionFactory sessionFactory = configuration.buildSessionFactory();
//穿件session相当于jdbc的connection,用于和数据库的会话
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee emp = new Employee();
emp.seteName("dqd");
emp.seteEmail("dqd@qq.com");
emp.setEhiredate(new Date());
//持久化的体现(保存到数据库中)
//对应于insert
session.save(emp);
transaction.commit();
session.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!--
hibernate.cfg.xml
-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置使用driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name=""></property>
<!-- 告诉hbm链接的数据库 -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="show_sql">true</property>
<!-- hibernate自动的创建表 ,如果没有就创建一个-->
<property name="hbm2ddl.auto">update</property>
<!-- 管理对象关系映射文件 -->
<mapping resource="com/dqd/domain/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>