博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate基础-HelloWord
阅读量:5899 次
发布时间:2019-06-19

本文共 4009 字,大约阅读时间需要 13 分钟。

1. 
ORM 
ORM 
(
Object 
/
Relation Mapping 
): 
对象
/
关系映射(理解)
     1
 
ORM 
主要解决对象 
-
关系的映射
     2
 
.ORM
的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序猿能够把对数据库的操作转化为对对象的操作。
2. 
Hibernate 
 
HelloWord
     1
 
. 
增加 
jar 
包:增加到当前项目的 
classpath 
下                            
          hibernate
-
release
-
4.2.4.F 
inal\lib\required\
*.
jar
(
全部的包
)                                           
          MySQL 
的驱动
mysql 
-
connector 
-
java 
-
5.1.29 
-
bin.jar                                          
     2
 
. 
配置 
hibernate 
的配置文件: 
hibernate.cfg.xml
    
. 
利用 
hibernate 
插件生成 
hibernate.cfg.xml
          
<
?

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 "
>
          
<
hibernate
-
configuration
>
               
<
session 
-
factory 
>
             
               
</
session 
-
factory 
>
          
</
hibernate
-
configuration
>
     
. 
编辑 
hibernate.cfg.xml 
文件
     I. 
增加链接数据库的基本信息:
         
<
! 
-- 
配置连接数据库的基本信息 
-->
         
<
property name 
=
"connection.driver_class" 
>
com.mysql.jdbc.Driver 
</
property 
>
         
<
property name 
=
"connection.username" 
>
root 
</
property 
>
         
<
property name 
=
"connection.password" 
>
123456 
</
property 
>
         
<
property name 
=
"connection.url" 
>
jdbc 
:
mysql:///hibernate4
</
property
>
     II. 
配置 
Hibernate 
使用的数据库方言:
         
每一种数据库使用的基本的语法会有细微的差别,比如分页 
MySQL 
使用 
limit
。而 
Oracle 
使用 
rownum
。这就须要告诉 
Hibernate 
底层使用的是哪一种数据库
         
<
! 
-- 
配置 
Hibernate 
的数据库方言 
-->
          
<
property name 
=
"dialect" 
>
org.hibernate.dialect.MySQLInnoDBDialect 
</
property 
>
  
         
注意:方言相应的类来自于 
hibernate
-
release
- 
4.2.4.F
inal\project\etc\hibernate.properties 
    
    III. 
编辑 
Hibernate 
的一般属性
         
<
! 
-- 
创建数据表的策略(了解,最多使用的值是 
update
 
-->
          
<
property name 
=
"hbm2ddl.auto" 
>
update 
</
property 
>
         
> 
create 
: 
每次执行都会删除上一次的表 
,
又一次生成表 
, 
哪怕二次没有不论什么改变
         
> 
create 
-
drop 
:会依据 
.
hbm.xml 
文件生成表
, 
可是
SessionFactory 
一关闭
,
  
表就自己主动删除
         
> 
update 
:最经常使用的属性值。也会依据 
.
hbm.xml 
文件生成表 
, 
但若 
.
hbm.xml  
文件和数据库中相应的数据表的表结构不同 
,
            Hiberante  
将更新数据表结构,但不会删除已有的行和列
         
> 
validate 
: 
会和数据库中的表进行比較 
, 
 
.
hbm.xml 
文件里的列在数据表中不存在。则抛出异常
         
<
! 
-- 
是否打印 
SQL -->
          
<
property name 
=
"show_sql" 
>
true
</
property
>
         
<
! 
-- 
是否格式化 
SQL -->
         
<
property name 
=
"format_sql" 
>
true
</
property
>
3
 
. 
编写实体类( 
POJO
)及 
Hibernate 
映射文件: 
xxx.hbm.xml
    I. 
编写一个 
POJO 
:必须包括一个 
OID 
字段和数据表主键相应。必须有一个无參数的构造器。为字段定义 
getter
 
setter
;非 
final 
    II. 
 
hibernate 
插件生成 
xxx.hbm.xml 
文件
    
注意:须要对文件进行简单的改动:改动主键生成方式(使用
 
id
 
 
generator
 
子节点的
 
class
 
属性配置主键的生成方式,
 
native
 
表示使用数据库本地的方式来
    
生成主键,
 
MySQL
 
会自己主动的选用
 
auto_increment
。而
 
Oracle
 
则使用序列的方式
    
<
generator class 
=
"assigned" 
/> 
改动为 
<
generator class
=
"native" 
/>
    III. 
 
hibernate 
配置文件(
hiberante.cfg.xml 
)中关联 
hibernate 
持久化类的映射文件
    
<mapping resource ="com/atguigu/hibernate/entities/News.hbm.xml" />
4
 
. 
通过 
Hibernate API 
完毕持久化操作
    
1. 
创建 
SessionFactory 
: 
Session 
的工厂类。

SessionFactory 
是线程安全的。一般地。在一个 
Java 
应用中仅仅有一个 
SessionFactory 
实例
        Configuration configuration 
= 
new Configuration 
().
configure 
();
        ServiceRegistry serviceRegistry 
= 
new ServiceRegistryBuilder
().
applySettings
( 
configuration.getProperties
())
                                                      
.
buildServiceRegistry 
();
        SessionFactory sessionFactory 
= 
configuration.buildSessionFactory 
(
serviceRegistry 
);
    
2. 
创建 
Session 
: 
表示 
Hibernate 
应用程序和数据库的一次会话
        Session session 
= 
sessionFactory.openSession 
();
    
3. 
开启事务
        Transaction transaction 
= 
session.beginTransaction 
();
    
4. 
运行持久化操作
         
//
save
         
//
session.save 
(
news 
);
         
//
利用 
OID 
载入对象
        News news2 
= 
(
News 
) 
session.get 
(
News.class 
, 
1
);
        System.out.println 
(
news2 
);
        news2.setContent 
(
"myBatis" 
);
    
5. 
提交事务
        transaction.commit 
();
    
6. 
关闭 
Session
        session.close 
();
    
7. 
关闭 
SessionFactory
        sessionFactory.close 
();
        
    
★写測试类的时候一般採用注解更方便些:
        public class Testing 
{
            private SessionFactory sessionFactory 
;
            private Session session 
;
            private Transaction transaction 
= 
null 
;
            
            @Before
            public void init 
(){
                Configuration configuration 
= 
new Configuration 
().
configure 
();
                ServiceRegistry serviceRegistry 
= 
new ServiceRegistryBuilder
().
applySettings
( 
configuration.getProperties
()).
buildServiceRegistry
();
                sessionFactory 
= 
configuration.buildSessionFactory 
(
serviceRegistry 
);
                
                session 
= 
sessionFactory.openSession 
();
                transaction 
= 
session.beginTransaction 
();
             
}
            
            @After
            public void destroy 
(){
                transaction.commit 
();
                session.close 
();
                sessionFactory.close 
();
             
}
            
            @Test
            public void test 
(){
                //測试部分
             
}
         
}
      
        

转载地址:http://ufesx.baihongyu.com/

你可能感兴趣的文章
MVC5+EF6 入门完整教程八
查看>>
sql server 无法用sql server身份验证
查看>>
Async和Await 异步方法
查看>>
python 的 json 转换
查看>>
HBase基准性能测试报告
查看>>
软件安装的list(0918)
查看>>
使用quicklz缩小程序体积
查看>>
Java 设计模式专栏
查看>>
在controller中无法通过注解@Value获取到配置文件中定义的值
查看>>
常用Mysql或者PostGresql或者Greenplum的语句总结。
查看>>
用实例讲DynamicResource与StaticResource的区别
查看>>
Spring HttpInvoker 从实战到源码追溯
查看>>
[转载]理解 Git 分支管理最佳实践
查看>>
Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner
查看>>
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
appium 报错
查看>>
phpquery中文手册
查看>>
微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
查看>>
css 文件上传按钮美化
查看>>
malloc realloc calloc
查看>>