Hibernate应用详解
一.
<class name=”java 中的实体类的类名”table=”二维关系表”>
<!java类中属性映射成表的字段>
<id name=”java类中作为主键的那个属性的名字” column=”表中的列名”>
主键怎么生成的
<generator class=”native”/>
</id>
普通属性
<property name=”java类中普通属性的名字”column=”表中的值”>
</class>
将一个java类映射成表
配置文件
驱动,url,用户名,密码,方言
二.
(1) 创建一个实体类User
(2) 将hibernate所需的jar包构建到项目中
Mysql驱动 Hibernate3.jar;lib/required/所有的文件;lib/jpa/jar文件;
还有一些可选的包;
(3) 配置文件:hibernate.cfg.xml或者hibernate.properties;驱动,url,用户名,密码,方言,自动创建表格,将hibernate在工作的过程中,产生的sql语句在后台中输出;
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///deom</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/hbsi/domain/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="id">--column可省略
<generator class="native"/>--声明主键
</id>
<property name="name"/>
<property name="brithday"/>
</class>
</hibernate-mapping>
(5) 写java代码
package com.hbsi.test;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.hbsi.domain.User;
public class TestHibernate {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
//使用hibernate完成将对象存入表中
Configuration cfg=new Configuration();
cfg.configure();//完成hibernate的初始化--读取配置文件
//sessionFactiory对象---DeriverManager
SessionFactory sf=cfg.buildSessionFactory();
//得到session对象
Session s=sf.openSession();
//开启事务
Transaction tx=s.beginTransaction();
//注意session和web中的session没有任何联系
User user=new User();
user.setName("Tom");
user.setBrithday(new Date());
s.save(user);
tx.commit();
s.close();
System.out.println("end");
}
}
可能出现的问题
(1) 驱动找不到
(2) Unknown entity:不认识User实体类。主要的原因在我们的配置文件中没有指明映射文件所在的位置<mapping resource=”com/hbsi/domain/User.hbm.xml”>
(3) Table” demo.user” doesnotexist:
A.手动建立表
Create table user(id in taut_increment);
Name varchar(20);
Birthday date);
B.让hibernate建表,在配置文件中增加配置;
<property name=”hbm2ddl.auto”><property>
以下几种方式;
Create-drop:hiberbate初始化创建表格,程序结束时将删除表,实际应用中不
合理
Create:hiberbate初始化创建表格。下一次创建时删除原有的,建立新的
Update:只是根据映射文件去和数据库中的表对应起来,如果不一致就更新表数据
Validate:校验映射文件和数据库中的表 是不是能够对应起来,不能对应就报错
(4) 表建好了,表格中没有记录。
S.save(user);
加上下一句话:
<property name="hibernate.show_sql">true</property>
事务处理
Transaction tx=s.beginTransaction();
…..
Tx.commit();
数据库引擎MyIsam,INNODBN不支持事务