[SSH] Eclipse+Struts+Hibernate的简单应用
在上一次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來寫入要注冊的用戶。
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();}@Overridepublic 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();}}運行的結果圖(一定要注意對應地方的名稱):
?
希望大家多多理解相應的映射~~
?
轉載于:https://www.cnblogs.com/TinyBobo/p/4677923.html
總結
以上是生活随笔為你收集整理的[SSH] Eclipse+Struts+Hibernate的简单应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于a标签的 href 与 onlick
- 下一篇: JS写的排序算法演示