Hibernate4 hello案例
来源:互联网 发布:虚拟机网络没有连接 编辑:程序博客网 时间:2024/05/20 04:15
搭建第一个hibernate项目,因为只用到了数据库,我们这里建立java项目即可,之后用junit单元测
搭建步骤:
1 . 新建java项目
2 . 导入相关jar包
3 . 编写配置文件hibernate.cfg.xml(放在src下)
模板文件比如xml的头文件可以参考下载包里面的etc,以下是博主的路径
D:\soft\hibernate-release-4.3.10.Final\project\etc
里面有hibernate.cfg.xml 可以参考,拷贝过来,主要拷贝头文件。
里面要配置数据库信息,怎么配置,查看etc里面的hibrnate.properties,博主配的是mysql数据库,所以查看里面的mysql信息,如下:
所以hibernate.cdf.xml最终是
<hibernate-configuration><session-factory> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/hibernate4 </property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!-- 数据库方言 --> <property name="dialect"> org.hibernate.dialect.MySQL5Dialect </property> <!--后面添加--> <mapping resource="cn/siggy/pojo/User.hbm.xml" /></session-factory></hibernate-configuration>
4 .创建数据库表和 对应的pojo对象
public class User{ private int id; private String name; private String pwd; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; }}
5 .编写*.hbm.xml(放在pojo类下)
文件名字一般为pojo类名字,这里是User.hbm.xml
这里的头文件也需要拷贝,如下搜索输入*.hbm.xml,随便找一个拷贝一个头文件
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping > <class name="cn.siggy.pojo.User" table="user"> <!-- 实体类的标识符,映射到表中就是主键 --> <id name="id"> <!-- 主键生成策略 --> <generator class="native"></generator> </id> <!-- 实体类的属性 --> <property name="name"/> <property name="pwd"/> </class></hibernate-mapping>
6 .测试 (别忘记将*.hbm.xml配置文件加入到hibernate.cfg.xml中)
import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import cn.siggy.pojo.User;public class Test { public static void main(String[] args) { //1.新建Configuration对象 Configuration cfg=new Configuration().configure(); //2.通过Configuration创建SessionFactory对象 //在Hibernate3.x是这种写法 //SessionFactory sf=cfg.buildSessionFactory(); //hibernate4.3---4.0 //hibernate4.3之前~hibernate4.0 // ServiceRegistry sr = new ServiceRegistryBuilder() // .applySettings(cfg.getProperties()) // .buildServiceRegistry(); //hibernate4.3 ServiceRegistry registry=new StandardServiceRegistryBuilder(). applySettings(cfg.getProperties()).build(); SessionFactory sf=cfg.buildSessionFactory(registry); //3.通过SessionFactory对象得到Session Session session=sf.openSession(); //4.通过Session对象得到Transaction对象 //开启事务 Transaction tx=session.beginTransaction(); //5.保存数据 User user=new User(); user.setName("张疯"); user.setPwd("1111"); session.save(user); User u=(User)session.get(User.class, 2); System.out.println("name="+u.getName()); //6.提交事务 tx.commit(); //7.关闭session session.close(); }}
配置详解:
1 .Configuration管理读取配置文件
//读取src下hibernate.properties,不推荐使用 Configuration cfg = new Configuration();//默认读取hibernate.cfg.xml Configuration cfg1 = new Configuration().configure("hb.cfg.xml"); //如果hibernate的核心配置文件 不叫 hibernate.cfg.xml Configuration cfg2 = new Configuration().configure("hb.cfg.xml");
2 .SessionFactory 是session工厂,是一个重量级(消耗资源较多)对象。在一个应用中最好也是单例的,是线程安全的,属于进程级别(进程范围内都可以使用它,共享,因为线程安全)的对象
/*通过Configuration创建SessionFactory对象*/ /*在Hibernate3.x是这种写法*/ SessionFactory sf=cfg.buildSessionFactory(); /*hibernate4.3之前~hibernate4.0*/ ServiceRegistry sr = new ServiceRegistryBuil.applySettings(cfg.getProperties()) .buildServiceRegistry(); /*hibernate4.3*/ ServiceRegistry registry=new StandardServiceRegistryBuilder(). applySettings(cfg.getProperties()).build(); SessionFactory sf=cfg.buildSessionFactory(registry);
在4.3之后的版本也可以使用之前的两种方式,但是不推荐
3.Session对象:使用hibernate进行数据库操作,主要使用session。Session可以理解为对Connection对象的一个包装。Session对象中提供了对数据库的crud操作。Session是一个线程不安全的对象。生命周期非常短暂,一般和事务一一对应。Session又称为hibernate中的一级缓存。Session又是transaction对象的工厂。
4.Transaction对象:事务管理对象。通过session来获取到该对象。包括了事务的开启,事务的提交,事务的回滚。
//第一种写法 Transaction tx = session.beginTransaction(); //第二种写法 Transaction tran = session.getTransaction(); tran.begin();
- 实际上开启session的过程是有可能发生异常的
异常处理
public class TestException { public static void main(String[] args) { Configuration cfg = null; SessionFactory sf = null; Session session = null; Transaction tx = null; try{ cfg = new Configuration().configure(); ServiceRegistry registry = new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()) .build(); sf = cfg.buildSessionFactory(registry); session = sf.openSession(); tx = session.beginTransaction(); User u = (User)session.get(User.class, 2); System.out.println("name="+u.getName()); //6.提交事务 tx.commit(); }catch (Exception e) { e.printStackTrace(); if(tx!=null) //回滚事务 tx.rollback(); }finally{ //7.关闭session if(session!=null&&session.isOpen()) session.close(); } }}
- Hibernate4 hello案例
- Hibernate4入门教程:Hello World!
- hibernate4 DetachedCriteriaBuilder的基本案例
- hibernate4操作数据库blob案例
- Mono案例--Hello Mono
- Spring MVC Hello案例
- Hibernate4 关联关系的映射案例
- struts2、spring4、hibernate4(ssh)整合案例
- AJax案例之Hello World!
- Python入门案例之Hello
- ssh struts小案例hello
- netty 入门案例hello world
- hibernate4
- Hibernate4
- Hibernate4
- hibernate4
- Hibernate4
- hibernate4
- 谈谈Java中的ThreadLocal
- HDU 5950 Recursive sequence(矩阵快速幂)
- 进制组合问题(独立验证)[三相组合问题]
- 结构体 和类的区别
- 根据页面地址拼接页面内部获取到的地址
- Hibernate4 hello案例
- input框 placeholder变色,及去掉苹果手机默认input样式,css去除点击阴影
- book1 unit3 after-class reading 2 : How to Talk to Anyone, Anytime, Anywhere
- 领域驱动核心概念总结
- Codeforces Round #430 (Div. 2) D. Vitya and Strange Lesson
- 2017第九届北京空气净化及水净化、北京国际节能减排展览会会刊
- 842C Ilya And The Tree
- 欢迎使用CSDN-markdown编辑器
- 偶数个3