Hibernate的学习一__简单的小例子
来源:互联网 发布:根据姿态角求旋转矩阵 编辑:程序博客网 时间:2024/06/03 01:31
Hibernate是一个ORM框架,主要的作用就是将数据持久化.
做一个小例子,演示Hibernate如何进行ORM,对象关系映射和数据持久化.
主要的步骤介绍下,建立实体类User,然后给User建立Hibernate的映射文件,然后在核心配置文件中添加该配置文件,接着新建数据库,创建表,然后写测试代码save和load(get),保存和查询.
建立实体类很简单,就是建一个普通的类,不需要继承任何类和接口,因为Hibernate没有侵入性.User类有5个属性,id,name和password,还有createTime和expireTime,名字,密码,创建日期和失效日期.然后就生成get和set方法即可.
public class User {private String id;private String name;private String password;private Date createTime;private Date expireTime;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Date getExpireTime() {return expireTime;}public void setExpireTime(Date expireTime) {this.expireTime = expireTime;}}
创建hbm.xml配置文件才是重头戏.新建User.hbm.xml映射文件.标签主要是在<hibernate-mapping>中编写,然后有<class>标签还配置类和表的映射,其中包含主键和普通属性,<id>配置主键,<property>配置普通的属性.对于主键还有生成策略,N种,常用的是native和uuid.
<hibernate-mapping> <class name="com.lyl.hibernate.User"> <id name="id"> <generator class="uuid"></generator> </id> <property name="name"></property> <property name="password"></property> <property name="createTime"></property> <property name="expireTime"></property> </class> </hibernate-mapping>
User的配置文件就这样配置好了.然后放进核心hibernate.cfg.xml文件中.需要配置在<hibernate-configuration>标签中,在<session-factory>标签中,配置连接的数据库,包括驱动,路径,用户名和密码,最后就是mapping,将之前配置好的User.hbm.xml添加到<mapping>标签中.还有就是dialect方言,为MySQL,所以生成的SQL语句都是MySQL的.以及为了查看方便将show_sql改为true,这样就可以看到hibernate生成的sql语句.
<hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_session</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">lyl</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <mapping resource="com/lyl/hibernate/User.hbm.xml"/> </session-factory></hibernate-configuration>
然后就是在MySQL中建立库hibernate_session,create databasehibernate_session;就可以建立库了,然后usehibernate_session;就可以转到该库.之后就是创建表,根据配置好的User.hbm.xml,读取标签,然后生成表.
建立ExportDB.java工具类用它来生成表.
public class ExportDB {public static void main(String[] args){//需要解析xml文件Configuration cfg = new Configuration().configure();SchemaExport export = new SchemaExport(cfg);export.create(true,true);}}
new Configuration().configure()获取hibernate.cfg.xml文件,然后将获取到的配置文件给位于org.hibernate.tool.hbm2ddl.SchemaExport;路径下的方案导入,用它的create(true,true)创建表.
然后执行,表就可以建立了.建表的SQL语句就是这样的,创建表User,id,name,password,creatTime,expireTime,主键是id.
drop table if existsUsercreate table User(id varchar(255) not null, name varchar(255), password varchar(255), createTimedatetime, expireTime datetime, primary key (id))
表也建立完了,可以去试试将数据保存到数据库中了.利用session的save将赋好值的User对象存入数据库中.建立单元测试类SessionTest,继承TestCase来存储.
新建User对象,然后给Name,Password,赋值,然后保存,提交,hiberante发出一条sql语句(Hibernate: insert into User (name, password, createTime, expireTime,id) values (?, ?, ?, ?, ?))就可以在数据库中插入一条记录,并查询出来了.
public void testSave1(){Session session = null;try{session = HibernateUtils.getSession();session.beginTransaction();User user = new User();user.setName("流逝");user.setPassword("123");session.save(user);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();session.getTransaction().rollback();}finally{HibernateUtils.closeSession(session);}}
为了复用,将session的获取,close写在了HibernateUtils的工具类中.对于获取,因为session是从sessionFactory中获取的,而hibernate.cfg.xml的配置文件就配置了session-factory,所以读取hibernate.cfg.xml的配置文件,获取sessionFactory,然后factory打开session,就可以了.而关闭,只要传入的session是否不为null,并且isOpen,就可以关了.
//Hibernate的工具类public class HibernateUtils { private static SessionFactory factory;static{ try {//创建Configuration对象,读取hiberante.cfg.xml文件Configuration cfg = new Configuration().configure();//利用cfg,获取SessionFactoryfactory = cfg.buildSessionFactory(); }catch(Exception e) { e.printStackTrace(); } }public static Session getSession(){return factory.openSession();}public static void closeSession(Session session){if(session != null){if(session.isOpen()){session.close();}}} }
Load的代码就是
public void testLoad1(){Session session = null;try{session = HibernateUtils.getSession();session.beginTransaction(); User user=(User)session.get(User.class, "8a82a71b482b29a301482b29a43d0001"); System.out.println("user.Name = "+user.getName()+" user.password = "+user.getPassword()); session.getTransaction().commit();}catch(Exception e){e.printStackTrace();session.getTransaction().rollback();}finally{HibernateUtils.closeSession(session);}}
运行效果
Hibernate: selectuser0_.id as id0_0_, user0_.name as name0_0_, user0_.password as password0_0_,user0_.createTime as createTime0_0_, user0_.expireTime as expireTime0_0_ fromUser user0_ where user0_.id=?user.Name = 流逝 user.password = 123
根据id查询User表中记录,得出结果.将load改为get此段代码的运行效果一样.只是load是支持延迟加载的,若是User中存在集合类型的数据,那么load是不会加载出来的,而get则会.因为load是延迟加载,只有用的时候才会去查的.而默认就是lazy为true,支持延迟加载.
以上就是一个Hiberante的简单小例子,建立的实体类是个Pojo对象,因为没有继承任何类,只是一个简单的java对象.所以移植性会很好.而Hiberante主要的功能是将OR映射,使我们更加彻底的面向对象,可以看到代码中并没有写任何一句的select,insert语句,就可以将数据进行查询和保存.我们只是写了一个类,然后对这个类的对象继续操作,save的是对象,load的也是对象.而唯一要做的就是写个映射文件,让hibernate知道是如何映射对应表的.
- Hibernate的学习一__简单的小例子
- hibernate的简单小例子
- 第一个简单的hibernate小例子
- Hibernate的简单例子
- Hibernate的简单例子
- Hibernate学习--Hibernate的第一个小例子
- 一个简单的学习spring+hibernate的例子
- 远程通讯____webservice_JAX-WS简单的入门小例子(一)
- 一个简单的Hibernate例子!
- 一个简单的Hibernate例子
- 简单易懂的hibernate例子
- struts + hibernate 简单的例子
- 一个简单的Hibernate例子
- 简单易懂的hibernate例子
- 菜鸟学习Hibernate——简单的一个例子
- 菜鸟学习Hibernate——简单的一个例子
- 【HIbernate】hibernate 最简单的例子
- 简单的ajax小例子
- JavaSe基础XX17——常用对象API-集合框架_3
- ubuntu 下安装lua语言
- HDU 3605 Escape
- android
- 修改Cocos2d-X-3.2中的setup.py, 使其能用python3
- Hibernate的学习一__简单的小例子
- 华为机试练习---找出数组中的"支配者"
- EXPDP/IMPDP与EXP/IMP在不同用户和表空间之间迁移数据的实现方法
- 两个时间对应的干支
- android调节屏幕亮度(包括只修改应用程序和修改系统)
- 学习笔记6——字符,字符串,malloc()函数,单引号,双引号
- 淘宝首页链接跳转,非taobao.com域名下的链接处理
- R语言http://weibo.com/dmonsns#_rnd1410060357073
- C++ 学习笔记_0005_分支条件(个税计算、月份天数)