初步认识hibernate-----第二篇

来源:互联网 发布:虚荣 vgpro数据不准 编辑:程序博客网 时间:2024/06/11 01:12

hibernate 运行流程分析:

第一步:Configurationconfiguration = new Configuration();


第二步:{hibernate.cfg.xml  1、描述数据库的链接的信息  2、加载映射文件*.hbm.xmlconfiguration.configure();

第三步:sessionFactory = configuration.buildSessionFactory();

{1hibernate把数据库的链接信息、把映射文件的信息、持久化类的信息

2sessionFactory是由单例模式产生的

3、一般情况下一个hibernate应该有一个数据库链接

4、该类本身是线程安全的

5、是一个重量级类}

第四步:sessionFactory.openSession();

  打开了一个数据库的链接,准备进行数据库的操作

session进行查询

增删改查

开启事务

   session.beginTransaction();

进行cud的操作

   ……

提交事务,关闭session

session.close();


注意事项:

   1、一个类是否是持久化类

        1、加载配置文件

        2、在配置文件中加载映射文件

        3、解析映射文件中class元素的name属性,找到对应的类

   2、在客户端的参数的类必须是持久化类


一般的错误已经分析:


①找不到持久化,意味着在映射文件中根本没有配置该类


在配置文件中引入映射文件错误


③在映射文件中class元素中的name属性的值写错了


④没有构造函数 

利用session.get方法产生一个对象,调用的是默认的构造函数,所以一个持久化类中必须有一个默认的构造函数


⑤数据库中没有记录


public void testQueryPerson(){Session session = sessionFactory.openSession();List<Person> personList = session.createQuery("from Person").list();for(Person person:personList){System.out.println(person.getPname());}session.close();}public void testQueryPersonByID(){Session session = sessionFactory.openSession();/** * 按照主键的方式查询数据库表中的记录 * 第二个参数的类型必须和持久化中标示符的类型保持一致 */Person person = (Person)session.get(Person.class, 1L);System.out.println(person.getPname());session.close();}/** * hibernate内部会检查标示符,看标示符中的值在数据库相应的表中有没有对应的记录,如果有,则删除 */@Testpublic void testDeletePerson(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();/** * 1、根据id把值从数据库中查找出来 * 2、把对象删除掉 */Person person = (Person)session.get(Person.class, 1L);session.delete(person);/** * 1、新创建一个person对象 * 2、给person对象的标示符赋值 * 3、调用session.delete方法删除 *///Person person = new Person();//person.setPid(2L);//session.delete(person);transaction.commit();session.close();}@Testpublic void testUpdatePerson(){Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();/** * 1、根据id把持久化对象提取出来 * 2、进行修改 * 3、执行upate操作 */Person person = (Person)session.get(Person.class, 1L);person.setPsex("不详");session.update(person);transaction.commit();session.close();}


0 0
原创粉丝点击