hibernate学习笔记1--------窥探hibernate

ssh的复习进入了数据层的学习hibernate.

哎!!!正所谓:雁过留声,人过留影。欢迎大家留言交流指正

一、引入:
模型不匹配(阻抗不匹配):关系模型与对象模型不匹配
java面向对象语言:
对象模型:其主要概念:继承、关联、多态等;
数据库的是关系模型:其主要概念:表、主键、外键等

解决办法:
1.使用jdbc手工转换。

hibernate学习笔记1--------窥探hibernate_第1张图片

2.使用ORM(object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate、TopLink、OJB

二、配置环境

hibernate学习笔记1--------窥探hibernate_第2张图片

三、小例子

domain

package cn.itcast.hibernate.domain;

import java.util.Date;

public class User {
	private int id;
	private String name;
	private Date birthday;
	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 Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}


映射文件文件作用:
是数据模型与对象模型对应起来

<?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="cn.itcast.hibernate.domain">
	<class name="User" table="tb_User">
		<!-- 对象标示符,类型可以不写,hibernate自己识别 -->
		<id name="id">
			<!-- 指定主键生成方式。
        native根据方言判定生成主键的方式
         -->
			 <generator class="native"/> 
		</id>
		
		<property name="name"  />
		<property name="birthday"  />
	</class>


</hibernate-mapping>


hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory >
		<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property>
		<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property><!-- 方言 -->
		<property name="hibernate.connection.username">websb</property>
		<property name="hibernate.connection.password">ddit</property>
		<property name="hibernate.hbm2ddl.auto">create</property><!-- 自动创建表 -->
		<mapping resource="cn/itcast/hibernate/domain/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>


简单粗暴的测试类:

package cn.itcast.hibernate;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import cn.itcast.hibernate.domain.User;



public class Base {
	public static void main(String []args){
		//对hibernate初始化----注册驱动
		Configuration cfg = new Configuration();
		cfg.configure();
		//工厂类
		SessionFactory sf = cfg.buildSessionFactory();
		
		Session s = sf.openSession();
		//打开事务
		Transaction tx=s.beginTransaction();
		
		User user = new User();
		user.setBirthday(new Date());
		user.setName("name");
		
		s.save(user);
		tx.commit();//提交事务
		s.close();
		System.out.println("end");
		
	}
}


小知识点总结:

(1)///表示的是连接的是本地的默认端口则可以省略
(2)配置sessionFactory中的property属性时,可以缺省hibernate这个开头
(3)hibernate-release-4.2.1.Final\project\etc下有个配置模版hibernate.properties.template
相关属性的值都有
(4)自动创建表属性值解释:
#hibernate.hbm2ddl.auto create-drop 在初始化时创建表,jdbc结束时删除表(一般应用与测试)
#hibernate.hbm2ddl.auto create 在初始化时创建表,jdbc结束时不删除表
#hibernate.hbm2ddl.auto update 拿映射文件和数据库中的表结构进行校验,如果不一致,则进行更新
#hibernate.hbm2ddl.auto valiadate  校验映射文件与表是否能对应起来,不一致报错(4.x的版本中没有此值,疑似删除了)
(5)对于mysql数据库,偶尔不开启事务,依然可以插入数据。请查看表结构(是什么引xing),是否支持事务。不支持事务的表,不能进行回滚。

运行时报的错误:
(1)org.hibernate.service.jndi.JndiException: Error parsing JNDI name [foo]
解决:
http://blog.csdn.net/walldr/article/details/8582581
扩展:
hiberbate的连接池配置:
http://www.cnblogs.com/lihuiyy/archive/2013/03/19/2969870.html
(2) org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-00903: 表名无效

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute statement
解决:
http://hi.baidu.com/hohai109/item/44f94ddda0fe18c9251f40ed

(3) Unsuccessful: drop table tb_1User cascade constraints
2013-5-18 23:31:34 org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: ORA-00942: 表或视图不存在

网上暂时没搜到解释,估计是在自动创建表之前,先drop一下,因为原来没有所以才报的吧~!

 

你可能感兴趣的:(Hibernate)