很久没有用过Hibernate了,因为毕业后就一直在用MyBatis,这是一个只有hibernate,没有集成其它技术的例子。
1、创建一个web项目并将整体的结构布置好,如图
2、配置hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<!-- url -->
<property name="connection.url">jdbc:mysql://localhost:3306/acc</property>
<!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 账号 -->
<property name="connection.username">root</property>
<!-- 密码 -->
<property name="connection.password"></property>
<!-- 映射文件 -->
<mapping resource="yek/pojo/Member.hbm.xml" />
</session-factory>
</hibernate-configuration>
3、编写一个公用的获取Hibernate的Session的类HibernateSessionFactory.java
package yek.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author yangerke
*
* @time 2016年3月29日
*/
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
//创建Configuration实例
private static Configuration configuration = new Configuration();
private static SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
//初始化sessionFactory,只第一次加载的时候执行
static {
try {
//读取解析配置文件
configuration.configure(configFile);
//构建sessionFactory对象
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取session对象
public static Session getSession() throws HibernateException{
Session session = (Session) threadLocal.get();
//如果当前的session对象不存或未开启,则重建
if(null == session || !session.isOpen()) {
//重建sessionFactory对象
if (null == sessionFactory) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession() : null;
threadLocal.set(session);
}
return session;
}
//重建sessionFactory对象
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if(null != session) {
session.close();
}
}
}
4、创建持久化类Member.java
package yek.pojo;
/**
* @author yangerke
*
* @time 2016年3月29日
*/
public class Member {
private Integer id;
private String username;
private String password;
public Member(){}
public Member(String username, String password) {
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
}
5、创建持久化类对应的映射文件Member.hbm.xml(注:映射文件要与持久化类一一对应)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="yek.pojo.Member" table="member" catalog="acc">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="native"/>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20"/>
</property>
<property name="password" type="java.lang.String">
<column name="password" length="20"/>
</property>
</class>
</hibernate-mapping>
6、创建MemberDao类MemberDao.java
package yek.dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import yek.pojo.Member;
import yek.util.HibernateSessionFactory;
/**
* @author yangerke
*
* @time 2016年3月29日
*/
public class MemberDao {
public Session getSession() {
return HibernateSessionFactory.getSession();
}
public void save(Member transientInstance) {
try {
Transaction tx = getSession().beginTransaction();
getSession().save(transientInstance);
tx.commit();
} catch (RuntimeException re) {
re.printStackTrace();
}
}
@SuppressWarnings("rawtypes")
public List findByProperty(String propertyName, Object value) {
try {
String queryString ="from Member as model where model." + propertyName + "=?";
Query queryObject = getSession().createQuery(queryString);
queryObject.setParameter(0, value);
return queryObject.list();
} catch (RuntimeException re) {
throw re;
}
}
}
7、最后添加两个测试页面
login.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>第一个Hibernate程序</title>
<style type="text/css">
body,td,th {
font-size: 12px;
}
</style>
</head>
<body>
<form id="form1" name="form1" method="post" action="submit.jsp">
<br>用户名:<input name="username" type="text" id="username" />
<br>密 码:<input name="password" type="password" id="password" />
<br><input type="submit" name="Submit" value="提交" />
</form>
</body>
</html>
test.jsp
<%@ page language="java" import="java.util.*,yek.pojo.Member,yek.dao.MemberDao" pageEncoding="gb2312"%>
<%!
public static String codestring(String s){//乱码处理
String str=s;
try{
byte b[]=str.getBytes("iso-8859-1");
str=new String(b,"utf-8");
return str;
}catch(Exception e){
return str;
}
}
%>
<%
String username=codestring(request.getParameter("username"));//取得用户名
String password=codestring(request.getParameter("password"));//取得密码
MemberDao md=new MemberDao();
Member m=new Member();
//封装
m.setUsername(username);
m.setPassword(password);
md.save(m);//调用方法保存对象
out.print("注册成功<br>");
List l=null;
l=md.findByProperty("username",username);//从数据库中加载类对象
Iterator i=l.iterator();
out.print("从数据库中加载类对象<br>");
if(i.hasNext()){
m=(Member)i.next();
out.print("用户名:"+m.getUsername()+"<br>");
out.print("密码:"+m.getPassword()+"<br>");
}else{
out.print("数据库中不存在该用户!");
}
%>
8、在创建项目的同时请不要忘记将Hibernate所依赖的jar包放入项目的lib文件夹
9、在运行前处理数据库(mysql)
创建数据库test
创建表member
CREATE TABLE `member` (
`id` int(3) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;