一 开发分层框架
二 开发步骤
1 根据需求,设计数据库,有两张表
users和message
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`passwd` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `message` (
`id` int(11) NOT NULL,
`sender` varchar(64) NOT NULL,
`getter` varchar(64) NOT NULL,
`content` varchar(200) NOT NULL,
`sendTime` date NOT NULL,
`attachment` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2 创建web项目
3 引入struts开发包,完成web层框架搭建
4 使用db brower连接Mysql数据库
5 引入hibernate开发包
6 创建需要的包com.sina.domain.* com.sina.service com.util
7 通过hibernate逆向工程创建domain和对象映射文件
Users类
package com.sina.domain;
/**
* Users entity. @author MyEclipse Persistence Tools
*/
public class Users implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String passwd;
// Constructors
/** default constructor */
public Users() {
}
/** full constructor */
public Users(String name, String passwd) {
this.name = name;
this.passwd = passwd;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return this.passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
Users.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";>
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.sina.domain.Users" table="users" catalog="messageboard">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
<property name="passwd" type="java.lang.String">
<column name="passwd" not-null="true" />
</property>
</class>
</hibernate-mapping>
8 编写service
package com.sina.service;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.sina.domain.Users;
import com.sina.util.HibernateUtil;
public class UsersService {
//验证用户是否合法
public Users checkUser(Users users){
String hql="from Users where name='"
+users.getName()+"' and passwd='"+users.getPasswd()+"'";
List<Users> list=HibernateUtil.executeQuery(hql);
if(list.size()==1){
return list.get(0);
}else{
return null;
}
}
}
9 升级HibernateUtil
package com.sina.util;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.sina.domain.Users;
final public class HibernateUtil {
private static SessionFactory sessionFactory=null;
//使用线程局部模式
private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();
private HibernateUtil(){};
static {
sessionFactory=new Configuration().configure().buildSessionFactory();
}
//获取全新的全新的sesession
public static Session openSession(){
return sessionFactory.openSession();
}
//获取和线程关联的session
public static Session getCurrentSession(){
Session session=threadLocal.get();
//判断是否得到
if(session==null){
session=sessionFactory.openSession();
//把session对象设置到 threadLocal,相当于该session已经和线程绑定
threadLocal.set(session);
}
return session;
}
//提供一个统一的查询方法
public static List executeQuery(String hql){
Session session=null;
Transaction ts=null;
List list=null;
try {
session=HibernateUtil.getCurrentSession();
ts=session.beginTransaction();
list= session.createQuery(hql).list();
ts.commit();
} catch (Exception e) {
if(ts!=null){
ts.rollback();
}
throw new RuntimeException("错误了");
// TODO: handle exception
}finally{
if(session!=null&& session.isOpen()){
session.close();
}
}
return list;
}
}
10 测试结果