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
<hibernate-mapping>
<class name="student.Student" table="student" catalog="eco">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="assigned" />
</id>
<property name="user" type="java.lang.String">
<column name="user" length="16" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="16" not-null="true" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" not-null="true" />
</property>
</class>
</hibernate-mapping>
这表示了student包下的Student持久化类与数据库表student的映射关系,property是持久化类中的成员变量,
column是数据库表的属性字段,它们一一对应,Id标签表示这个字段是主键。
hibernate.cfg.xml
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:8090/eco
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
mysqljdbc
</property> <mapping resource="student/Student.hbm.xml" />
</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包,然后新建一个测试类;
public class StudentTest {
private Session session = HibernateSessionFactory.getSession();
private Transaction transaction;
@Before
public void init() {
// 开启事务
transaction = session.beginTransaction();
}
@After
public void distory() {
// 提交事务
transaction.commit();
// 关闭会话
session.close();
// 关闭会话工厂
HibernateSessionFactory.getSessionFactory().close();
}
@Test
public void testadd() {
// 事务具体内容
Student s = new Student(334, "桔子桑", "12646574", 26);
session.save(s);
}
}
我们来看这三个注解:
@Before 相当于初始化,我们在这个方法中实现了开启事务;
@Test 在这里安排想要实现的功能,布置真正要做的事;
@After 相当于销毁,在这里我们先把任务提交给数据库,然后关闭会话/会话工厂,如果不关闭,随着对数据库连接
的次数增加,有可能导致连接池溢出,所以,我们在任务结束之后,关闭会话。
6.增删改查
@Test
public void testadd() {
// 事务具体内容
Student s = new Student(334, "桔子桑", "12646574", 26);
session.save(s);
}
@Test
public void testupdate() {
// 事务具体内容
Student s = (Student)session.get(Student.class, 1);
s.setAge(25);
session.update(s);
}
@Test
public void testdelete() {
// 事务具体内容
Student s = (Student)session.get(Student.class, 1);
session.delete(s);
}
@Test
public void testget() {
// 事务具体内容
Student s = (Student)session.get(Student.class, 1);
System.out.println(s);
}
以上就是数据库的增删改查功能,是不是很方便呢,再也不用冥思苦想地去拼接sql语句了,
Student.class表示Student类的类类型,是java反射的知识。
温馨提示:Hibernate版本不同,获取会话工厂的方法也会有差异,本文使用的是4.1版本的Hibernate。
java之Hibernate框架实现数据库操作的更多相关文章
- Java通过JDBC 进行MySQL数据库操作
转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...
- java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...
- ThinkPhp框架的数据库操作(查询)
TP框架有一套自己的数据库操作的代码,包括数据库的增.删.改.查.本文主要讲解TP框架的数据库查询操作. 找到入口文件的控制器: 我这里的入口文件是Show文件夹下的控制器. 打开Login控制器. ...
- Java常用工具类之数据库操作辅助类DBUtil.java
package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...
- 018.CI4框架CodeIgniter数据库操作之:Delete删除一条数据
01. 在Model中写数据库操作语句,代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class User_mo ...
- Java/C++实现模板方法模式---数据库操作
对数据库的操作一般包括连接.打开.使用.关闭等步骤,在数据库操作模板类中我们定义了connDB().openDB().useDB().closeDB()四个方法分别对应这四个步骤.对于不同类型的数据库 ...
- 017.CI4框架CodeIgniter数据库操作之:Updata更新修改一条数据
01. 在Model中写入数据库操作的代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class User_mod ...
- java:Hibernate框架4(延迟加载(lazy),抓取(fetch),一级缓存,get,load,list,iterate,clear,evict,flush,二级缓存,注解,乐观锁和悲观锁,两者的比较)
1.延时加载和抓取: hibernate.cfg.xml: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-co ...
- Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作
在Java中对Oracle数据库的操作分为两种:一.查询.二.非查询. 下面是我对其进行总结: 一.查询数据 /** * 根据用户代码查询 * @param userId * @return 如果存在 ...
随机推荐
- 控件之combox
一. combox显示 首先combox有两个属性来存储数据:DisplayMember(显示成员),ValueMember(值成员) ,DisplayMember是我们在combox界面上看 ...
- Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐号的管理权限
原文出处:http://blog.csdn.net/dba_huangzj/article/details/38817915,专题目录:http://blog.csdn.net/dba_huangzj ...
- (NO.00002)iOS游戏精灵战争雏形(十)
到目前为止,子弹是有去无回.如果子弹击中目标或者飞出屏幕,那么子弹也就没必要存在了. 这里的不存在不是把它从屏幕中删除,因为前面提到了子弹缓存的作用,所以这里仅仅将其设置为不可见就可以了. 首先处理飞 ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- 【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
作者 : 万境绝尘 转载请著名出处 终于拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...
- 015-OC基础语法-OC笔记
学习目标 1.[了解]Objective-C语言简介 2.[掌握]第一个OC程序 3.[掌握]OC中的字符串 4.[熟悉]OC中的一些玩意 5.[了解]面向过程与面向对象 6.[掌握]类的声明和实现 ...
- SpriteBuilder使用Shader Effect的另一种方法
记住你并不是必须要使用Effect节点去给一个特定的精灵应用效果. 你只要选择一个精灵然后切换至项目属性窗口(Item Properties tab),找到effects用户接口在CCSprite属性 ...
- cdh5 hadoop redhat 本地仓库配置
cdh5 hadoop redhat 本地仓库配置 cdh5 在网站上的站点位置: http://archive-primary.cloudera.com/cdh5/redhat/6/x86_64/c ...
- Android实现RecyclerView侧滑删除和长按拖拽-ItemTouchHelper
RecyclerView这个被誉为ListView和GirdView的替代品,它的用法在之前的一篇博文中就已经讲过了,今天我们就来实现RecyclerView的侧滑删除和长按拖拽功能,实现这两个功能我 ...
- 第十一章 图像之2D(2)
Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621 作者:宋志辉 出处:http://blog.csdn.net/song19891121 本文版权归作 ...