Hibernate基本示例
2016-04-20 11:22
337 查看
纸上得来终觉浅
Hibernate是一个ORM框架,ORM(即Object/Relation Mapping),它是一个处理对象和关系的映射的框架;再看持久化,狭义概念即把数据长久的保存到数据库,广义上是指与数据有关的所有操作,增删改查。下面是Hibernate环境搭建的基本实例:
1.给Eclipse安装Hibernate插件,然后下载Hibernate-Framework,相关的Jar包,程序如下:
2.其他问题和知识点
1)可能是由于数据库驱动版本的问题,可能会有下面的Error Info:Disabling contextual LOB creation as createClob() method threw error</span>
在配置文件中加上
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
2)User的id为Long类型,这个时候mysql的相关类型要为Bigint,同时在使用session的get方法时,第二个参数为1L;
3)关于hbm2ddl.auto属性,可以取值有四个:
create-drop:
表示在hebarinate初始化时()创建表格,程序运行结束的时候会删除相应的表格
create:
在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格
update:
只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构,比如改变了列名,会不改变原来的列,而是新增一列,同时原来数据还在:
之前的配置文件改为这个,再次运行:
validate:
校验映射文件和数据库中的表是不是能对应起来,不能对应就报错。
实际应用中,应该是后面两个较多。
4)关于代理主键的生成方式:
推荐使用下面的几种:
1)支持自动增长的数据库能够使用identity,这时候由底层数据库来负责生成标识符
2)支持序列化的数据库能够使用sequence,这个时候会根据底层数据库提供的序列生成标识符
3)Hibernate根据high/low算法生成标识符,适合所有的数据库系统
4)native根据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence或hilo标识符
Hibernate是一个ORM框架,ORM(即Object/Relation Mapping),它是一个处理对象和关系的映射的框架;再看持久化,狭义概念即把数据长久的保存到数据库,广义上是指与数据有关的所有操作,增删改查。下面是Hibernate环境搭建的基本实例:
1.给Eclipse安装Hibernate插件,然后下载Hibernate-Framework,相关的Jar包,程序如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/roadarchitectweb</property> <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="hibernate.c3p0.max_size">10</property> <property name="hibernate.c3p0.min_size">5</property> <property name="c3p0.acquire_increment">2</property> <property name="c3p0.idle_test_period">2000</property> <property name="c3p0.timeout">2000</property> <property name="c3p0.max_statements">10</property> <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property> <mapping resource="roadArchitectWeb/User.hbm.xml"/> </session-factory> </hibernate-configuration>
package roadArchitectWeb; public class User { private Long id; private String name; private String phoneNum; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public User() { super(); } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", phoneNum=" + phoneNum + "]"; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2016-4-19 16:53:01 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="roadArchitectWeb.User" table="USER"> <id name="id" type="long"> <column name="ID" /> <generator class="identity" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="phoneNum" type="java.lang.String"> <column name="PHONENUM" /> </property> </class> </hibernate-mapping>
package roadArchitectWeb; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; public class HibernateTest { @Test public void test() { //1.创建SessionFactory对象 SessionFactory sessionFactory = null; //创建Configuration,对应hibernate基本配置信息,和对象文件映射信息 Configuration configuration = new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); //2.创建Session对象 Session session = sessionFactory.openSession(); //3.开启事务 Transaction transaction = session.beginTransaction(); //4.执行操作 User user = new User(); /*新增数据*/ user.setName("majintao"); user.setPhoneNum("18788837117"); session.save(user); /*查找数据*/ User user2 = (User)session.get(User.class, 1L); System.out.println("HibernateTest.test():"+user2); /*更新数据*/ // user2.setPhoneNum("xxxxxxxxxxx"); // session.update(user2); /*删除数据*/ // session.delete(user2); //5.提交事务 transaction.commit(); //6.关闭Session session.close(); //7.关闭SessionFactory sessionFactory.close(); } }
2.其他问题和知识点
1)可能是由于数据库驱动版本的问题,可能会有下面的Error Info:Disabling contextual LOB creation as createClob() method threw error</span>
在配置文件中加上
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
2)User的id为Long类型,这个时候mysql的相关类型要为Bigint,同时在使用session的get方法时,第二个参数为1L;
3)关于hbm2ddl.auto属性,可以取值有四个:
create-drop:
表示在hebarinate初始化时()创建表格,程序运行结束的时候会删除相应的表格
create:
在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格
update:
只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构,比如改变了列名,会不改变原来的列,而是新增一列,同时原来数据还在:
<property name="phoneNum" type="java.lang.String"> <column name="PHONE" /> </property>
之前的配置文件改为这个,再次运行:
validate:
校验映射文件和数据库中的表是不是能对应起来,不能对应就报错。
实际应用中,应该是后面两个较多。
4)关于代理主键的生成方式:
推荐使用下面的几种:
1)支持自动增长的数据库能够使用identity,这时候由底层数据库来负责生成标识符
2)支持序列化的数据库能够使用sequence,这个时候会根据底层数据库提供的序列生成标识符
3)Hibernate根据high/low算法生成标识符,适合所有的数据库系统
4)native根据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence或hilo标识符
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- Eclipse添加xml文件提示及Hibernate配置学习
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Hibernate实现批量添加数据的方法
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- 深入理解Hibernate中的flush机制
- 简要分析Java的Hibernate框架中的自定义类型