首页 > 代码库 > SSH框架第一天——hibernate框架
SSH框架第一天——hibernate框架
什么是框架?
是软件的半成品,它已经完成了部分功能。
什么是hibernate?
hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
(简单的说,hibernate框架通过映射(xml配置文件)来关联javabean和数据库,程序员可以操作对象来操作数据库了。)
三大框架在javaweb中的位置:
Hibernate在开发中的位置:
注 意:hibernate的底层依然还是jdbc规范,只不过我们只负责框架的操作方式,而不用在写jdbc代码了。
顺便提提:虽然dbutils工具类也封装了jdbc的接口规范,但javabean的属性和表的字段不一致时,开发则封装不了,而换做hibernate框架则可以智能的封装起来。
好 处:Jdbc代码非常固定繁琐,而hibernate简化我们开发,除此之外还提供一些新的功能,例如:缓存功能………
下面一起来完成第一个hibernate例子:
第一步:下载hibernate运行环境,导包(Mysql驱动包 +hibernate必须包 + 日志包)
Hibernate环境下载地址:
http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/hibernate-release-5.0.7.Final.zip/download
MySQL数据库驱动包下载:
http://download.csdn.net/download/happy516/1753230
下载后找到所需包,如下:
第二步:创建表结构
Create database employee;
Use employee;
CREATE TABLE `employee`(
`id` bigint(32) NOTNULL AUTO_INCREMENT COMMENT ‘员工编号‘,
`name` varchar(32) NOTNULL COMMENT ‘员工名称‘,
`source` varchar(32)DEFAULT NULL COMMENT ‘员工信息来源‘,
`industry` varchar(32)DEFAULT NULL COMMENT ‘员工所属行业‘,
`level` varchar(32)DEFAULT NULL COMMENT ‘员工级别‘,
`linkman` varchar(64)DEFAULT NULL COMMENT ‘联系人‘,
`phone` varchar(64)DEFAULT NULL COMMENT ‘固定电话‘,
`mobile` varchar(16)DEFAULT NULL COMMENT ‘移动电话‘,
PRIMARY KEY (`id`)
) ENGINE=InnoDBAUTO_INCREMENT=94 DEFAULT CHARSET=utf8;
第三步:写javabean
public class employee{
private Long id;
private String name;
private Long user_id;
private Long create_id;
private String source;
private String industry;
private String level;
private String linkman;
private String phone;
private String mobile;
// 生成get()…set()…
}
第四步:写类与表的映射(一个javabean对应一个映射)
默认的命名规则:实体类名.hbm.xml
这里就是employee.hbm.xml
引入约束:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
注意:引入的是hibernate3.0的dtd约束,不要引入4的约束(不向下兼容)
完整配置:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<classname="com.demo.domain.employee"table="employee">
<!--name是javabean属性,column是表属性,在上面有说到,属性名和表明不一致时,hibernate也会智能的封装,不信可以测试一下-->
<idname="id"column="id">
<!--主键生成策略-->
<generatorclass="native"/>
</id>
<propertyname="name"column="name"/>
<propertyname="source"column="source"/>
<propertyname="industry"column="industry"/>
<propertyname="level"column="level"/>
<propertyname="linkman"column="linkman"/>
<propertyname="phone"column="phone"/>
<propertyname="mobile"column="mobile"/>
</class>
</hibernate-mapping>
关于<generator class="native"></generator>的不同属性含义推荐参考:http://blog.sina.com.cn/s/blog_7b8a637f010142if.html
第五步:写hibernate核心映射:
方式一(了解):
属性文件方式配置,级hibernate.properties
缺点:不能加载映射的配置文件,需要手动编写代码去加载
方式二:(主要方式)
默认格式:hibernate.cfg.xml(不可以修改)
不妨参考一下hibernate-release-5.0.7.Final.zip----àproject--àetc--àhibernate.properties
打开hibernate.properties会有相应数据库的映射格式(这里以mysql为例):
完整配置:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!--一个数据库对应一个SessionFactory标签 -->
<session-factory>
<!-- 4大参数和数据库的方言 -->
<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<propertyname="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
<propertyname="hibernate.connection.username">root</property>
<propertyname="hibernate.connection.password">1234</property>
<!-- 数据库的方言 -->
<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--引入映射的配置文件 -->
<mappingresource="com/demo/domain/employee.hbm.xml"/>
<!--下面的是可选配置 -->
<!--在控制台显示sql语句 -->
<propertyname="hibernate.show_sql">true</property>
<!-- 格式化sql语句 -->
<propertyname="hibernate.format_sql">true</property>
<!-- 生成数据库的表结构
update:如果没有表结构,创建表结构。如果存在,不会创建。
-->
<propertyname="hibernate.hbm2ddl.auto">update</property>
<!--校验映射文件与表中字段是否一致如果不一致就会报错-->
<propertyname="hibernate.hbm2ddl.auto">validate</property>
</session-factory>
</hibernate-configuration>
聊聊session-factory:
1. session-factory是工厂类,是生成Session对象的工厂类
2.SessionFactory类的特点:
一丶SessionFactory对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。
常见的SQL语句是增删改查(通过主键来查询)
一个SessionFactory实例对应一个数据库,应用从该对象中获得Session实例。
二丶SessionFactory是线程安全的,一个实例可以被应用的多个线程共享。
三丶SessionFactory是重量级的,不能随意创建或销毁它的实例。如果只访问一个数据库,只需要创建一个SessionFactory实例,且在应用初始化的时候完成。
四丶SessionFactory需要一个较大的缓存,用来存放预定义的SQL语句及实体的映射信息。另外可以配置一个缓存插件,这个插件被称之为Hibernate的二级缓存,被多线程所共享。
第六步:写hibernate入门代码:
packagecom.demo.test;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
importorg.junit.Test;
importcom.demo.domain.employee;
public class demo {
@Test
public void test(){
// 1. 先加载配置文件
Configuration config = new Configuration();
// 默认加载src目录下hibernate.cfg.xml的配置文件
//再次强调,写hibernate核心映射名字固定的,不许改变。
config.configure();
//核心映射为属性配置方式时,要手动加相应映射
//config.addResource("com/demo/domain/employee.hbm.xml");
// 2. 创建SessionFactory对象
SessionFactory factory =config.buildSessionFactory();
// 3. 创建session对象
Session session =factory.openSession();
// 4. 开启事务
Transaction tr =session.beginTransaction();
// 5. 编写保存的代码
employee e = new employee();
// c.setid(cust_id); 主键是自动递增了,可以忽略
e.setName("小明");
e.setLevel("师傅");
e.setPhone("10086");
e.setLinkman("张三");
e.setMobile("13800138000");
e.setSource("人才网");
e.setIndustry("清洁行业");
// 保存数据,操作对象就相当于操作数据库的表结构
session.save(e);
// 6. 提交事务
tr.commit();
// 7. 释放资源
session.close();
factory.close();
}
}
说明一下:这里测试类用到Junit,要导入Junit包,下载地址:http://download.csdn.NET/detail/zht0627/3125442
有疑问或者要更正的,请您留言私信支持,谢谢!
持续更新中。。。
SSH框架第一天——hibernate框架