Hibernate综合运用内部留言本(三)
2017-12-01 19:12
821 查看
一 理解需求
二 根据需求文档,我们画出程序框架图
三 创建一个web项目
四 创建web层
五 引入hibernate,使用手动的方法来开发domain和对象关系文件
1 Message
2 Users
3 Message.hbm.xml
4 Users.hbm.xml
六 配置文件
七 写成工具类
八 测试一下看看能否映射成功
生成了两张表:
二 根据需求文档,我们画出程序框架图
三 创建一个web项目
四 创建web层
五 引入hibernate,使用手动的方法来开发domain和对象关系文件
1 Message
package com.sina.domain; public class Message { private Integer mesId; private java.util.Date mesTime; private String content; //对象 private Users sender; private Users getter; public Integer getMesId() { return mesId; } public void setMesId(Integer mesId) { this.mesId = mesId; } public java.util.Date getMesTime() { return mesTime; } public void setMesTime(java.util.Date mesTime) { this.mesTime = mesTime; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Users getSender() { return sender; } public void setSender(Users sender) { this.sender = sender; } public Users getGetter() { return getter; } public void setGetter(Users getter) { this.getter = getter; } }
2 Users
package com.sina.domain; import java.util.List; import java.util.Set; public class Users { private Integer userid; private String userpwd; private String name; //这里一个用户可以发送多个消息,也可以接收多个消息. one-to-many private Set<Message> sendMessages; private Set<Message> getMessages; public Integer getUserid() { return userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUserpwd() { return userpwd; } public void setUserpwd(String userpwd) { this.userpwd = userpwd; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Message> getSendMessages() { return sendMessages; } public void setSendMessages(Set<Message> sendMessages) { this.sendMessages = sendMessages; } public Set<Message> getGetMessages() { return getMessages; } public void setGetMessages(Set<Message> getMessages) { this.getMessages = getMessages; } }
3 Message.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.sina.domain"> <class name="Message"> <!-- 主键属性 --> <id name="mesId" type="java.lang.Integer"> <generator class="increment"> </generator> </id> <!-- 普通属性 --> <property name="content" type="java.lang.String"> <column name="content" length="2000"/> </property> <property name="mesTime" type="java.util.Date"> <column name="mesTime" /> </property> <!-- 配置getter属性 --> <many-to-one name="getter" column="getter_id" /> <!-- 配置sendder --> <many-to-one name="sender" column="sender_id"/> </class> </hibernate-mapping>
4 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";> <hibernate-mapping package="com.sina.domain"> <class name="Users" table="users" lazy="false"> <id name="userid" type="java.lang.Integer"> <generator class="increment"> </generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="64"/> </property> <property name="userpwd" type="java.lang.String"> <column name="userpwd" length="64"/> </property> <!-- getMessages属性 --> <!-- <list name="sendMessages"> <list-index column=""/> <key column="sender_id" /> <one-to-many class="Message"/> </list>--> <set name="sendMessages"> <key column="sender_id" /> <one-to-many class="Message"/> </set> <set name="getMessages"> <key column="getter_id" /> <one-to-many class="Message"/> </set> </class> </hibernate-mapping>
六 配置文件
<?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";> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.url"> jdbc:mysql://localhost:3306/users </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> org.gjt.mm.mysql.Driver </property> <property name="show_sql">true</property> <!-- 配置让hibernate自动创建关系模型(表) --> <property name="hbm2ddl.auto">create</property> <mapping resource="com/sina/domain/Message.hbm.xml" /> <mapping resource="com/sina/domain/Users.hbm.xml" /> </session-factory> </hibernate-configuration>
七 写成工具类
package com.sina.util; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; 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 void closeCurrentSession() { Session s = getCurrentSession(); if (s != null && s.isOpen()) { s.close(); threadLocal.set(null); } } // 这里提供一个根据id返回对象的方法 public static Object findById(Class clazz, java.io.Serializable id) { Session s = null; Transaction tx = null; Object obj = null; try { s = openSession(); tx = s.beginTransaction(); obj = s.load(clazz, id); tx.commit(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); // TODO: handle exception } finally { if (s != null && s.isOpen()) { s.close(); } } return obj; } // 统一的一个修改和删除(批量 hql) hql"delete upate ...??" public static void executeUpdate(String hql, String[] parameters) { Session s = null; Transaction tx = null; try { s = openSession(); tx = s.beginTransaction(); Query query = s.createQuery(hql); // 先判断是否有参数要绑定 if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { query.setString(i, parameters[i]); } } query.executeUpdate(); tx.commit(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); // TODO: handle exception } finally { if (s != null && s.isOpen()) { s.close(); } } } // 如果要配置openSessionInView // 统一的一个修改和删除(批量 hql) hql"delete upate ...??" public static void executeUpdateOpenInView(String hql, String[] parameters) { Session s = getCurrentSession(); Query query = s.createQuery(hql); // 先判断是否有参数要绑定 if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { query.setString(i, parameters[i]); } } query.executeUpdate(); } // 统一的添加的方法 public static void save(Object obj) { Session s = null; Transaction tx = null; try { s = openSession(); tx = s.beginTransaction(); s.save(obj); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw new RuntimeException(e.getMessage()); // TODO: handle exception } finally { if (s != null && s.isOpen()) { s.close(); } } } // 提供一个统一的查询方法(带分页) hql 形式 from 类 where 条件=? .. public static List executeQueryByPage(String hql, String[] parameters, int pageSize, int pageNow) { Session s = null; List list = null; try { s = openSession(); Query query = s.createQuery(hql); // 先判断是否有参数要绑定 if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { query.setString(i, parameters[i]); } } query.setFirstResult((pageNow - 1) * pageSize).setMaxResults( pageSize); list = query.list(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); // TODO: handle exception } finally { if (s != null && s.isOpen()) { s.close(); } } return list; } // 提供一个统一的查询方法 hql 形式 from 类 where 条件=? .. public static List executeQuery(String hql, String[] parameters) { Session s = null; List list = null; try { s = openSession(); Query query = s.createQuery(hql); // 先判断是否有参数要绑定 if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { query.setString(i, parameters[i]); } } list = query.list(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); // TODO: handle exception } finally { if (s != null && s.isOpen()) { s.close(); } } return list; } }
八 测试一下看看能否映射成功
package com.sina.test; import com.sina.util.HibernateUtil; import com.sina.util.MyTools; public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HibernateUtil.openSession(); } }
生成了两张表:
CREATE TABLE `users` ( `userid` int(11) NOT NULL, `name` varchar(64) DEFAULT NULL, `userpwd` varchar(64) DEFAULT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `message` ( `mesId` int(11) NOT NULL, `content` longtext, `mesTime` datetime DEFAULT NULL, `getter_id` int(11) DEFAULT NULL, `sender_id` int(11) DEFAULT NULL, PRIMARY KEY (`mesId`), KEY `FK9C2397E7D2E9BD25` (`getter_id`), KEY `FK9C2397E76D6C03BB` (`sender_id`), CONSTRAINT `FK9C2397E76D6C03BB` FOREIGN KEY (`sender_id`) REFERENCES `users` (`userid`), CONSTRAINT `FK9C2397E7D2E9BD25` FOREIGN KEY (`getter_id`) REFERENCES `users` (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
相关文章推荐
- Hibernate综合运用内部留言本(一)
- Hibernate综合运用内部留言本(二)
- Hibernate综合运用内部留言本(四)
- Hibernate综合运用内部留言本(五)
- Hibernate综合运用内部留言本(六)
- 内部类综合运用 温室的运作(策略模式)
- L2-001. 紧急救援-Dijkstra算法的综合运用
- cocos2d-x学习笔记(五)仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)
- Hibernate内部原理的简单理解
- 安卓学习之路_20140424_AudioManager、MediaPlayer的综合运用、ScrollView、Gallery
- hibernate继承关系映射和java反射机制的运用
- hibernate映射多对多,一对一,一对多,自身关联综合应用
- ★LV与ASP综合运用(一)
- 设计模式在综合前置中的运用(一)--工厂方法模式
- 5_5 集合栈计算机(UVa12096)<stack与STL其他容器的综合运用>
- FZU 1205(小鼠迷宫问题)BFS+DFS的基本综合运用(同一题目中体现两种搜索方法的特点)
- 搜索引擎第一讲 Compas+spring+hibernate的综合实例
- 继承的综合运用《Point类派生出Circle类而且进行各种操作》
- set综合运用
- 对Java多态性综合运用的探讨