上图是一个的Hibernate在JavaSE的简单使用。接下来就是我对每一步的理解,为什么这么做。
首先昨天的总结已经说了Hibernate是关于持久层的框架,也就是应用程序和数据库进行交互的部分,它的代码操作的目的也就是对数据库的操作。
程序在运行时产生数据,是存在于内存中,而内存中的数据在断电后都会消失,所以为了将数据持久储存,就需要将他存储进外存,IO操作,写入XML文件,上传图片,存入数据库都是“持久化”操作。
User user=new User();
user.setName(“pzq”);
user.setAge(22);
这是简单的类创建对象,并且赋值。Hibernate想要对类操作,先用注解标识类(或者用XML配置文件),将这个类和数据库 的某个表绑定,将类的属性和表属性绑定。User有三个属性,其中uid在数据表中作主键。这里没有给uid赋值是因为uid通过注解标识为了自增类型,不需要赋值,在save的过程中hibernate会对他进行赋值。
Configuration cfg=new AnnotationConfiguration();
我用的是注解方式所以用的是AnnotationConfiguration,如果用的xml方式用Configuration即可。
SessionFactory sf=cfg.configure().buildSessionFactory();
作用:为了加载hibernate.cfg.xml文件,默认加载路径是classpath:hibernate.cfg.xml,如果需要修改路径和文件名可写入后面的括号内。
函数buildSessionFactory是创建session的工厂类,用到了工厂模式,只需要创建一次,所以在ssh框架整合时,写在Spring的配置文件内,在服务器启动时,创立。
得到会话的两种方式
Session session=sf.openSession();
//sf.getCurrentSession()
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭
具体看http://blog.csdn.net/loveyout/article/details/4193894
ts=session.getTransaction();
ts.begin();
这时得到事务开启事务(我就是没有开启事务错了,找了半天)
session.save(user);
System.out.println(user.getUid());
ts.commit();
save就是把数据进行转化,但是没有提交到数据库,这时输出uid发现uid已经有值,说明uid的值是hibernate产生而不是数据库。然后事务提交。
save其实很值得说一说,但是我要睡觉了,晚安,明天想写再写吧