Hibernate的基本开发流程
一、Hibernate开发的基本流程
二、Hibernate开发的环境搭建
1、引入Hibernate核心包以及Hibernate依赖包即可。可以在Hibernate目录下的\lib\required目录下找到所需jar包。
2、加入数据库驱动。这里主要是采用Mysql数据库来操作,所以在这里引入MysqL的JDBC驱动。
3、提供核心配置文件hibernate.cfg.xml文件(在src文件夹下即可)。
三、数据库方面的操作
在mysql中新建一个数据库Hibernate5,然后建立如下的一个表来进行测试。
create table T_register
(
id int primary key,
userName varchar(30),
userPwd varchar(30),
sex varchar(10),
age int
)
四、编写POJO类
根据数据表的字段情况,创建如下持久化类,实际上是一个javaBean类
package com.chen; public class TRegister{ //定义基本属性,与数据库中的字段对应。注意都是引用类型 private Integer id;
private String userName;
private String userPwd;
private String sex;
private Integer age; // Constructors /** default constructor */
public TRegister() {
} /** minimal constructor */
public TRegister(Integer id) {
this.id = id;
} /** full constructor */
public TRegister(Integer id, String userName, String userPwd, String sex, Integer age) {
this.id = id;
this.userName = userName;
this.userPwd = userPwd;
this.sex = sex;
this.age = age;
} // 定义get set方法 public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} public String getUserName() {
return this.userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getUserPwd() {
return this.userPwd;
} public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
} public String getSex() {
return this.sex;
} public void setSex(String sex) {
this.sex = sex;
} public Integer getAge() {
return this.age;
} public void setAge(Integer age) {
this.age = age;
}
}
五、配置相关的xml文件
1、配置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">
<hibernate-configuration>
<session-factory> <!-- 配置连接数据库的基本信息 -->
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://192.168.1.148:3306/hibernate5</property> <!-- 配置 hibernate 的基本信息 -->
<!-- hibernate 所使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!-- 执行操作时是否在控制台打印 SQL -->
<property name="show_sql">true</property>
<!-- 是否对 SQL 进行格式化 -->
<property name="format_sql">true</property>
<!-- 指定关联的 .hbm.xml 文件 -->
<mapping resource="com/chen/TRegister.hbm.xml"/> </session-factory> </hibernate-configuration>
注意:Hibernate4连接MySQL5.X数据库无法自动创建表,解决方法把数据库方言设为
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
2、配置映射文件TRegister.hbm.xml
在持久化类所在的包中建立TRegister.hbm.xml ,可以通过eclipse Hibernate插件来完成
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-3-7 22:14:28 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.chen.TRegister" table="TREGISTER">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<!-- 我在MYSQL中并没有设置该字段递增,但在Hibernate中依然可以设置为递增 -->
<generator class="increment" />
</id>
<property name="userName" type="java.lang.String">
<column name="USERNAME" />
</property>
<property name="userPwd" type="java.lang.String">
<column name="USERPWD" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" />
</property>
<property name="age" type="java.lang.Integer">
<column name="AGE" />
</property>
</class>
</hibernate-mapping>
六、编写事务处理类HibernateUtil.java
package hibernate; 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 HibernateUtil { private static final SessionFactory sessionFactory; static
{
try
{
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry=
new ServiceRegistryBuilder().applySettings(config.getProperties())
.buildServiceRegistry();
sessionFactory = config.buildSessionFactory(serviceRegistry);
}
catch(Throwable e)
{
throw new ExceptionInInitializerError(e);
}
} public static final ThreadLocal session = new ThreadLocal(); public static Session currentSession() throws HibernateException
{
Session s = (Session)session.get();
//Open a new Session,if this Thread has none yet
if(s == null || !s.isOpen())
{
s = sessionFactory.openSession();
session.set(s);
}
return s;
} public static void closeSession() throws HibernateException
{
Session s = (Session)session.get();
session.set(null);
if(s != null)
s.close();
} }
七、编写Servlet控制类RegisterServlet
package servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.chen.TRegister; import hibernate.HibernateUtil; /**
* Servlet implementation class RegisterServlet
*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String CONTENT_TYPE = "text/html;charset=GBK";
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
request.setCharacterEncoding("GBK"); PrintWriter out = response.getWriter(); String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age")); TRegister rg = new TRegister();
rg.setAge(age);
rg.setSex(sex);
rg.setUserName(userName);
rg.setUserPwd(userPwd); Session session = HibernateUtil.currentSession();//生成Session实例
Transaction tx = session.beginTransaction(); try
{
session.save(rg); //保存持久类对象
tx.commit(); //提交到数据库
session.close();
response.sendRedirect("registerOK.jsp");
}
catch(HibernateException e)
{
e.printStackTrace();
tx.rollback();
} }
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
八、编写jsp页面进行测试
1、register.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body> <form action="RegisterServlet" method="POST">
用户名:<input type="text" name="userName" /><BR>
密 码:<input type="text" name="userPwd" /><BR>
性 别:<input type="text" name="sex" /><BR>
年 龄:<input type="text" name="age" /><BR>
<input type="submit" value="save" />
</form>
</body>
</html>
2、registerOK.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
数据已保存到数据库,请查看.......
</body>
</html>
九、运行验证
运行register.jsp页面,填写信息,完成后点击save完成保存。查看数据库可以看到数据已保存。
Hibernate的基本开发流程的更多相关文章
- hibernate开发流程
开发流程,注意:每个hibernate版本在集成的时候是不太一样的.本次使用的是hibernate-distribution-3.6.10.Final-dist 一.开发流程 1)在数据库中创建表,代 ...
- 一 Struts2 开发流程
SSH与SSM简介SSM:Spring+SpringMVC+MybatisSSH:Struts2+Hibernate+SpringStruts2:是侧重于控制层的框架Hibernate:是一个ORM( ...
- Hibernate中的事务处理流程详解
一.Hibernate操作的基本流程 使用 Hibernate 进行数据持久化操作,通常有如下步骤: 1.编写持久化类: POJO + 映射文件 2.获取 Configuration 对象 3.获取 ...
- Spring详细基本开发流程
LOGO 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! 一.Spring概述 1.1 Web开发中的一些问 ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- 我理解的Sitecore开发流程
Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- git开发流程、常用命令及工具、TortoiseGit使用及常见问题
根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...
随机推荐
- javascript 函数重载另一种实现办法
最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...
- gcc 编译时 库链接
gcc -l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把 ...
- Android 动态隐藏显示导航栏,状态栏
Talk is cheap, show me the code. --Linus Torvalds Okay, here: 一.导航栏: [java] view plain copy private ...
- npm 安装出现 UNMET DEPENDENCY 的解决方案
npm imuzhicloud@0.2.2 E:\com\muzhicloud_make_web+-- UNMET PEER DEPENDENCY react@15.4.2+-- react-dnd@ ...
- js库-AngularJS
我是一个不思进取的前端. 我想按部就班的工作. 我想得过且过. 老天呀!你咋又逼迫我学习对于我来说的新知识呢!!!!!!!我想哭呀!!!!! 在某个代码项目中我看到了{{??}}这么个标记!我的神呀! ...
- Remove Nth Node From End of List(链表,带测试代码)
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- 用LCT解一类动态图的问题
很显然,学过了LCT,大家一定都会用LCT来维护动态树结构了 那么,遇到图问题的时候,是不是也能用lct来解决呢? 解决图问题的时候,我们必须要仍然维护一棵树的形态,否则,lct是做不动的 那么下面来 ...
- NLP项目
GitHub NLP项目:自然语言处理项目的相关干货整理 自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域.本文作者为自然语言处理NLP初学者整理了 ...
- IntelliJ IDEA中Spring Boot项目使用spring-boot-devtools无法实现热部署/热更新的问题解决
这个设置真的和Eclipse有很大区别,Eclipse中只要运行之后就可实现修改文件自动重启.但IDEA不太一样,需要做如下配置: 前提: 1.添加spring-boot-devtools到POM. ...
- javascript 函数初探 (五)--- 几种类型的函数
即时函数: 目前我们已经讨论了匿名函数在回调时的应用.接下来,我们来看看匿名函数的另一种应用实例 --- javascript即时函数: 比如: ( function(){ alert('her'); ...