hibernate之一:hello world

前言

对一个框架的直观认识,往往是从一个hello world程序开始的。Hibernate是一个完全的ORM(Object Relationship Mapping)对象映射框架。实现了JDBC轻量级的封装,使得在进行JDBC开发的时候可以直接使用面向对象的思维进行开发,说白了hibernate框架的作业就是在java对象和关系数据库中作了一个映射,使得程序员不用再使用各种SQL语句

Hibernate有如下几个特点:
1:完成了对JDBC的封装,不用再与各种connection打交道
2:是一个持久层框架,即对数据库进行持久化操作
3:是一个ORM框架,不用再与各种sql打交道

接下里就是hibernate入门程序,目的先有一个直观认识,不考虑其含义,只要把流程走一遍就完成了目的。这里用最简的方式完成入门程序

步骤一:创建一个java 工程

步骤二:建一个lib文件夹,并导入如下jar包,然后添加至项目中
Alt text

步骤三:在src目录下创建一个hibernate.cfg.xml配置文件,并编写,同时添加mysql驱动包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- 该文件用于配置连接数据的种类,用户名,密码,ul ,驱动.. 连接池,二级缓存 -->
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:9806/sshe</property>
<property name="connection.username">root</property>
<property name="connection.password">yourpassword</property>
<!-- 配置显示hibernate生成的 sql ,特别说明,在开发阶段设为true利于调试,在使用项目则设为false-->
<property name="show_sql">true</property>
<!-- 配置数据库的方言/ -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>

简单说明一下:上面的配置文件指明了一些必要的数据库连接属性,通过这些属性,hibernate可以连接上数据库,可以配置不同的数据库,其中配置数据库的方言指明所配置的是用哪种数据库

步骤四:创建bean对象

1
2
3
4
5
6
7
8
9
package com.zwl.bean;
public class User {
private int age;
private int id;
private String name;
。。。此处省略set与get方法
}

这里注意:利用hibernate框架时,鼓励我们为每张表设置主键,即为每个对象设置一个id,在映射时与表的id对应

步骤五:创建数据库表,这个步骤也可以在步骤四之前进行。
主要为id(主键,自增长),name、age

步骤六:编写表与对象的映射文件User.hbm.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8"?>
<!--该文件要清楚地表述出 类 和 表 的对应关系-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package : 表示该类在哪个包下 -->
<hibernate-mapping package="com.zwl.bean">
<!-- name : 表示类名 table 表示 该类和哪个表映射 -->
<class name="User" table="user">
<!-- id元素专门用于指定主键是如何生成,hibernate设计者认为,我们每一个表都应该有一个主键 -->
<!-- name:表示类的哪个属性是主键 -->
<id name="id" type="java.lang.Integer">
<!-- 指定主键生成策略 -->
<generator class="increment">
</generator>
</id>
<!-- property 里是普通属性 , column表示该属性映射到表中哪个字段 -->
<property name="name" type="java.lang.String">
<column name="name" not-null="false"/>
</property>
<property name="age" type="java.lang.Integer">
<column name="age" not-null="false"/>
</property>
</class>
</hibernate-mapping>

简单说明一下:上面已经简要说明了一些含义,这里先看做强加的概念,事实上这是比较完整的配置,当然这里并没有给出简化的配置。同时,该文件相当于在java对象和数据库表中作了一个映射,这样以后就可以通过操作java对象来间接操作表
另外,该映射文件一般放在与相应的java对象同处一个文件夹下,并且命名满足规范XXX.hbm.xml,其中xxx就是java对象名,最后还要在hibernate核心配置文件中声明该映射,即加入如下代码:

步骤六:就是进行测试,实现插入数据的crud操作

首先写一个工具类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.zwl.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static final SessionFactory sessionFactory=BuildSessionFactory();
private static SessionFactory BuildSessionFactory(){
try {
return new Configuration().configure().buildSessionFactory();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}

简单说明一下,这里采用单例模式,目的是为了不要每次都加载配置,不然太耗费内存

接下来是测试类,首先是增加功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Usertest {
SessionFactory sessionFactory=HibernateUtils.getSessionFactory();
Session session=sessionFactory.openSession();
Transaction t=session.beginTransaction();
@Test
public void save(){
User u=new User();
u.setId(1);
u.setName("hello world");
u.setAge(21);
session.save(u);
t.commit();
}

接下来是查询(遍历)

1
2
3
4
5
6
7
//查询
@Test
public void select(){
List<User> list=session.createCriteria(User.class).list();
for(User user : list){
System.out.println(user.getName());
}

最后是删除:

1
2
3
4
5
6
7
//删除
@Test
public void delete(){
User u=(User)session.get(User.class, 1);
session.delete(u);
t.commit();
}

修改这里就先不说了。
至此入门程序完成,意在了解hibernate的具体过程,有没有发现,到目前为止,我们都没有写sql语句,而都是对java对象进行操作,来操作表

热评文章