Hibernate基础-HelloWord
2024-09-30 14:07:26
1. ORM :ORM (Object /Relation
Mapping ): 对象/关系映射(理解)
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 -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 >
name ="connection.driver_class" >com.mysql.jdbc.Driver </property >
<property
name ="connection.username" >root </property >
name ="connection.username" >root </property >
<property
name ="connection.password" >123456 </property >
name ="connection.password" >123456 </property >
<property
name ="connection.url" >jdbc :mysql:///hibernate4</property>
name ="connection.url" >jdbc :mysql:///hibernate4</property>
II. 配置 Hibernate 使用的数据库方言:
每一种数据库使用的基本的语法会有细微的差别,比如分页 MySQL 使用 limit。而 Oracle 使用 rownum。这就须要告诉 Hibernate 底层使用的是哪一种数据库
<! -- 配置 Hibernate 的数据库方言 -->
<property
name ="dialect" >org.hibernate.dialect.MySQLInnoDBDialect </property >
name ="dialect" >org.hibernate.dialect.MySQLInnoDBDialect </property >
注意:方言相应的类来自于 hibernate-release- 4.2.4.Final\project\etc\hibernate.properties 中
III. 编辑 Hibernate 的一般属性
<! -- 创建数据表的策略(了解,最多使用的值是 update) -->
<property
name ="hbm2ddl.auto" >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>
name ="show_sql" >true</property>
<! -- 是否格式化 SQL
-->
-->
<property
name ="format_sql" >true</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" />
class ="assigned" /> 改动为 <generator
class="native" />
III. 在 hibernate 配置文件(hiberante.cfg.xml )中关联 hibernate 持久化类的映射文件
<mapping
resource ="com/atguigu/hibernate/entities/News.hbm.xml" />
resource ="com/atguigu/hibernate/entities/News.hbm.xml" />
4) . 通过 Hibernate
API 完毕持久化操作
API 完毕持久化操作
1. 创建 SessionFactory : Session 的工厂类。
SessionFactory 是线程安全的。一般地。在一个 Java 应用中仅仅有一个 SessionFactory 实例
Configuration configuration = new
Configuration ().configure ();
Configuration ().configure ();
ServiceRegistry serviceRegistry = new
ServiceRegistryBuilder().applySettings( configuration.getProperties())
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 ();
Configuration ().configure ();
ServiceRegistry serviceRegistry = new
ServiceRegistryBuilder().applySettings( configuration.getProperties()).buildServiceRegistry();
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 (){
//測试部分
}
}
最新文章
- 在Activity之间传递参数(一)
- Matlab中常用机器学习函数
- [转]在 Web 项目中应用 Apache Shiro
- arm嵌入式交叉编译工具链
- codeforces 258div2 B	 Sort the Array
- Codeforces Round #306 (Div. 2) B. Preparing Olympiad dfs
- git的一些命令
- svn版本控制
- cocos2d-x3.x 设计与实现弹出对话框
- Android应用性能测试之CPU和内存占用
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
- js 异步转同步
- 程序员50题(JS版本)(八)
- Photoshop给草坪上的人物加上唯美的紫色霞光
- postgresSQL 实现数据修改后,自动更新updated_date/ts等字段
- Pfsense2.34中文版
- Phpstorm 2018及2017.3.2激活码(DataGrip WebStorm 激活码)
- Java的接口、继承与多态
- CentOS 7下安装Python3.6.4
- mysql insert 主键 重复问题