Hibernate应用
一、引入
1、 模型不匹配(阻抗不匹配)
Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;数据库是关系模型,其主要概念有:表、主键、外键等。
2、 解决办法
(1) 使用JDBC手工转换
(2) 使用ORM(Object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate、TopLink、OJB。
Hibernate是JBOSS公司
二、安装配置
1、 下载地址http://www. Hibernate.org,本教程使用3.2.5。
2、 将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar
3、 配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。
可以在配置文件指定:数据库的URL、用户名、密码、JDBC驱动类、方言等。启动时Hibernate会在CLASSPATH里找这个配置文件。
4、映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有完整的hibernate示例。
映射<class name=”Java中的实体类的类名” table=”表名”>
<!-java类中的属性映射成表的字段->
<id name=”java类中作为主键的那个属性的名字” column=”表中列名”>
<generator class=”native”/>
</id>
<property name=”java类中普通属性的名字” column=”表中列名”/> 映射普通的JAVA属性成一列
</class> 将一个JAVA类映射成表
配置文件:
驱动、url、用户名、密码
方言
【1】 创建一个实体类User
【2】 将hibernate所需jar包构建到项目中(MySQL驱动、hibernate3.jar、lib/required/所有的jar文件、lib/jpa/jar文件)
【3】 配置文件(默认名字hibernate.cfg.xml hibernate.properties 配置的基本信息:驱动、url、用户名、密码、方言、自动创建表格、将hibernate工作过程、及映射文件的位置)
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///shopping</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<mapping resource="com/hbsi/demain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
【4】 映射文件----
User-----User.hbm.xml
<hibernate-mapping
package="com.hbsi.domain"> ------指定java实体类的包名
<class name="User" table="user"> ----说明实体类怎样映射成表
<id name="id" > ---缺省掉了column=”xx1”属性
<generator class="native"/>
</id>
<property name="name"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
【5】 写java代码
Configuration cfg=new Configuration();
cfg.configure();//完成hibernate的初始化--读取配置文件
//SessionFactory对象----相当于DriverManager
SessionFactory sf=cfg.buildSessionFactory();
//得Session对象
Session s=sf.openSession();
Transaction tx=s.beginTransaction();
User user=new User();
user.setName("Tom");
user.setBirthday(new Date());
//将user对象存入到数据库表中
s.save(user);
tx.commit();
s.close();
可能出现问题:
(1) 驱动找不到
(2) Unknown entity: 不认识User实体类。原因在配置文件中没有指明映射文件所在的位置<mapping resource=”com/hbsi/domain/User.hbm.xml”/>
(3) Table”shopping.user” doesnot exist:表格不存在
1>在mysql环境下建一个表
create table user(
id int auto_increment;
name varchar(20);
birthday date;);
2>在配置文件增加配置
<property name=”hbm2ddl.auto”>create </property>
create-drop:在hibernate初始化时创建表,程序运行结束时表会被删除
create:在hibernate初始化时会创建表。在下一次运行时会删除前一个,创建一个新的
update:只是根据映射文件去和数据库中的表对应起来。如果不一致就更新表的结构。
validate:校验映射文件和数据库中的表是不是能够对应起来,若不能对应,不更新表,会报错。
(4) 表建好,表格中没有记录
Insert s.save(user)
<property name=”show_sql”>true</property>
事务
Transaction tx=s.beginTransaction();
...
tx.commit();
数据库引擎:MyISAM不支持事务