Hibernate的基本用法
2017-03-30 13:27
316 查看
Hibernate 的基本开发步骤
1.编写配置文档hibernat.cfg.xml
例如:<session-factory> <!--数据库用户名--> <property name="connection.username">root</property> <!--数据库登录密码--> <property name="connection.password">123456</property> <!--jdbc驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!--设置端口 字符集等 --> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate?useUnicode=true&characterEncoding=utf-8</property> <!--方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--是否直接打印出sql语句 --> <property name="show_sql">true</property> <!--sql格式 --> <property name="format_sql">true</property> <!--ddl生成策略--> <property name="hbm2ddl.auto">update</property> <!--对应的映射 --> <mapping resource="Students.hbm.xml"/> </session-factory>
单一主键:
1.assigned 由java应用程序负责生成(手工赋值)
2.native 由底层数
b568
据库自动生成标示符,如果是MySQL就是increment,如果是Oracle就是sequence,等等
Ps1:assigned注意:如果实体类中设置的主键id是基本类型int的话,则可以不用赋值,系统默认值为0;如是引用类型Integer话,则默认值为null,不赋值系统则报错。
Ps2:native注意:系统会自动选择该数据库对应的自动增值方式,从1开始。即使手动给他赋值,也不会起作用,但也不会报错。
2.编写实体类
需要符合JAVA BEAN 规范 即:1、公有的类。
2、提供公有的不带参数的默认的构造方法。
3、属性私有。
4、属性setter/getter封装
3.生成对应实体类的映射文件
可在包上鼠标右键,点击new->other->Hibernate->Hibernate XML Mapping file(hbm.xml)自动创建如:
<hibernate-mapping> <class name="Students" table="STUDENTS"> <id name="id" type="int"> <column name="ID" /> <!--主键策略--> <generator class="assigned" /> </id> <property name="sname" type="java.lang.String"> <column name="SNAME" /> </property> ...................... <!-- <property name="address" type="java.lang.String"> <column name="ADDRESS" /> </property> --> <property name="picture" type="java.sql.Blob"> <column name="PICTURE" /> </property> <component name="address" class="Address"> <property name="postcode" column="POSTCODE"/> <property name="phone" column="PHONE"/> <property name="address" column="ADDRESS"/> </component> </class> </hibernate-mapping>
常用配置如下:
4.调用Hibernate API进行测试
例如:import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.util.Date; import org.hibernate.Hibernate; 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 org.junit.After; import org.junit.Before; import org.junit.Test; //测试类 public class StudentsTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init(){ //创建配置对象 Configuration config = new Configuration().configure(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //创建会话工厂对象 sessionFactory = config.buildSessionFactory(serviceRegistry); //会话对象 session = sessionFactory.openSession(); //开启事务 transaction = session.beginTransaction(); } @After public void distory(){ //提交事务 transaction.commit(); session.close(); sessionFactory.close(); } @Test public void testSaveStudents(){ //生成学生对象 Students s = new Students(1,"小明","男",new Date()); Address address = new Address("312312","09876666","杭州"); s.setAddress(address); session.save(s);//保存对象进入数据库 } @Test public void testWriteBlob()throws Exception{ Students s = new Students(4,"小明","男",new Date()); //获得照片文件 File f = new File("f:"+File.separator+"头像.jpg"); //获得输入流 InputStream input = new FileInputStream(f); //创建一个Blob对象 Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available()); //设置照片属性 s.setPicture(image); //保存学生 session.save(s); } @Test public void testReadBlob()throws Exception { Students s = (Students) session.get(Students.class, 4); //获得blob对象 Blob image =s.getPicture(); //创建输入流 InputStream input = image.getBinaryStream(); //创建输出流 File f = new File("f:"+File.separator+"头像2.jpg"); OutputStream output = new FileOutputStream(f); //缓冲区 byte[] buff = new byte[input.available()]; input.read(buff); output.write(buff); input.close(); output.close(); }
Hibernate其他一些基础知识
transaction:事务
Hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中 如上例中的://开启事务 transaction = session.beginTransaction(); //提交事务 transaction.commit();
session
1.getCurrentSession在事务提交或者回滚之后会自动关闭,而openSesssion需要你手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出!
2.openSession每次创建新的session对象,
getCurrentSession使用现有的session对象(现有session没commit之前)
基本类型
对象类型
注:本文图片等部分来源于慕课网教程=.=
相关文章推荐
- Hibernate的一些基本用法
- Hibernate中的Query一些基本用法
- Hibernate的基本API的用法
- 5 -- Hibernate的基本用法 --1 3 流行的ORM框架简介
- 5 -- Hibernate的基本用法 --1 2 基本映射方式
- Hibernate中的Query一些基本用法
- 5 -- Hibernate的基本用法 --2 2 Hibernate的数据库操作
- Hibernate中的Query一些基本用法
- Java的Hibernate框架中的基本映射用法讲解
- 5 -- Hibernate的基本用法 --2 Hibernate入门
- (转)Hibernate中的Query一些基本用法
- 第5章Hibernate的基本的用法5.5深入理解持久化对象
- 第5章Hibernate的基本用法 5.4深入Hibernate的配置文件
- Hibernate-Usage(basis)(hibernate基本用法)
- 【Java EE (Struts2 + Spring + Hibernate)开发】系列之 Spring(一)基本用法
- Hibernate中的Query一些基本用法
- 第5章 HIbernate的基本用法 5.3Hibernate的体系结构
- 【Java EE (Struts2 + Spring + Hibernate)开发】: Struts2(一)基本用法(待续)
- 5 -- Hibernate的基本用法 --1 ORM和Hibernate
- 5 -- Hibernate的基本用法 --2 1 Hibernate 下载和安装