Hibernate综合运用内部留言本(三)
来源:互联网 发布:数据库删除语句怎么写 编辑:程序博客网 时间:2024/05/29 03:41
一 理解需求
二 根据需求文档,我们画出程序框架图
三 创建一个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;
阅读全文
0 0
- Hibernate综合运用内部留言本(三)
- Hibernate综合运用内部留言本(一)
- Hibernate综合运用内部留言本(二)
- Hibernate综合运用内部留言本(四)
- Hibernate综合运用内部留言本(五)
- Hibernate综合运用内部留言本(六)
- php运用xml实例--留言本
- 挑战最棒的留言本的源码(三)
- 留言本(4)写留言
- 留言本(5)回复留言
- Struts加Hibernate实现web留言本
- 留言本(7)管理员管理留言本
- HTML5快速入门(三)—— 标签综合运用
- Android MVVM架构模式 详解和综合运用(三)
- 留言本(3)主页
- Case 在做留言本程序中的运用...
- 留言本
- 留言本
- 详解大端模式和小端模式
- laravel 使用测试工厂Factory添加测试数据
- java 数组
- 在pom.xml中指定主类
- 第十篇
- Hibernate综合运用内部留言本(三)
- 简易的深度学习框架Keras代码解析与应用
- 练习 7-6 编写一个程序,比较两个文件并打印它们第一个不相同的行
- Trie树
- 梯度下降法快速教程 | 第三章:学习率衰减因子(decay)的原理与Python实现
- POJ:1961-Period(寻找字符串循环节)
- Centos防火墙设置与端口开放的方法
- RNN粗浅理解
- 交叉编译和交叉工具链