初始Hibernate框架技术

hibernate:

定义:ORM:Object Relational Mapping 对象 关系 映射

使用hibernate时几个必要的:

  1、实体类
  2、映射文件(类  -数据库表,属性-字段)【实体类名.hbm.xml】
  3、配置文件:数据库连接信息(两个配置:hibernate.cfg.xml(数据库配置文件)实体类名.hbm.xml(映射配置文件))

  4、必要架包

  • hibernate(主框架)
  • ojdbc                       jdbc
  • jta                          允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数  据:针对数据读取
  • commons-collections 各种集合类和集合工具类封装
  • dom4j                    xml解析
  • javassist                  分析、编辑和创建Java字节码的类库:针对字节码的
  • slf4j-api               记录hibernate的日志接口
  • slf4j-nop               、、

其他笔记:

  在代码中都会有注释


 

 

hibernate.cfg.xml(数据库配置文件):

 

 1 <!DOCTYPE hibernate-configuration PUBLIC

 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

 3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 4 

 5 <hibernate-configuration>

 6     <session-factory>

 7         

 8         <!-- 指定oracle对应得dialect -->

 9         <property name="dialect">

10             org.hibernate.dialect.Oracle10gDialect

11         </property>

12         <!-- 数据库jdbc驱动 -->

13         <property name="connection.driver_class">

14             oracle.jdbc.driver.OracleDriver

15         </property>

16         

17         <!-- 数据库url -->

18         <property name="connection.url">

19             jdbc:oracle:thin:@localhost:1521:XE

20         </property>

21         <!-- 用户名 -->

22         <property name="connection.username">user_admin</property>

23         <!-- 用户密码 -->

24         <property name="connection.password">abc123</property>

25         

26         <!-- session范围和上下文 -->

27         <property name="current_session_context_class">thread</property>

28         <!-- 是否在运行期间生成的SQL输出到日志以供调试 -->

29         <property name="show_sql">true</property>

30         <!-- 是否格式化sql -->

31         <property name="format_sql">true</property>

32         <!-- 映射 -->

33         <mapping resource="cn/cy/Hibernate/entity/Dept.hbm.xml" />

34     </session-factory>

35 </hibernate-configuration>
hibernate.cfg.xml

 

实体类名.hbm.xml(映射配置文件):

 

 1 <?xml version="1.0"?>

 2 <!DOCTYPE hibernate-mapping PUBLIC 

 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 5 

 6 

 7 <hibernate-mapping>

 8     <!-- 与关键字冲突   ”~~“解决 -->

 9     <class name="cn.cy.Hibernate.entity.Dept" table="dept">

10         <!-- 当数据库里面的列明与java属性一致时,我们可以省略colnumn -->

11         <id name="deptno" column="deptno">

12             <generator class="sequence">

13                                       <!--索引-->

14                 <param name="sequence">seq_index</param>

15             </generator>

16         </id>

17         <property name="deptname" column="deptname" type="java.lang.String" />

18         <property name="loc" column="loc" type="java.lang.String"/>

19     </class>

20 </hibernate-mapping>

21     
映射配置

 

实体类:

 

 1 package cn.cy.Hibernate.entity;

 2 

 3 import java.io.Serializable;

 4 

 5 public class Dept implements Serializable{

 6     //属性

 7     private int deptno;

 8     private String deptname;

 9     private String loc;

10     //构造方法

11     public Dept(){

12         

13         

14     }

15     //

16     public int getDeptno() {

17         return deptno;

18     }

19 

20     public void setDeptno(int deptno) {

21         this.deptno = deptno;

22     }

23 

24     public String getDeptname() {

25         return deptname;

26     }

27 

28     public void setDeptname(String deptname) {

29         this.deptname = deptname;

30     }

31 

32     public String getLoc() {

33         return loc;

34     }

35 

36     public void setLoc(String loc) {

37         this.loc = loc;

38     }

39 

40     

41 }
实体类

 

测试类:

  使用hibernate的几个步骤:

 

 1 package cn.cy.Hibernate.Test;

 2 

 3 import org.hibernate.Session;

 4 import org.hibernate.SessionFactory;

 5 import org.hibernate.Transaction;

 6 import org.hibernate.cfg.Configuration;

 7 

 8 import cn.cy.Hibernate.entity.Dept;

 9 

10 

11 /**

12  * 测试类

13  * @author Administrator

14  *

15  */

16 public class Test {

17     public static void main(String [] args){

18         /**

19          * 测试方法

20          */

21         if(addDept()){

22             System.out.println("保存成功");

23         }

24         

25     }

26     /**

27                   *测试hibernate框架的测试类

28                   **/

29     public static boolean addDept(){

30         boolean flag=false;

31         Configuration conf=null;

32         SessionFactory factory=null;

33         Session session=null;

34         Transaction trans=null;

35         try {

36             //读取配置文件

37             conf=new Configuration().configure();

38             //创建sessionfactory

39             factory=conf.buildSessionFactory();

40             //打开会话

41             session=factory.openSession();

42             //开启事务

43             trans=session.beginTransaction();

44             Dept dept=new Dept();

45             //当设置了gennerator为sequence时,不给参数是以指定sequence填值

46             dept.setDeptno(200);

47             dept.setDeptname("开发部");

48             dept.setLoc("成都");

49             //持久化

50             //session.save(dept);

51             //session.delete(dept);

52             //Dept dp=(Dept)session.get(Dept.class, 1);//没有数据,返回空值

53             //System.out.println(dp.getDeptname());

54             Dept dp=(Dept)session.load(Dept.class, 1);//没有数据,报异常

55             System.out.println(".....");

56             System.out.println(dp.getDeptname());

57             

58             

59             

60             //提交事务

61             trans.commit();

62             

63             flag=true;

64         } catch (Exception e) {

65             e.printStackTrace();

66             trans.rollback();

67         }finally{

68             if(session!=null){

69                 session.close();

70                 

71             }

72         }

73         

74         

75         return flag;

76         

77     }

78 }

79         

 

在测试中遇到的exception:
  

  

  因为在上课时忘记将错误信息保存下来,所以在这里不做详细错误描述:

  配置文件一定严格书写,地址一定准确!

  总之如果按照上述的配置过程配置,出现错误时:

  • 方法alt不出来,检查架包是否build
  • 运行代码后,如果提示sequence不存在的,检查param节点;
  • 如果是其他与数据库相关的,检查自己数据库的约束等等
  • 以上是我遇到的错误,其他的错误暂时没遇到!

  

 

你可能感兴趣的:(Hibernate)