一个简单的Hibernate入门示例
2008-11-13 13:16
417 查看
在 Java Web 开发应用中,Hibernate可以作为应用程序的数据访问层。
这里以一个简单用户注册用例来说明如何开发一个Hibernate的应用程序。
该例子的需求:把注册页面输入的用户名、密码、性别、年龄方面的信息存入数据库中。
如果采用经典的MVC模式的话,那么各层的构建如下:
视图层:注册页面(register.jsp)、反馈信息页面(reply.jsp)
控制层:RegisterServlet.java
模型层/数据访问层:基础类HibernateSessionFactory.java、持久化类Register.java、
配置文件hibernate.cfg.xml、映射文件register.hbm.xml等等
数据库层:采用MySQL数据库,数据表t_register
下面分步来构建这个Hibernate应用程序。
1、创建数据库
2、创建视图层页面
清单1:register.jsp
清单2:reply.jsp
3、设计持久化类
对应于数据库中表项。
清单3:Register.java
4、设计Hibernate配置文件
清单4:hibernate.cfg.xml
5、设计映射文件
数据库表到Java类数据项的映射
清单5:register.hbm.xml
6、设计Hibernate的基础类HibernateSessionFactory.java
HibernateSessionFactory.java包含了Configuration实例、SessionFactory实例和Session实例的生成函数,
这样应用程序就可以直接调用HibernateSessionFactory来生成Session实例,不必再重复编写Configuration实例、
SessionFactory实例和Session实例的生成代码了。
清单6:HibernateSessionFactory.java
7、设计控制类
从页面提取数据,然后调用HibernateSessionFactory通过Hibernate机制将数据插入到数据库中。
清单7:RegisterServlet.java
8、配置web.xml
清单8:web.xml
这里以一个简单用户注册用例来说明如何开发一个Hibernate的应用程序。
该例子的需求:把注册页面输入的用户名、密码、性别、年龄方面的信息存入数据库中。
如果采用经典的MVC模式的话,那么各层的构建如下:
视图层:注册页面(register.jsp)、反馈信息页面(reply.jsp)
控制层:RegisterServlet.java
模型层/数据访问层:基础类HibernateSessionFactory.java、持久化类Register.java、
配置文件hibernate.cfg.xml、映射文件register.hbm.xml等等
数据库层:采用MySQL数据库,数据表t_register
下面分步来构建这个Hibernate应用程序。
1、创建数据库
DROP TABLE IF EXISTS `t_register`; CREATE TABLE `t_register` ( `id` int(11) NOT NULL, `username` varchar(30) collate utf8_unicode_ci default NULL, `password` varchar(30) collate utf8_unicode_ci default NULL, `sex` varchar(10) collate utf8_unicode_ci default NULL, `age` int(10) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
清单1:register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>用户注册页面</title> </head> <body> <form action="RegisterServlet" method="post"> 用户名: <input type="text" name="username"> <br> 密码: <input type="password" name="password"> <br> 性别: <input type="text" name="sex"> <br> 年龄: <input type="text" name="age"> <br /> <input type="submit" name="submit" value="submit"> </form> </body> </html> |
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <html> <head> <title>Successfully</title> </head> <body> Inster data into database <br> </body> </html> |
对应于数据库中表项。
清单3:Register.java
package register; public class Register { int id; Integer age; String username = new String(); String password = new String(); String sex = new String(); public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } |
清单4:hibernate.cfg.xml
<?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="connection.username">root</property> <property name="connection.url">jdbc:mysql://localhost:3306/study</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="myeclipse.connection.profile">MySQL</property> <property name="connection.password">123456</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <mapping resource="register.hbm.xml" /> </session-factory> </hibernate-configuration> |
数据库表到Java类数据项的映射
清单5:register.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="register"> <class name="register.Register" table="T_Register"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="increment"></generator> </id> <property name="username" type="java.lang.String"> <column name="username" length="30" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="30" /> </property> <property name="sex" type="java.lang.String"> <column name="sex" length="10" /> </property> <property name="age" type="java.lang.Integer"> <column name="age" /> </property> </class> </hibernate-mapping> |
HibernateSessionFactory.java包含了Configuration实例、SessionFactory实例和Session实例的生成函数,
这样应用程序就可以直接调用HibernateSessionFactory来生成Session实例,不必再重复编写Configuration实例、
SessionFactory实例和Session实例的生成代码了。
清单6:HibernateSessionFactory.java
package register; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; public class HibernateSessionFactory { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal threadLocal = new ThreadLocal(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; private HibernateSessionFactory() { } /** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } /** * Rebuild hibernate session factory * */ public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * return session factory * */ public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } /** * return session factory * * session factory will be rebuilded in the next call */ public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } /** * return hibernate configuration * */ public static Configuration getConfiguration() { return configuration; } } |
从页面提取数据,然后调用HibernateSessionFactory通过Hibernate机制将数据插入到数据库中。
清单7:RegisterServlet.java
package register; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.hibernate.*; public class RegisterServlet extends HttpServlet{ private static final String CONTENT_TYPE = "text/html; charset=GBK"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); //从页面得到数据值 String username = request.getParameter("username"); String password = request.getParameter("password"); String sex = request.getParameter("sex"); Integer age = new Integer(request.getParameter("age")); //将值传递给持久类->对应的是数据库里的表 Register rg = new Register(); rg.setUsername(username); rg.setPassword(password); rg.setSex(sex); rg.setAge(age); Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); try { session.save(rg);//保存,准备提交 tx.commit();//提交到数据库 session.close(); response.sendRedirect("reply.jsp"); } catch (Exception e) { e.printStackTrace(); tx.rollback();//出现异常,将刚刚提交动作回转,rollback } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
清单8:web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>register.RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/RegisterServlet</url-pattern> </servlet-mapping> </web-app> |
相关文章推荐
- Hibernate快速入门+简单示例
- Spring+Struts+Hibernate(一个实现用户注册的简单示例)
- 利用maven搭建一个简单的hibernate示例
- Apache Thrift 一个入门简单示例
- OpenCV 入门示例之四:一个简单的变换
- 一个简单的Hibernate的示例
- (转)Web Service入门简介(一个简单的WebService示例)
- 一个最简单的Hibernate入门简介
- 构建一个 hibernate 简单示例
- nodejs入门教程二:创建一个简单应用示例
- JAVA入门[19]-Hibernate简单示例
- Web Service入门简介(一个简单的WebService示例)
- 一个简单的Struts Hibernate入门例子(上)
- Web Service入门简介(一个简单的WebService示例)
- hibernate的入门的一个简单案例
- 一个简单的Struts Hibernate入门例子(下)
- 深入浅出学习Struts框架(一):一个简单mvc模式代码示例开始
- vue用Object.defineProperty手写一个简单的双向绑定的示例
- 史上最简单的Hibernate入门简介
- HTML入门笔记27-HTML一个简单的表单设计