struts2第7节课:hibernate学习①
一、简介
1、ORM框架/持久层框架
2、 优势:跨数据库的无缝移植
二、在eclipse中添加hibernate支持
1、添加hibernate相关依赖
说明:创建异常
出现原因:
(1) 在myeclipse项目空间中已经存在该项目了,也许在Myeclipse工具中删除了,确没删除他的源文件
解决方法:
(1)更换其他名称
(2) 移走或者删除源文件
搭建成功后!
显示所有包
右键选择build path
2、在resource目录下添加hibernate.cfg.xml【核心配置文件】
pom.xml添加servlet
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
·
并将junit的version改为4.12
3、添加DTD支持
Window——>XML(XML Catalog)——>User Specified Entries(Add)
相关数据库
调试相关
4、在开发阶段再创建实体类和实体类映射文件
【实体类必须实现Serializable接口】
实体映射文件一定要加到核心配置文件
hibernate.cfg.xml配置
<!-- 1. 数据库相关 -->
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.url">jdbc:mysql://localhost:3306/db_0927?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 3.配置本地事务(No CurrentSessionContext configured!) -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 2. 调试相关 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- hibernate需要管理的数据库表对应的实体类映射文件-->
<mapping resource="com/zking/one/entity/User.hbm.xml"/>
三、使用hibernate完成数据库操作
1、读取配置【读取hidernate.cfg.xml文件】
2、创建SessionFactory【通过xml建模得到sessionfactory工厂】
3、打开Session【获取数据库操作的当前会话】
4、开启事务
5、具体的数据操作
6、提交事务
7、关闭Session
package com.zking.one.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.zking.one.entity.User;
public class demo1 {
public static void main(String[] args) {
//1..读取hidernate.cfg.xml文件
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
//2.通过xml建模得到sessionfactory工厂
SessionFactory sessionFactory = cfg.buildSessionFactory();
//3..获取数据库操作的当前会话(session)
Session session = sessionFactory.openSession();
//4.开启事务
Transaction transaction = session.beginTransaction();
//5.具体的数据库操作
//==============================================增加
User user = new User();
// user.setId(11);自动增长
user.setUserName("哈哈");
user.setRealName("撒谎比");
user.setUserPwd("123123");
user.setSex("男");
user.setRemark("嘿嘿嘿额嘿嘿");
//save 增加语句
session.save(user);
//=============================================修改
User user = new User();
user.setId(3);
user.setUserName("嘿嘿");
user.setRealName("撒谎比");
user.setUserPwd("123123");
user.setSex("女");
user.setRemark("嘿嘿嘿额嘿嘿");
//修改语句
session.update(user);
//================================================查询
User user = session.get(User.class, 3);
System.out.println(user.getRealName());
//========根据id编号进行修改
user.setUserName("啦啦");
//=====================================================删除
User user = new User();
user.setId(3);
//删除
session.delete(user);
//===============================================================================================================
//6.提交事务
transaction.commit();
//7.将会话(session)关闭
session.close();
}
}
·
【说明:
①SessionFactory对象的创建代价很昂贵,它是线程安全的对象,它为所有的应用程序线程所共享。它只创建一次,通常是在应用程序启动的时候,由一个Configuraion的实例来创建
②Session对象的创建代价比较小,是非线程安全的,对于单个请求,单个会话、单个的 工作单元而言,它只被使用一次,然后就丢弃。只有在需要的时候,一个Session对象 才会获取一个JDBC的Connection(或一个Datasource) 对象,因此假若不使用的时候它不消费任何资源。 】
Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作