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反射的知识。

时间: 2024-08-12 17:23:52

java之Hibernate框架实现数据库操作的相关文章

Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 &#39;AR模式&#39;]

public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCommand($sql);        $query = $result->queryAll();         return array (                $query [0] ['max'],         );    } $connection=Yii::

CI框架的数据库操作函数

//举例查询 (userid,name,sex为user表的数据库字段)    public function testa(){        $this->load->database();            $query = $this->db->query('SELECT * FROM user');        foreach ($query->result() as $row)        {            echo $row->userid;

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

二、JAVA通过JDBC连接mysql数据库(操作)

昨天时间限制只是写了如何连接数据库,连接数据库的目的无非就是查询.修改数据,仅仅连接上还是毫无意义的. 对于数据哭的操作就要用到Statement接口(java.sql.Statement)主要方法 int executeUpdate(String sql)throws SQLException 更新数据库 ResultSet executeQuery(String sql)throws SQLException 查询返回ResultSet结果集 代码演示 1 import java.sql.C

ThinkPhp框架的数据库操作(查询)

TP框架有一套自己的数据库操作的代码,包括数据库的增.删.改.查.本文主要讲解TP框架的数据库查询操作. 找到入口文件的控制器: 我这里的入口文件是Show文件夹下的控制器. 打开Login控制器. 代码写在index方法中. 数据库的定义方式有三种. 前两种要写模型函数,最后一种不需要. 模型的例子(放在Model文件夹下,名字与类名相同,本例的名字:UserModel.class.php) <?php namespace Admin\Model; use Think\Model; class

018.CI4框架CodeIgniter数据库操作之:Delete删除一条数据

01. 在Model中写数据库操作语句,代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class User_model extends Model { var $Db; function __construct() { parent::__construct(); //创建数据库连接 $this->Db = \Config\Database::connect(); } function deletedata()

java使用Field实现通用数据库操作

上次介绍了Field,可以其可以在运行时候获取类中的信息,这是个好东西,我们可以用它来实现数据库的增删改查操作 当然,需要有一些限制: 1.表和实体类字段要对应 2.表和实体类名字要对应 3.实体类的第一个字段必须是主键(这个主要在更新的时候用到,具体根据个人情况而定) 数据库操作类如下 public class ReflectDao { private static String uri = "jdbc:mysql://localhost/reflect"; private stat

laravel框架之数据库操作

1.使用DB门面进行基本操作 一旦你设置好了数据库连接,就可以使用 DB facade 来进行查找.DB facade 提供每个类型的查找方法:select.update.insert.delete.statement. 1.1增-> DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']); 1.2删-> $deleted = DB::delete('delete from users'); 返回值:删除的行

017.CI4框架CodeIgniter数据库操作之:Updata更新修改一条数据

01. 在Model中写入数据库操作的代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class User_model extends Model { var $Db; function __construct() { parent::__construct(); //创建数据库连接 $this->Db = \Config\Database::connect(); } function updatadata() {