对Hibernate框架的学习
-
Hibernate 的执行流程
1、配置文件 (hbm.xml 映射文件,建立对象和表的关系映射;.java 对象;.hibernate.cfg.xml(Hibernate的主配置文件))
2、通过Configuration加载配置文件,准备hibernate的运行环境
3、创建SessionFactory创建会话工厂,用于创建session
4、通过sessionFactory创建session会话 通过session发出sql语句
5、增删改需要开启事物,通过transaction提交或者回滚
6、查询操作,不需要开启事物,通过query对象构造查询条件查询
7、释放资源 -
在hbm.xml 文件下配置:
// hbm.xml的配置 先进行配置Hibernate的dtd约束
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-/Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernatre.org/dtd/hibernate-mapping-3.0.dtd">
<!--配置表和类的映射关系-->
<hibernate-mappin>
<class name="类名" table="表名">
<!--配置主键的映射-->
<id name="类中的属性名" type="属性的类型">
<column name="数据表的主键名"></column>
<!-- identity自增;uuid(唯一字符串);assgiend(手动指定)-->
<generator class="identity"></generator>
</id>
<!--普通的属性和表的映射-->
<property name="类的属性名" type="string(Hibernatet提供的类型,不写的话为字符串)">
<column name="表的字段的名称" length="长度"></column>
</property>
。
。
。
<!--使用工具去生成这些对应的关系-->
</class>
</hibernate-mapping/>
// 配置主配置文件 hibernate.cfg.xml
// hbm.xml的配置 先进行配置Hibernate的dtd约束
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-/Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernatre.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-configuration>
<session_factory>
<!--配置hibernate的运行参数-->
<!--数据库方言,根据选择的数据库进行配置-->
<property name="hibernat.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--数据库连接url-->
<property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/text_hibernate</property>
<!--加载数据库的名称和密码-->
<property name="hobernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!--是否允许输出sql语句-->
<property name="hibernate-show_sql">true</property>
<!--是否允许sql语句格式化-->
<property name="hibernate.format_sql">true</property>
<!--sql驱动-->
<property name="hibernate.connection.driver_class">com.sql.jdbc.Driver</property>
<!--自动补全-->
<property name="hibernate.hbm2ddl.auto">none</property>
<!--加载hnm.xml的映射文件-->
<mapping resource="cn/zhou/ hbm.xml" />
</session-factory>
</hibernate-configuration>
QBC的研究和学习
QBC是按照条件查询,通过Criteria构造查询条件,即,通过使用Criteria的api进行去查询。通过对象进行拼装去查询。Hibernate 通过所拼写的对象生成sql语句!
// 通过Criteria对象去分组查询
Criteria criteria=session.createCriteria(Castumer.class);
criteria.add(Restrictions.eq("","")); //查询的条件
criteria.add(Restrictions.like("","%内容%")); //查询的条件
//查询单个投影列
criteria.setProjection(Projections.property("列名"))
List list=criteria.list();
//查询多个投影列.
criteria.setProjection(Projections.projectionList().add(Projections.property("列名"))
.add(Projections.property("列名"))
.add(Projections.property("列名"))
);
//将结果封装成对象object[]数组转成对象
criteria.setResultTransformer(new AliasToBeanResultTransformer(Cstumer.class));
//记录总数的查询
criteria.setProjection(Projections.rowCount());
Long title=criteria.uniqueResult();
Log4j的学习
- 使用log4j自定义输出日志信息
- hibernate 默认使用的是slf4j框架
- slf4提供了提了一套日志接口的规范
Log4j的使用步骤:
1、在根目录下添log4.properties
2、将jar包导进去
Log4j包括三个主要部件:
记录器:(Logger):配置日志在哪记录
输出源:(Appender):配置输出到哪里
布局:(Layouts):指定日志输出的格式
配置的内容:
log4j.rootLogger=debug,A
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
日志级别会将比 log4j.rootLogger=debug A (debug)高的输出出来。
在开发结算将日志级别设置成debug,生产期间设置成infor或error
//在查询sql的时候可以将参数打印出来
log4j.logger.org.hibernate.type=TRACE
连接池c3p0
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">2</property>