• 初始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节点;
    • 如果是其他与数据库相关的,检查自己数据库的约束等等
    • 以上是我遇到的错误,其他的错误暂时没遇到!

      

  • 相关阅读:
    关于二进制包安装MySQL出现yum安装保护多库场景解决
    关于 Fatal NI connect error 12170 错误
    调优排故笔记1-利用等待事件及相关文件和视图-Oracle内核揭秘
    MySQL的四种隔离级别
    Oracle绑定变量
    接口加密测试
    接口测试用例设计
    学习总结——接口测试中抓包工具的使用
    学习总结——JMeter做WebService接口功能测试
    JMeter做http接口压力测试
  • 原文地址:https://www.cnblogs.com/gcs1995/p/4121849.html
Copyright © 2020-2023  润新知