hibernate(数据库知识回顾,O-R mapping,hibernate介绍,手工编写,MyElipse编写,Annotation注解方式)
-----------------------数据库知识回顾-------------------------------------





--------------------------O-R Mapping-----------------------------------------------------
实质上就是可以按照面向对象的方式写sql语句,可以将对象保存在数据库中,是一种对象持久化技术。


------------------------------------------hibernate--------------------------------------


------------------------------------------hibernate手工编写--------------------------------------
1.与web容器无关,所以建立一个java程序即可

2.导入jar包(hibernate3.jar及lib目录下的required 里面的jar包,mysql jar包)


3.配置文档 (示例工程里面找)放在src下,并只保存session factory部分


<session-factory>
<!--数据库驱动信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--url信息 -->
<property name="connection.url">jdbc:mysql://mlj:3306/stu</property>
<!--用户名 -->
<property name="connection.username">root</property>
<!--密码 -->
<property name="connection.password">admin</property>
<!--显示生成的sql脚本-->
<property name="show_sql">true</property>
<!--指定Hibernate映射文件路径 -->
<mapping resource="net/mlj/vo/Students/Students.hbm.xml" /> </session-factory>
4.创建持久化类
4.1该类实际上与数据库中某表有对应关系,所以首先得建表

4.2 建立与表对应的持久化类,并生成属性的get set方法


4.创建对象关系映射文件file,该文件必须与类同包,且命名为:类名.hbm.xml
<?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="包名"> <class name="类名" table="表名"> <id name="主键在java类中的字段名" column="对应表中字段" type="类型 "> <generator class="主键生成策略"/> </id>//主键用id
<property name="在java类中的字段名" column="对应表中字段" type="类型 ">
<generator class="主键生成策略"/>
</property>//其他属性用property
…… </class> </hibernate-mapping>
5.编写api 访问数据库(dao包内容)
访问数据库的核心类和接口:



//sessionFactory
Configuration config = new Configuration();
config.configure();//用configure()方法取得配置文件
SessionFactory sessionFactory =config.buildSessionFactory();
//session
Session session = sessionFactory.getCurrentSession();
或者Session session = sessionFactory.openSession();
//Transaction
Transaction tx=session.beginTransaction();
//操作放在 try catch finally中
try
{
Students s=new Students ();
s.setSid(1);
s.setSname("mlj");
session.save(s);
tx.commit();
}
catch(Exception ex)
{
tx.rollback();
ex.printStackTrace();
}
finally
{
if(session!=null)
session.close();
}
运行时会报错如下,这是由于hibernate使用了slf4j日志管理系统,实现类是log4j
解决方案:
步骤1:从示例程序etc目录下拷贝log4j.properties到src目录下

步骤2:下载slf4j-1.5.8,在其目录下拷贝slf4j-non-1.5.8.jar,并导入

再次运行就可以出现一条sql语句了。


注意:在hbm.xml中,type="string",s必须是小写的!!
------------------------------------------MyElipse编写hibernate--------------------------------------
1.新建java项目,并右键 加入hibernate支持





2.导入mysql jar包
3.和手工版一样,将hibernate.cfg.xml中的相关内容拷贝进来,并将实体类包和操作dao包拷贝进来
并在cfg.xml中添加hbm2ddl,最常用的是update属性,这样当数据库中表不存在时,会自动将实体生成表


------------------------------------Annotation注解方式-----------------------------------------

1.生成sessionFactory 时,不能用new Configuration();
//sessionFactory
Configuration config = new AnnotationConfiguration();
config.configure();//用configure()方法取得配置文件 SessionFactory sessionFactory =config.buildSessionFactory();
2.选择第一个 javax.persistence规范,而非第三个

3.使用注解方式,映射文件就没用了,删除即可,将主配置文档中的资源映射去掉,并将带有注解方式的实体类注册在主配置文档中,使用的是包结构




浙公网安备 33010602011771号