java之Hibernate框架实现数据库操作
Posted 桔子桑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之Hibernate框架实现数据库操作相关的知识,希望对你有一定的参考价值。
之前我们用一个java类连接mysql数据库实现了数据库的增删改查操作---------MySQL篇;
但是数据库种类之多,除了MySQL,还有Access、Oracle、DB2等等,而且每种数据库语言都不尽相同;
这时,我们就需要一个框架来实现对主流数据库操作的兼容,并且简化操作流程,Hibernate就是其中一款
主流框架。这里我们用Myeclipse作为开发软件来示例。
1.建立数据库连接
开启MySQL数据库服务,并在Myeclipse中,Window-->Show View-->DB Browser,打开数据库窗口;
右键New,这里要求你输入你开启的数据库信息,并对其进行连接,因为我这里用的是MySQL,所以选择
信息如下:
Driver template:MySQL Connecter/J;
Driver name:自定义,但是推荐使用和项目相关的名字;
Conection URL:jdbc:mysql://localhost:8090/eco(这里写自己数据库的地址);
Driver Jars:这里需要添加一个数据库驱动,在这里是MySQL的JDBC驱动,提前下载好的;
然后就是用户名、密码了,如果信息无误,那么连接成功。
2.新建java项目,并为其加入Hibernate特性
流程如下:
右键项目-->Myeclipse-->Add Hibernate Capabilities-->选择版本,我这里选的是4.1版本,然后选择Hibernate
的Core核心包,下一步;
选择之前连接的数据库-->在这里会生成一个hibernate.cfg.xml文件,当前存储了数据库的连接信息-->选择一个
目录来放置HibernateSessionFactory.java这个类-->finish。
这个类中的方法,会在后面的数据库操作中用到,这里Hibernate已经帮我们写好了,后面加以调用就OK了。
3.反向生成持久化类
数据库中建立一张表table,并为其添加属性字段,比如ID,name,age等等,在这里我们使用的是依靠表来
反向生成持久化类(和表中属性相对应的类文件),表的信息设置好之后,右键表-->Hibernate Reverse Engineer;
这里会生成一个持久化类和关于类与表映射关系的XML文件,系统让你选择一个安放路径,POJO<>DB字段打
钩,表示项目到数据库的映射-->Type类型:Java,ID字段(主键)的类型,我这里选的是assigned(手动输入),
如果ID信息填的是学号的话,这样就比较靠谱,如果没有什么切实意义,那么选native,他会更具数据库类别自
动匹配类型,MySQL就会是自增-->finish。
4.映射文件和数据库信息文件
Student.hbm.xml
1 <hibernate-mapping> 2 <class name="student.Student" table="student" catalog="eco"> 3 <id name="id" type="java.lang.Integer"> 4 <column name="id" /> 5 <generator class="assigned" /> 6 </id> 7 <property name="user" type="java.lang.String"> 8 <column name="user" length="16" not-null="true" /> 9 </property> 10 <property name="password" type="java.lang.String"> 11 <column name="password" length="16" not-null="true" /> 12 </property> 13 <property name="age" type="java.lang.Integer"> 14 <column name="age" not-null="true" /> 15 </property> 16 </class> 17 </hibernate-mapping>
这表示了student包下的Student持久化类与数据库表student的映射关系,property是持久化类中的成员变量,
column是数据库表的属性字段,它们一一对应,Id标签表示这个字段是主键。
hibernate.cfg.xml
1 <session-factory> 2 <property name="dialect"> 3 org.hibernate.dialect.MySQLDialect 4 </property> 5 <property name="connection.url"> 6 jdbc:mysql://localhost:8090/eco 7 </property> 8 <property name="connection.username">root</property> 9 <property name="connection.password">root</property> 10 <property name="connection.driver_class"> 11 com.mysql.jdbc.Driver 12 </property> 13 <property name="myeclipse.connection.profile"> 14 mysqljdbc 15 </property> 16 17 <mapping resource="student/Student.hbm.xml" /> 18 </session-factory>
这是数据库信息文件以及映射文件的注册,其实property标签还可以加几个:
<property name="show_sql">true</property>表示进行数据库操作时,在后台打印sql语句
<property name="fomat_sql">true</property>表示将打印的sql语句格式化
<property name="hbm2ddl.auto">create</property>添加记录时对表的操作处理,create删除新建,update更新
5.单元测试
这里来个插曲,就是单元测试,有了单元测试,我们就不用像以前那样总是新建一个程序入口的main方法来运行
代码功能了,可以选择性的运行功能块(方法)。
首先要为项目导入Junit单元测试工具的jar包,然后新建一个测试类;
1 public class StudentTest { 2 private Session session = HibernateSessionFactory.getSession(); 3 private Transaction transaction; 4 5 @Before 6 public void init() { 7 // 开启事务 8 transaction = session.beginTransaction(); 9 } 10 11 @After 12 public void distory() { 13 // 提交事务 14 transaction.commit(); 15 // 关闭会话 16 session.close(); 17 // 关闭会话工厂 18 HibernateSessionFactory.getSessionFactory().close(); 19 } 20 21 @Test 22 public void testadd() { 23 // 事务具体内容 24 Student s = new Student(334, "桔子桑", "12646574", 26); 25 session.save(s); 26 } 27 28 }
我们来看这三个注解:
@Before 相当于初始化,我们在这个方法中实现了开启事务;
@Test 在这里安排想要实现的功能,布置真正要做的事;
@After 相当于销毁,在这里我们先把任务提交给数据库,然后关闭会话/会话工厂,如果不关闭,随着对数据库连接
的次数增加,有可能导致连接池溢出,所以,我们在任务结束之后,关闭会话。
6.增删改查
1 @Test 2 public void testadd() { 3 // 事务具体内容 4 Student s = new Student(334, "桔子桑", "12646574", 26); 5 session.save(s); 6 } 7 @Test 8 public void testupdate() { 9 // 事务具体内容 10 Student s = (Student)session.get(Student.class, 1); 11 s.setAge(25); 12 session.update(s); 13 } 14 @Test 15 public void testdelete() { 16 // 事务具体内容 17 Student s = (Student)session.get(Student.class, 1); 18 session.delete(s); 19 } 20 @Test 21 public void testget() { 22 // 事务具体内容 23 Student s = (Student)session.get(Student.class, 1); 24 System.out.println(s); 25 }
以上就是数据库的增删改查功能,是不是很方便呢,再也不用冥思苦想地去拼接sql语句了,
Student.class表示Student类的类类型,是java反射的知识。
温馨提示:Hibernate版本不同,获取会话工厂的方法也会有差异,本文使用的是4.1版本的Hibernate。
以上是关于java之Hibernate框架实现数据库操作的主要内容,如果未能解决你的问题,请参考以下文章