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

posted @ 2015-05-23 18:02  孟想阳光  阅读(59)  评论(0)    收藏  举报