第一个简单的hibernate程序
来源:互联网 发布:爱肯拿天峻授权淘宝店 编辑:程序博客网 时间:2024/05/20 18:02
目前主流的数据库一般都是关系型的数据库,而我们目前的高级程序语言都支持面向对象等特性,数据库的编程语言之间存在的一条鸿沟。在面向对象的数据库还没有得到普及的时候,ORM(对象,关系,映射)都将作为一种简化编程的工具存在。
下面就演示一个简单的利用hibernate(一个orm框架)框架写的一个小程序。
首先我们写一个javabean,Userbean,我们的类最好不要设置成final类,因为hibernate框架有时候优化执行的时候,会继承我们的类,如果我们设置成final类的话,他就无能为力。
类要提供默认构造函数,因为hibernate利用反射技术生成我们的类(如果没有提供默认构造函数,hibernate框架就无法管理类的生命周期)
public class UserBean { private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
UserBean与数据库的表之间的映射文件,id表示主键,generator表示主键的生成策略,native表示使用本地数据库的生成策略。
如果没有指定表名,则默认和java类名称一致,即UserBean。id和property,如果也没有指定名称(即列名),则默认也是和类的属性名称一致。
<?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.shizhan.hibernate.domain"><class name="UserBean"> <id name="id"> <generator class="native"/> </id> <property name="username"/> <property name="password"/></class></hibernate-mapping>
利用oracle作为数据库的配置文件,像我们以前利用jdbc连接数据库一样,需要提供驱动名,url地址,用户名,密码等信息。这个配置文件中多了一个 <property name="dialect">用来告诉hibernate框架,我们使用的数据库名称。
配置文件中还要指明我们的表与类映射的其他配置文件的位置。
<?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> <!-- 数据定义语言,告诉hibernate帮我们创建表 --> <property name="hbm2ddl.auto">create</property> <!-- 告诉hibernate程序与哪种数据库连接,本例子使用oracle --> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="connection.url">jdbc:oracle:thin:localhost:1521:orcl</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="myeclipse.connection.profile">oracle.jdbc.driver.OracleDriver</property> <!-- 告诉hibernate我们的user.hbm.xml在哪 --> <mapping resource="com/shizhan/hibernate/domain/User.hbm.xml"/> </session-factory> </hibernate-configuration>
hibernate工具类
import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil { private static SessionFactory sessionFactory ;//不让其他用户轻易创建,因为我们有些操作只执行一次private HibernateUtil(){}static{ Configuration cfg = new Configuration(); cfg.configure(); sessionFactory = cfg.buildSessionFactory();}public static SessionFactory getSessionFactory() {return sessionFactory;} public static Session getSession(){ return sessionFactory.openSession(); }}
测试类
package com.shizhan.hibernate.test;import org.hibernate.Session;import org.hibernate.Transaction;import com.shizhan.hibernate.domain.UserBean;import com.shizhan.util.HibernateUtil;public class TestHibernate { public static void main(String[] args) { Session s = HibernateUtil.getSession();Transaction t = s.beginTransaction();UserBean user = new UserBean();user.setUsername("shizhan");user.setPassword("123");s.save(user);t.commit();s.close();}
从s.save(user)中,我们发现可以直接将对象存储到数据库中,这就是hibernate的魅力所在,简化了之间利用原始jdbc插入数据时编程步骤。
hibernate默认的事务是 不自动提交,这和jdbc的自动提交有点不一致,所以如果我们发现数据没有插入到数据库中,这时候问题可能就是我们没有开启事务,并且提交。
Configuration cfg = new Configuration();
cfg.configure(); 用来加载hibernate.cfg.xml文件,所以时间比较久,应保证我们的应用程序只调用一次。configure()函数默认加载hibernate.cfg.xml文件,所以如果我们的配置文件是其他的名称,需要显示的传入值。
- 第一个简单的hibernate程序
- Hibernate的第一个程序
- 第一个简单的程序
- 第一个Hibernate程序
- 第一个hibernate程序
- hibernate第一个程序
- 第一个hibernate程序
- 第一个hibernate程序
- 第一个Hibernate程序
- 第一个Hibernate程序
- 第一个Hibernate程序
- Hibernate第一个程序
- hibernate 第一个程序
- 第一个hibernate程序
- 第一个Hibernate程序
- Hibernate第一个程序
- 第一个hibernate程序
- Hibernate第一个程序
- 黑马程序员_Java学习日记9_泛型
- Qt json
- UITableView高度自適應
- poj 3264
- 使用cookie(需要引入jquery.cookie.js)
- 第一个简单的hibernate程序
- 穷举—比较基础
- poj1328
- 类似错误 webapps\CKFinderJava does not exist or is not a readable directory
- Python的内存泄漏及gc模块的使用
- GDAL 支持的图像格式
- 数据库备份和还原过程
- 编程器固件、uboot、fullflash
- android的语言切换