Hibernate入门学习【一】
简要介绍
Hibernate框架
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。
简而言之,就是应用于持久层,用于与数据库交互,在java和web项目中适用。
orm
即对象关系映射,一个类(对象)与一个数据库中的表格相对应。
配置
- Hibernate基本的jar包
- JDBC需要的包
- log4j
若是java工程,日志输出文件直接放在src下,同理web项目放在javaResource的src下,log4j。properties的内容为:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
# error warn info debug trace
log4j.rootLogger= info, stdout
- c3p0连接池的jar包。虽然实际上hibernate自带了连接池,但是一般不使用自带连接池,这里让hibernate使用c3p0,但是要注意若使用其他连接池,一定要在hibernate的配置文件内配置。
<!-- 配置C3P0连接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property>
Hibernate简单使用
一般流程
- 建立需要的关系型数据库
- 创建相应的实体类
- 映射
- Hibernate核心配置文件
- 引入Junit对其进行测试
映射
- 在xml文件中实现,可以随便命名,但是尽量统一命名映射文件为:类名.hbm.xml
- 在联网情况向下可以直接在文件里加入来源:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
也可以自己进行配置xml提示,各大框架适用:
在eclipse中打开windows->perferences->xml catelog->User Specified Entries->Add
-
类与表名建立映射
属性:
name: 类的全路径名
table:表名
catalog :数据库名<hibernate-mapping> <class name="类的全路径名称" table="表名"> </class> </hibernate-mapping>
当类名与表名一致时,table可以省略不写
-
属性与字段建立映射
主属性(主键):<id name="类中属性名" column="字段名称"> <generator class="native"></generator> </id>
普通字段属性:
<property name="类中属性名" column="字段名称"/>
公共属性:
name:类中属性名
column:字段名称
length:长度
type:类型普通字段还包含:
not-null:非空
unquie:唯一
当类中属性名与表中字段名一致时,column可以不写 -
简单的例子:
<?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> <class name="com.hibernate.demo01.Customer" table="cst_customer"> <!--类中属性与表中主键对应 --> <id name="cust_id" column="cust_id"> <generator class="native"></generator> </id> <!-- 建立类中的普通的属性和表的字段的对应 --> <property name="cust_name" column="cust_name" length="32" /> <property name="cust_source" column="cust_source" length="32"/> <property name="cust_industry" column="cust_industry"/> <property name="cust_level" column="cust_level"/> <property name="cust_phone" column="cust_phone"/> <property name="cust_mobile" column="cust_mobile"/> </class> </hibernate-mapping>
Hibernate核心配置文件
-
两种方式:
1)属性文件,hibernate.properties
2)xml文件,一般命名为hibernate.cfg.xml,基本上使用这种方法
需要注意适用属性文件时,不能引入映射文件。引入来源、xml提示配置同上述映射操作。 -
基本配置并引入配置文件
基本参数:
驱动器、URL、用户名、密码
可选参数:
显示SQL——hibernate.show_sql
格式化SQL——hibernate.format_sql
自动建表——hibernate.hbm2ddl.auto
a. none不自动建表
b. creat有表先删表再建立新表
c. creat-drop在creat的基础上最后再删表
d. update有表则直接使用,无表创建
e. validate只使用已有表,无表时不创建,一般用于检验类与表映射。
<hibernate-configuration> <session-factory> <!-- 连接数据库的基本参数 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///数据库名</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">abc</property> <!-- 配置Hibernate的方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 可选配置================ --> <!-- 打印SQL --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL --> <property name="hibernate.format_sql">true</property> <!-- 自动创建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="配置文件路径l"/> </session-factory> </hibernate-configuration>
-