今天初步学习了javaweb三大框架之一的hibernate, 可以通过面向对象的方式直接操作数据库
###hibernate 框架搭建 [
##导包##创建库和表
##建立数据库对应实体
**成员变量用Long类型来接收数据库中Bigint类型的
##准备映射文件
*映射文件Customer.hbm.xml必须放在数据对应实体的同一个包下-导入DTD约束 web applib->hibernate-core->org.hibernate->hibernate-maping-3.0
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 复制到映射文件头行
//因为本机没有连接互联网,需要更改本地xml配置
**preference->XML Catalog->add->file System ->导入准备好的hibernate-mapping3.dtd , keytype选择URI,key填写约束语句中的网址
- <!-- class元素: 映射表与类的对应
name属性:填写完整类名
table属性(可选):库中表名,默认使用类名做为表名.
-->
- <!-- id元素:映射类中的主键属性(OID)与表中的主键列对应
name属性:类中主键属性名.
column属性(可选):表中的主键列名.默认列名就是属性名
length属性(可选):配置当前列的长度.默认值:数据库对应类型最大长度.
type属性(可选):指定当前列(属性)的类型.默认值:自动检测属性类型.自动根据检测配置.
-->
- <!-- generator元素:主键生成策略.决定对象在执行保存时,主键值如何获得.
代理主键: 表达业务之外的字段.没有业务意义.
increment: 先查询表中的id最大值.加1作为新的主键值.有线程安全问题.测试时使用
*identity:依赖于数据库中的主键自增.
*sequence:使用Oracle中的序列来生成id值.
hilo(用不到):hibernate通过高低位算法来实现主键自增效果.
*native:自动三选一.identity|sequence|hilo
uuid:字符串类型主键.生成随机字符串作为主键.注意长度应超过32位.
自然主键:包含业务意义.
*assigned:手动指定id值.
-->
- <!-- property元素:映射普通列
name属性:类中属性名.
column属性:表中的列名.
length属性(可选):配置当前列的长度.默认值:数据库对应类型最大长度.
type属性(可选):指定当前列(属性)的类型.默认值:自动检测属性类型.自动根据检测配置.
-->
##主配置文件 src下,建立hibernate.cfg.xml
!除了正常配置mysql驱动,jdbc连接,账户密码外, 还要额外配置方言dialect ,从hibernate-corejar包中找出dialect.MySQLDialect导入
-接着配置打印SQL语句到控制台,对生成的SQL语句进行格式化
-配置c3p0连接池路径
-配置映射文件所在的路径
##创建a_hello/Demo类测试,hibernate操作数据库面向对象的情况
#fun1 {
//1 创建配置读取对象,并读取配置
Configuration conf = new Configuration().configure();
//2 创建sessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//4 打开事务
Transaction tx = session.beginTransaction();
//5 执行操作
//-----------------------------------------------
//保存客户
Customer c = new Customer();
c.setCust_name("程序员");
session.save(c);
//-----------------------------------------------
//6 提交事务
tx.commit();
//7 释放资源
session.close();
sf.close();
}
]