我的第一个hibernate例子

很久没有用过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;




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值