【JAVA】SSH 框架 之 Hibernate小例子

这篇博客记录了作者在学习Hibernate的过程中,从配置文件到创建持久类和映射文件,再到编写访问数据库代码的实践经历。遇到Junit测试失败的问题,最终通过调整代码解决问题。作者反思了学习过程中的困难,并分享了Hibernate的执行流程图,同时表达了对未来技术发展方向的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天在慕课看完了关于Hibernate的一个入门视频,里面简单介绍了hibernate的一些知识点,光是看视频的时候总感觉好像不是很难的样子,可是今天实际写代码的时候却发现自己一直报错~也是心累.

编写Hibernate例子的步骤

  1. 创建hibernate的配置文件(*.cfg.xml)

    这里主要配置和数据库连接的一些基本信息。常用的如下:

    <session-factory>
       <property name="connection.url">jdbc:mysql://localhost:3306/jianqlims</property>
       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
       /* 配置hibernate数据库方言,hibernate可针对特殊的数据库进行优化 */
       <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
       <property name="connection.username">root</property>
       <property name="connection.password">root</property>
    
    /* 是否把hibernate运行时的SQL语句输出到控制台,编码阶段便于测试 */
       <property name="show_sql">true</property>
    
       /* 输出到控制台的SQL语句是否进行排版,便于阅读。建议设置为true */
       <property name="format_sql">true</property>
    
       <!-- DB schema will be updated if needed -->
       /*
        可以帮助由java代码生成数据库脚本,进而生成具体的表结构。
        create | update | create-drop | vaildate
        create 既每次都会生成一张新表
        update 既在原来的表格基础上进行更新
       */
       <property name="hbm2ddl.auto">update</property>
    
       <mapping resource="domain/SchoolCourse.hbm.xml"/>
     </session-factory>
  2. 创建持久类

    个人理解:既相当于生成一个domain对象,从而生成下述的映射文件。

  3. 创建对象-关系映射文件(*.hbm.xml)

  4. 通过hibernate API编写访问数据库的代码

    下面是一个简单的test文件,一开始按照视频时,采用了Junit单元测试的方式,但是一直都不能运行成功(空指针错误),而且找了一晚上也不知道如何修改,后来只能改成下述代码。在运行的时候,有报过关于jdbc的错误,但是因为没有检查配置文件,白白浪费了N个小时,所以当错误提醒有关jdbc时,要好好检查配置文件是否正确。

    package Test;
    
    import domain.SchoolCourse;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    
    import java.sql.Date;
    import java.sql.Timestamp;
    
    
    public class SchoolCourseTest {
       private SessionFactory seesionFactory;
       private Session session;
       private Transaction transaction;
    
       public static void main(String[] args) {
           SessionFactory seesionFactory;
           Session session;
           Transaction transaction;
           Configuration cfg;
           ServiceRegistry serviceRegistry;
    
           Timestamp time = new Timestamp(System.currentTimeMillis());
           SchoolCourse sc = new SchoolCourse(5,"算法分析",2,1,time,"cxz","none");
    //        sc.setId(4);
    //        sc.setCourseName("JAVA");
    //        sc.setSchoolTerm(1);
    //        sc.setStatus(2);
    //        sc.setCreatedDate(time);
    //        sc.setCreater("cxz");
    //        sc.setMemo("none");
    
           cfg = new Configuration().configure();
           serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
           seesionFactory = cfg.buildSessionFactory(serviceRegistry);
           session = seesionFactory.openSession();
           transaction = session.beginTransaction();
           session.save(sc);
           transaction.commit();
       }
    }

    最后附上一张hibernate的执行流程(来自慕课的hibernate入门教程)

这里写图片描述

最近一个月都没有更新了,虽然知道很多知识点不总结就会忘记,可是每次一总结都会浪费大量时间,而且感觉也不一定自己真正意会了其中的知识,但是最近的实习让我感受到自身很大的不足(不管是基础还是知识的眼界),甚至会考虑自己以后是不是真的往技术发展这个问题。

不过,目前来说,还是想一步步再走下去,如果真的接受不了那就再说吧,路总是很多的,找到适合自己的才是最好的路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值