标签:
废话不多说,直接先来看一波代码:
实体类:
com.hbm.entity包下的Log实体类(Log.java):
package com.hbm.entity;
import java.io.Serializable;
import java.util.Date;
/**日志实体类**/
public class Log implements Serializable{
private static final long serialVersionUID = 2823717339283174040L;
private long id;
private String content;//日志内容
private String creator;//日志创建者
private Date createDate;//日志生成时间
public Log() {
// TODO Auto-generated constructor stub
}
public Log(String content, String creator, Date createDate) {
super();
this.content = content;
this.creator = creator;
this.createDate = createDate;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Log [id=").append(id).append(", content=").append(content).append(", creator=").append(creator)
.append(", createDate=").append(createDate).append("]");
return builder.toString();
}
}
/**************************************************************************************/
com.hbm.entity包下的Log实体类XML文件(Log.hbm.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping SYSTEM
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!-- 类名.hbm.xml 对象关系映射文件,实体类到表的映射 -->
<hibernate-mapping package="com.hbm.entity">
<!-- 类名映射成表名 -->
<class name="Log" table="hbm_log">
<!-- 对象标识映射成主键id -->
<!-- 如果映射的列名和属性名是一致的,那么column可以省略不写 -->
<id name="id" column="hid">
<!-- 配置序列的生成策略 -->
<generator class="sequence">
<!-- 配置序列的相关参`数 -->
<!-- 指明序列的名称,如果不指明,那么hibernate会默认分配一个名 -->
<param name="sequence">hbm_log_id</param>
<!-- 指明序列的起始值 -->
<param name="parameters">start with 1</param>
</generator>
</id>
<!-- 配置属性映射到列 ,属性名若和列名一致,则column可以省略不写
column是用来给列取名字的-->
<property name="content" not-null="true"></property>
<property name="creator"></property>
<property name="createDate" type="date" column="log_date"></property>
</class>
</hibernate-mapping>
/**************************************************************************************/
src根目录下的hibernate的配置文件(hibernate.cfg.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Hibernate框架的配置文件 -->
<hibernate-configuration>
<!-- 配置SessionFactory(相当于一个数据源,重量级的对象) -->
<session-factory>
<!-- 配置数据库相关的连接信息 -->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">
jdbc:oracle:thin:@127.0.0.1:1521:XE
</property>
<property name="connection.username">jsd1606</property>
<property name="connection.password">jsd1606</property>
<!-- 设置c3p0连接池 -->
<!-- 最大容量 -->
<property name="c3p0.max_size">20</property>
<!-- 最小容量 -->
<property name="c3p0.min_size">5</property>
<!-- 最大语句对象数量 -->
<property name="c3p0.max_statements">50</property>
<!-- 超时时间 -->
<property name="c3p0.timeout">5000</property>
<!-- 检测超时时间间隔 -->
<property name="c3p0.idle_test_period">2000</property>
<!-- 容量扩容增量 -->
<property name="c3p0.acquire_increment">5</property>
<!-- 配置数据库方言 -->
<property name="dialect">
org.hibernate.dialect.Oracle10gDialect
</property>
<!-- 其他配置 -->
<!-- create代表每次都先删除,再创建,会造成数据表中的数据丢失 -->
<!-- update如果无则创建,有则更新 -->
<property name="hbm2ddl.auto">update</property>
<!-- 是否在控制台输出sql语句 -->
<!-- 产品提交的时候,一定要将此句注释掉 -->
<property name="show_sql">true</property>
<!-- 格式化sql语句的显示 -->
<property name="format_sql">true</property>
<!-- 注册ORM映射文件 -->
<mapping resource="com/hbm/entity/log.hbm.xml" />
</session-factory>
</hibernate-configuration>
/**************************************************************************************/
com.hbm.util包下的hiberinate工具类(HibernateUtil.java):
package com.hbm.util;
import javax.management.RuntimeErrorException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static SessionFactory sf = null;
/**
* 通过静态代码块来创建SessionFactory
*/
static{
try {
//1.启动hibernate.cfg.xml配置文件,通过Configuration类
Configuration cfg = new Configuration();
//2.调用configure()方法来默认去加载src根目录下面的hibernate.cfg.xml文件
//注意:configure(String path);//重载方法,可以用来加载指定目录下面的的配置文件.
cfg.configure();
//3.创建SessionFactory(充当数据源的一个代理,重量级的对象)
//通常一个数据库只需要配置一个SesisonFactory对象.通过这个
//对象,可以获取Session(Connection+Cache)
//3-1.hibernate3.x创建方式(已经过时了)
//SessionFactory sf = cfg.buildSessionFactory();
//3-2.hibernate4.x创建方式
ServiceRegistry sr = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties())
.build();
sf = cfg.buildSessionFactory(sr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 获取Session
*/
public static Session getSession() throws HibernateException{
return sf==null?null:sf.openSession();
}
/**
* 关闭session
*/
public static void closeSession(Session ses){
if(null!=ses){
ses.close();
}
}
}
/**************************************************************************************/
com.hbm.dao包下的接口(ILogDao.java):
package com.hbm.dao;
import com.hbm.entity.Log;
public interface ILogDao {
/**
* 保存一个日志对象
*/
public void save(Log log);
/**
* 根据id查找日志对象
*/
public Log getById(long id);
/**
* 根据id删除一个log日志对象
*/
public void delById(Log log);
/**
* 根据id更新一个log日志对象
*/
public void updateById(Log log);
}
/**************************************************************************************/
com.hbm.dao.impl包下的接口实现类(LogDaoImpl.java):
package com.hbm.dao.impl;
import org.hibernate.HibernateException;
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.hbm.dao.ILogDao;
import com.hbm.entity.Log;
import com.hbm.util.HibernateUtil;
public class LogDaoImpl implements ILogDao{
@Override
public void save(Log log) {
Session ses = null;
Transaction tx = null;
try {
//ses = sf.openSession();
ses = HibernateUtil.getSession();
//5.开启事务(hibernate中的事务是默认关闭的)
tx = ses.beginTransaction();
//执行对象的CRUD操作...
ses.save(log);
//提交事务
tx.commit();
} catch (HibernateException e) {
if(null!=tx){
tx.rollback();//回滚事务
}
e.printStackTrace();
}finally{
//关闭session
/*if(null!=ses){
ses.close();
}*/
HibernateUtil.closeSession(ses);
}
}
@Override
public Log getById(long id) {
Log log = null;
Session ses = null;
Transaction tx = null;
try {
//1.获取Session
ses = HibernateUtil.getSession();
//2.开启事务
tx = ses.beginTransaction();
//3.执行具体的业务操作CRUD
log = (Log) ses.get(Log.class, id);
//4.提交事务
tx.commit();
} catch (HibernateException e) {
//回滚事务
if(null!=tx){
tx.rollback();
}
e.printStackTrace();
}finally {
//5.关闭session
HibernateUtil.closeSession(ses);
}
return log;
}
@Override
public void delById(Log log) {
Session ses = null;
Transaction tx = null;
try {
//1.获取Session
ses = HibernateUtil.getSession();
//2.开启事务
tx = ses.beginTransaction();
ses.delete(log);
tx.commit();
} catch (HibernateException e) {
if(null!=tx){
tx.rollback();//回滚事务
}
e.printStackTrace();
}finally{
//关闭Session连接
HibernateUtil.closeSession(ses);
}
}
@Override
public void updateById(Log log) {
Session ses = null;
Transaction tx = null;
try {
//1.获取Session
ses = HibernateUtil.getSession();
//2.开启事务
tx = ses.beginTransaction();
ses.update(log);
tx.commit();
} catch (HibernateException e) {
if(null!=tx){
tx.rollback();//回滚事务
}
e.printStackTrace();
}finally{
//关闭Session连接
HibernateUtil.closeSession(ses);
}
}
}
/**************************************************************************************/
单元测试:
package com.hbm.dao;
import java.util.Date;
import org.junit.Test;
import com.hbm.dao.impl.LogDaoImpl;
import com.hbm.entity.Log;
public class TestILogDao {
private ILogDao dao = new LogDaoImpl();
@Test
public void testdelById(){
dao.delById(dao.getById(1L));
}
@Test
public void testupdateById(){
Log log = dao.getById(2L);
log.setContent("xml测试");
log.setCreator("iyl");
log.setCreateDate(new Date());
dao.updateById(log);
}
}
标签:
原文地址:http://www.cnblogs.com/yunlei0821/p/5758062.html