hibernate详解一
hibernate是一个Java开发框架,属于ssh框架中的第三层,工作在数据持久层中,可以用一句话概括hibernate为:hibernate是作用于数据持久化层的对JDBC进行轻量级封装的一个ORM框架。
下面我们来建立一个使用hibernate框架的程序。首先我们需要到官网上下载有关hibernate的jar包,并将其引入到我们的项目工程中。在我们这个项目工程中涉及到三个方面。POJO类,配置文件以及数据库表。
hibernate让我们可以不必关注底层使用的是什么类型的数据库,所以必须由我们配置它的配置文件告诉hibernate我们使用的是什么类型的数据库,类和表之间的关联关系。而POJO的全称为plain ordinary java objects,它与数据库中的表相对应。我们首先建立一张表gamespecies:表中有4个字段:id,gamename,species,players,其中主键为id。
create table gamespecies(
id int primary key auto_increment,
gamename varchar(40),
species varchar(40),
players int not null
)
接下来我们建立POJO类,类名为:Hibernatetest,这个类与上面所建的表相对应。
package com.hibernatetest.test;
public class Hibernatetest {
private Integer id;
private String species;
private String gamename;
private Integer players;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
public String getGamename() {
return gamename;
}
public void setGamename(String gamename) {
this.gamename = gamename;
}
public Integer getPlayers() {
return players;
}
public void setPlayers(Integer players) {
this.players = players;
}
}
POJO类也叫做Domain类,还有时候被叫做javabean,反正这三种名称所代指的均是与数据库表相对应的java类。搞完这些,我们就要设置配置文件了。一般配置文件名的格式为POJO类名.hbm.xml要将它与POJO类相同的文件夹下面。简单的配置文件如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hibernatetest.test"> <!-- 配置主键 --> <class name="Hibernatetest" table="gamespecies"> <!--也就是类和表的名字--> <id name="id" column="id"> <!--id元素是用于主键属性--> <generator class="sequence"> <param name="sequence"></param> </generator> </id> <!-- 配置其他属性 --> <property name="gamename" type="java.lang.String"> <!-- String类型的属性 --> <column name="gamename" not-null="false"></column> </property> <!-- property中是类中属性的名称,而column中是表中的字段名 --> <property name="species" type="java.lang.String"> <column name="species" not-null="false"></column> </property> <property name="players" type="java.lang.Integer"> <column name="players" not-null="true"></column> </property> </class> </hibernate-mapping>
一般来说,这个文件不用我们自己写,可以自动生成。接下来,就到了我们配置hibernate.cfg.xml文件的时刻了。。。这个文件中包含了我们所用数据库的类型,用户名密码等等连接数据库所需要的信息。具体配置如下:
<?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> <!-- 配置driver --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 切换数据库改这里 --> <property name="connection.username">username</property> <!-- 用户名和密码 --> <property name="connection.password">password</property> <property name="connection.url">jdbc:mysql://zxdzxdzxd.mysql.rds.aliyuncs.com:3333/zxddb</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 明确指出hibernate连接的是哪种数据库 --> <mapping resource="com/hibernatetest/test/Hibernatetest.hbm.xml"/> </session-factory> </hibernate-configuration>
均配置好之后,最后我们写一个测试程序测试POJO类与数据库表是否已经建立好联系。具体代码如下:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.hibernatetest.test.Hibernatetest;
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建configuration
Configuration configuration=new Configuration().configure();//读取hibernate.hbm.xml,并完成初始化
//创建SessionFactory会话工厂,重量级的类。
SessionFactory sessionFactory = configuration.buildSessionFactory();
//创建session,与数据库打交道
Session session=sessionFactory.openSession();
//使用事物提交
Transaction transcation = session.beginTransaction();
//添加一个雇员
Hibernatetest test = new Hibernatetest();
test.setId(1);
test.setGamename("DOTA");
test.setSpecies("RTS");
test.setPlayers(1000);
System.out.println("processint!");
session.save(test);//这里也就是insert into...
transcation.commit();
System.out.println("successful!");
session.close();
}
}
结果为:mission completed!
在搭建的时候遇到的主要问题:
1.hibernate.cfg.xml配置文件中数据库url的格式,对于MySQl型数据库来说,它的格式为:jdbc:mysql://url:port/db。
2.编写xml配置文件的时候写错了开头的部分:
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
这部分代码可以直接从hibernate文档中的同名文件(hibernate.cfg.xml以及User.hbm.xml)中拷贝,不过这些配置文件都可以自动生成。
3.上面搭建hibernate的过程大体上是从先建立好数据库表——>编写POJO类——>设置配置文件,这是三种搭建hibernate框架方法中的一种。
以上。