hibernate入门实例

1. 环境配置

1.1 hiberante环境配置

hibernate可实现面向对象的数据存储。hibernate的官网:http://hibernate.org/ 官网上选择hibernate ORM,可以下载最新的hibernate,还有配套的document教程 http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/ 。下载到的hibernate文件夹中有document文档(hibernate\documentation\manual\en-US\html_single)。发现hibernate4.3.1的文件夹中的文档和网站上提供的答案不太一样,官网的文档更详细一些,还附有toturial的源代码。

打开eclipse->windows->preferences->java->build path->user libraries,点击new,新建一个library,可取名为hibernate。点击Add JARs,选择hibernate->lib->required中的所有jar文件,另外还需要加上数据库的connector文件。因为使用的是mysql,所以我这里用到的mysql-connector-java的jar文件。这个jar文件从哪里得到呢?安装mysql服务器产生的文件夹里面是没有jar文件的。我们需要另下载一个MySQL的JDBC jar包。可以从mysql的官网上下载:http://dev.mysql.com/downloads/connector/j/ 下载后得到一个msi文件,双击及可安装。安装后,默认会产生文件夹C:\Program Files (x86)\MySQL\MySQL Connector J ,这里就有一个mysql-connector-java-x.x.x-bin.jar包了。

1.2 mysql数据库配置

安装mysql服务器,设置root的密码为root。启动mysql服务器,新建数据库hibernate,并新建表student。

1
2
3
4
5
# mysql -uroot -proot
create  database  hiberante;
> use hibernate;
create  table  student(id  int  primary  key name  varchar (20), age  int );
> quit;

2. 实例代码

新建一个java工程,假设取名为HibernateHelloWorld。在src下新那一个package,可取名为com.sun.hibernate.model

2.1 类代码

新建一个简单的类,放在com.sun.hibernate.model包下。内容如下:

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
26
27
package  com.sun.hibernate.model;
 
public  class  Student {
     private  int  id;
     private  String name;
     private  int  age;
 
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
     public  int  getAge() {
         return  age;
     }
     public  void  setAge( int  age) {
         this .age = age;
     }
 
}

2.2 配置hibernate配置文件

hibernate\projec\etc中的hiberante.cfg.xml可以作为hibernate的配置文档,或者可使用hibernate\documentation\manual\en-US\html_single\index.html作为模板。在src文件夹下新建一个文件,并命名为hibernate.cfg.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
26
27
28
29
30
31
32
33
34
35
36
<?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>
     
     <!-- Database connection settings -->
     <property name= "connection.driver_class" >com.mysql.jdbc.Driver</property>
     <property name= "connection.url" >jdbc:mysql: //localhost/hibernate</property>
     <property name= "connection.username" >root</property>
     <property name= "connection.password" >root</property>
         
     <!-- JDBC connection pool (use the built-in) -->
     <!-- <property name= "connection.pool_size" > 1 </property> -->
         
     <!-- SQL dialect -->
     <property name= "dialect" >org.hibernate.dialect.MySQLDialect</property>
         
     <!-- Echo all executed SQL to stdout -->
     <property name= "show_sql" > true </property>
         
     <!-- Enable Hibernate's automatic session context management -->
     <!--<property name= "current_session_context_class" >thread</property>-->
         
     <!-- Drop and re-create the database schema on startup -->
     <!-- <property name= "hbm2ddl.auto" >create</property> -->
         
     <!-- Disable the second-level cache -->
     <property name= "cache.provider_class" >org.hibernate.cache.NoCacheProvider</property>
     
     <mapping resource= "com/sun/hibernate/model/Student.hbm.xml" />
         
     </session-factory>
</hibernate-configuration>

mapping resource处的值可根据包名和类名做修改。若类名为Student,则此处的类配置文件必为:Student.hbm.xml。

2.3 类mapping文件

新建一个文件,命名为Student.hbm.xml,放在com.sun.hibernate.model包下。内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version= "1.0"  encoding= "UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
 
<hibernate-mapping  package = "com.sun.hibernate.model" >
     < class  name= "Student" >
         <id name= "id" ></id>
         <property name= "name" ></property>
         <property name= "age" ></property>
     </ class >
</hibernate-mapping>

注意文件开始处的配置,此处与hibernate.cfg.xml不一样。如果配置的与hiberante.cfg.xml一样,运行时会提示错误:“文档根元素 "hibernate-mapping" 必须匹配 DOCTYPE 根 "hibernate-configuration"  ”

2.4 StudentTest测试类

新增Student.java的junit测试类StudentTest.java,放在com.sun.hibernate.model包下代码如下:

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
package  com.sun.hibernate.model;
 
import  org.hibernate.Session;
import  org.hibernate.SessionFactory;
import  org.hibernate.cfg.Configuration;
 
public  class  StudentTest {
 
     public  static  void  main(String[] args){
         Student s =  new  Student();
         s.setId( 1 );
         s.setName( "s1" );
         s.setAge( 1 );
         
         Configuration cfg =  new  Configuration();
         SessionFactory sf = cfg.configure().buildSessionFactory();
         
         Session session = sf.openSession();
         session.beginTransaction();
         session.save(s);
         session.getTransaction().commit();
         session.close();
         sf.close();    
     }
}

2.5. 运行结果

运行StudentTest.java这个类,虽然提示输入成功。去数据库查询后,可发现数据已存储到student数据表中。虽然myeclipse会提示buildSessionFactory()这个函数被deprecated,但实际上程序还是可以运行成功的。

3. 使用annotation

因为使用annotation比较方便,使用annotation就可以不用写XXX.hbm.xml文件了。

3.1 新建类

敲@后应该出现提示的,如果没有出现,在Window->Preferences->Java->Editor->Content Assist,在Auto activation triggers forJava中增加@即可。Teacher.java类与Student类内容基本相同,以@开头的内容为annotation。

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package  com.sun.hibernate.model;
 
import  javax.persistence.Entity;
import  javax.persistence.Id;
 
@Entity
public  class  Teacher {
     
     @Id
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
     public  int  getAge() {
         return  age;
     }
     public  void  setAge( int  age) {
         this .age = age;
     }
     public  int  getTitle() {
         return  title;
     }
     public  void  setTitle(String title) {
         this .title = title;
     }
     
     private  int  id;
     private  String name;
     private  int  age;
     private  String title;
     
}

3.2 更新hibernate.cfg.xml

在原hibernate.cfg.xml文件的mapping以下标红内容。

1
2
<mapping resource= "com/sun/hibernate/model/Student.hbm.xml" ></mapping>
<mapping  class = "com.sun.hiberante.model.Teacher" ></mapping>

4.3 新建TeacherTest.java类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import  org.hibernate.SessionFactory;
import  org.hibernate.cfg.AnnotationConfiguration;
import  org.hibernate.cfg.Configuration;
 
public  class  TeacherTest {
 
     public  static  void  main(String[] args){
         Teacher t =  new  Teacher();
         t.setId( 1 );
         t.setName( "t1" );
         t.setAge( 1 );
         t.setTitle( "middel" );
         
         Configuration cfg =  new  AnnotationConfiguration();
         SessionFactory sf = cfg.configure().buildSessionFactory();
         Session session = sf.openSession();
         session.beginTransaction();
         session.save(t);
         session.getTransaction().commit();
         session.close();
         sf.close();
     }
 
}

 3.3 运行

在数据库中新建teacher数据表:

1
2
3
4
# mysql -uroot -proot
> use hibernate;
> create table teacher(id  int  primary key, name varchar( 20 ), age  int , title varchar( 20 ));
> quit;

运行TeacherTest.java这个类,虽然提示输入成功。去数据库查询后,可发现数据已存储到teacher数据表中。

原文链接:http://www.cnblogs.com/sunada2005/p/3536891.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值