您的位置:首页 > 编程语言 > Java开发

Eclipse+Struts+Hibernate的简单应用

2016-04-11 13:15 549 查看
在上一次Struts的基础上,整合Hibernate,依然参考网上大神的案例代码,由于版本问题的地方做了修改。

Eclipse+Struts地址->点这里

在此基础上,需要用到的相关的版本信息(有需要的可以留言^.^):

Hibernate :hibernate-release-4.3.10.Final

MySQL : MySQL Server 5.5

JDBC: mysql-connector-java-5.1.26-bin.jar

建议:大家在用的时候 包名最好改成自己的 这样在修改的过程中,可以更好的将映射的流程弄明白!

这里的步骤借鉴了原文的讲述,十分详细,感性探路的大神。

1.将Hibernate内的lib/required下的jar包和lib/jpa下的jar包复制到SSHProject项目的lib目录下。

 


2.在上面Struts项目的基础上添加com.tiny.ssh.dao和com.tiny.ssh.daoImpl包。分别创建BaseDao接口和UserDao类。

整理结构图(注意相应文件的位置和名字):



3.在数据库中创建对应的表user来写入要注册的用户。

create table user(
userId int auto_increment,
userName varchar(16) not null,
password varchar(16) not null,
gender int not null,
primary key(userId)
);


4.创建user表的Hibernate映射文件。因为这里要创建user表对应的POJO类,所以我这里把之前com.tiny.ssh.beans包改成com.tiny.ssh.forms包,用来存放页面传过来的表单数据,新创建com.tiny.ssh.beans包,用来创建POJO对象来对应数据库中的表。路径:POJO类同目录。

User.java:

package com.tiny.ssh.beans;

public class User {

private int userId;
private String username;
private String password;
private int gender;

public int getUserId() {
return userId;
}

public void setUserId(int userId) {
this.userId = userId;
}

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 int getGender() {
return gender;
}

public void setGender(int gender) {
this.gender = gender;
}

}


User.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 package="com.tiny.ssh.beans">
<class name="User" table="user">
<id name="userId" column="userId">
<generator class="native"></generator>
</id>
<property name="username" column="userName" type="java.lang.String"
not-null="true" length="16"></property>
<property name="password" column="password" type="java.lang.String"
not-null="true" length="16" />
<property name="gender" column="gender" type="java.lang.Integer" length="1" />
</class>
</hibernate-mapping>


 

5.建立Hibernate配置文件。路径:src目录下。

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-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/ssh</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<!-- JDBC connection pool (use the built-in) -->
<!-- <property name="connection.pool_size">1</property> -->

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> -->

<!-- Disable the second-level cache  -->
<!-- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> -->

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<!-- <property name="hbm2ddl.auto">update</property> -->
<mapping resource="com/tiny/ssh/beans/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>


 

6.编写Session工厂类。整合Spring后,数据源的创建和SessionFactory的创建都交给Spring去管理,就无需这个工厂类了,所以这里我临时创建在daoImpl包里面。

HibernateSessionFactory.java(有几个方法已经不再使用了,这里作为演示,不再去修改):

package com.tiny.ssh.daoImpl;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionFactory {

private static final String CFG_FILE_LOCATION = "/Hibernate.cfg.xml";

private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

private static final Configuration cfg = new Configuration()
.configure(CFG_FILE_LOCATION);

private static ServiceRegistryBuilder builder = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties());

private static ServiceRegistry registry;

private static SessionFactory sessionFactory;

public static Session currentSession() throws HibernateException {
Session session = threadLocal.get();

if (session == null || session.isOpen() == false) {

if (sessionFactory == null) {
try {
registry = builder.buildServiceRegistry();
sessionFactory = cfg.buildSessionFactory(registry);
} catch (Exception e) {
e.printStackTrace();
}
}

session = sessionFactory.openSession();
threadLocal.set(session);

}

return session;
}

public static void closeSession() throws HibernateException {
Session session = threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}

}


7.修改业务逻辑实现类。

UserManagerImpl.java:

 

package com.tiny.ssh.serviceImp;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.tiny.ssh.beans.User;
import com.tiny.ssh.dao.BaseDao;
import com.tiny.ssh.daoImpl.HibernateSessionFactory;
import com.tiny.ssh.daoImpl.UserDao;
import com.tiny.ssh.forms.UserForm;
import com.tiny.ssh.service.UserManager;

public class UserManagerImpl implements UserManager {

private BaseDao dao;

private Session session;

public UserManagerImpl() {
dao = new UserDao();
}

@Override
public void regUser(UserForm userForm) throws HibernateException {
session = HibernateSessionFactory.currentSession();
dao.setSession(session);
// 获取事务
Transaction ts = session.beginTransaction();
// 构造User对象
User user = new User();
user.setUsername(userForm.getUsername());
user.setPassword(userForm.getPassword());
user.setGender(userForm.getGender());
// 保存User对象
dao.saveObject(user);
// 提交事务
ts.commit();
// 关闭Session
HibernateSessionFactory.closeSession();
}

}


运行的结果图(一定要注意对应地方的名称):









 

希望大家多多理解相应的映射~~

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: