Hibernate入门

首先介绍一下hibernate的好处(为什么用hibernate).
hibernate的优点有很多,这里我只介绍四种:
× 提高生产率
× 解决阻抗不匹配的问题,及数据库是关系型的,而我们java是一种面向对象的语言
(O-R)
× 移植性好
× 持久透明化,我们的持久对象不需要继承hibernate的类或实现hibernate任何接口


1.新建一个java项目,并在项目中加入Hibernate的依赖库
[quote]
* HIBERNATE_HOME/hibernate3.jar
* HIBERNATE_HOME/lib/*.jar
[/quote]

2.在项目的src目录下创建一个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>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate_first</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 是否显示执行的sql语句 -->
<property name="show_sql">true</property>
<!-- 显示执行的sql语句是否格式化 -->
<property name="format_sql">true</property>
<!-- 是否自动创建表,参数详见HIBERNATE_HOME/etc/hibernate.properties文件 -->
<!--
<property name="hibernate.hbm2ddl.auto">create</property>
-->
<mapping resource="com/yx/zzg/pojo/User.hbm.xml" />
</session-factory>
</hibernate-configuration>


3.创建实体对象User.java

package com.yx.zzg.pojo;

import java.util.Date;

public class User {

private String id;

private String username;

private String password;

private Date createTime;

private Date endTime;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public Date getCreateTime() {
return createTime;
}

public void setCreateTime(Date createTime) {
this.createTime = createTime;
}

public Date getEndTime() {
return endTime;
}

public void setEndTime(Date endTime) {
this.endTime = endTime;
}
}


4.配置ORM映射文件User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.yx.zzg.pojo">
<class name="User" table="t_user">
<id name="id">
<!-- 指定主键生成策略 -->
<generator class="uuid" />
</id>
<property name="username" unique-key="true" />
<property name="password" />
<property name="createTime" />
<property name="endTime" />
</class>

</hibernate-mapping>


5.编写根据配置文件生成表的类ExportDB.java

package com.yx.zzg.util;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportDB {

public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
}


6.编写创建SessionFactory及获取Session的工具类

package com.yx.zzg.util;

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

public class HibernateUtil {
// 一个数据库对应一个SessionFactory,因此SessionFactory只需要实例化一次
// SessionFactory是线程安全的,多个线程同时使用不会有影响
// SessionFactory可以管理二级缓存
private static SessionFactory sessionFactory;

private HibernateUtil() {

}

static {
// 读取Hibernate.cfg.xml文件。单纯的new 一个Configuration,
// 默认加载的是classpath中的配置文件hibernate.properties,
// configure()方法用于告诉Hibernate加载classpath中hibernate.cfg.xml文件
// 如果配置文件不在classpath根目录下或配置文件名称不叫hibernate.cfg.xml,可以在
// configure()方法中加入参数
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}

/**
* 获取Session
* @return
*/
public static Session getSession() {
return sessionFactory.openSession();
}

}


7.编写数据操作接口

package com.yx.zzg.dao;

import java.util.List;

import com.yx.zzg.pojo.User;

public interface UserDao {

/**
* 根据主键ID查询并返回一个对象
* @param id
* @return
*/
public User findUserById(int id);

/**
* 根据非主键查询并返回一个对象,参数在数据库中必须是唯一的
* @param name
* @return
*/
public User findUserByName(String name);

/**
* 删除
* @param user
*/
public void remove(User user);

/**
* 保存
* @param user
*/
public void saveUser(User user);

/**
* 更新
* @param user
*/
public void updateUser(User user);

/**
* 分页查询,并返回一个list
* @param name
* @param firstResult
* @param maxResult
* @return
*/
public List<User> findUserByName1(String name,int firstResult,int maxResult);

}


8.编写数据操作类

package com.yx.zzg.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.yx.zzg.dao.UserDao;
import com.yx.zzg.pojo.User;
import com.yx.zzg.util.HibernateUtil;

public class UserDaoImpl implements UserDao {

@Override
public User findUserById(int id) {
//Session是非线程安全的,多个线程同时使用同一个Session会产生问题
Session session = null;
try {
session = HibernateUtil.getSession();
User user = (User) session.get(User.class, id);
return user;
} catch (HibernateException e) {
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

@Override
public User findUserByName(String name) {
Session session = null;
try {
session = HibernateUtil.getSession();
Query q = session
.createQuery("from User user where user.username=:name");
q.setString("name", name);
User user = (User) q.uniqueResult();
return user;
} catch (HibernateException e) {
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

@Override
public void remove(User user) {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.delete(user);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

@Override
public void saveUser(User user) {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

@Override
public void updateUser(User user) {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.update(user);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

@Override
public List<User> findUserByName1(String name, int firstResult,
int maxResult) {
Session session = null;
try {
session = HibernateUtil.getSession();
Criteria c = session.createCriteria(User.class).add(
Restrictions.eq("name", name));
c.setFirstResult(firstResult);
c.setMaxResults(maxResult);
List<User> list = c.list();
return list;
} catch (HibernateException e) {
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值