Hibernate 第一天笔记

Hibernate 第一天笔记

 

* javaEE企业级开发分层 表现层 业务层 持久层

表现层:struts2

业务层:spring

持久层:hibernate----操作数据库

 

* hibernate框架称为ORMObject Relational Mapping)框架

 

流行的数据库框架

JPA Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系(只有接口规范)

Hibernate 最流行ORM框架,通过对新-关系映射配置,可以完全脱离底层SQL,JPA的一个具体实现

MyBatis  本是apache的一个开源项目 iBatis,支持普通 SQL查询,存储过程和高级映射的优秀持久层框架

Apache DBUtils Spring JDBCTemplate

 

官网:http://sourceforge.net/projects/hibernate/files/hibernate3

解压hibernate压缩文件

documentation:文档目录

libjar包目录(依赖包)

project:源码包

hibernate3.jar:框架核心jar

* log4j记录日志的级别

fatal:致命错误> error:普通错误 > warn:警告 > info:普通信息 > debug:调试信息 > trace:堆栈信息

* hibernate 入门案例

1)创建java项目

2)导入jar(11

antlr-2.7.6.jar

commons-collections-3.1.jar

dom4j-1.6.1.jar

hibernate-jpa-2.0-api-1.0.1.Final.jar

hibernate3.jar

javassist-3.12.0.GA.jar

jta-1.1.jar

log4j-1.2.16.jar

mysql-connector-java-5.0.8-bin.jar

slf4j-api-1.6.1.jar

slf4j-log4j12-1.7.2.jar

3)创建一个数据库和表

create database hibernate_day1 default character set utf8;

create table user(id int primary key auto_increment ,name varchar(32),int age);

4)对应user表创建一个实体类

5)在config下提供一个hibernate 核心配置文件hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<!-- 配置hibernate框架的会话工厂 -->

<session-factory>

<!-- 数据库方言 -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 描述jdbc基本连接参数 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day1</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">root</property>

<!-- 在控制台显式sql -->

<property name="hibernate.show_sql">true</property>

<property name="hibernate.format_sql">true</property>

 

<!-- 注册hbm映射文件 -->

<mapping resource="cn/itcast/domain/User.hbm.xml" />

</session-factory>

</hibernate-configuration>

6)提供hbm映射文件:User.hbm.xml

<?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>

<!-- 描述User类对应user表 -->

<class name="cn.itcast.domain.User" table="user">

<!-- id属性对应id字段 -->

<id name="id" column="id">

<!-- 主键生成策略 -->

<generator class="native"></generator>

</id>

<property name="name" column="name"/>

<property name="age" column="age"/>

</class>

</hibernate-mapping>

7)将hbm映射文件注册到核心配置文件中

8)通过hibernate提供的API完成对数据库操作

//读取hibernate核心配置文件,获取配置对象

Configuration conf = new Configuration().configure();

//通过配置对象构建一个会话工厂对象

SessionFactory factory = conf.buildSessionFactory();

//从工厂中获取一个会话对象

Session session = factory.openSession();

User user = new User();

user.setName("test");

user.setAge(30);

//开启事务

Transaction tx = session.beginTransaction();

session.save(user);

//提交事务

tx.commit();

session.close();

 

* Hibernate常用操作

1)保存数据save

2)根据主键查询数据

get---立即加载

load---延迟加载

3)根据主键修改数据update

session.update(user);//user对象可以自己构造,也可以先查询,再修改

4)根据主键删除数据delete

session.delete(user);//user对象可以自己构造,也可以先查询,再删除

5)查询所有

String hql = "from User";

Query query = session.createQuery(hql);

List<User> userList = query.list();

 

*hibernate属性

 

hibernate.dialect    操作数据库方言

hibernate.connection.driver_class 连接数据库驱动程序

hibernate.connection.url    连接数据库URL

hibernate.connection.username  数据库用户名

hibernate.connection.password 数据库密码

hibernate.show_sql  true  在控制台上输出SQL语句

hibernate.format_sql  true   格式化控制台输出的SQL语句

hibernate.hbm2ddl.auto  create/create-drop/update/validate  DDL策略

hibernate.connection.autocommit  true 事务是否自动提交

 

* hibernate中的API

 

1Configuration

负责管理 Hibernate 的配置信息,包括如下内容:

加载 hibernate.properties 和 hibernate.cfg.xml

持久化类与数据表的映射关系(*.hbm.xml 文件)

2SessionFactory

Configuration对象根据当前的配置信息生成 SessionFactory对象

3Session---会话对象

包装的是数据库连接信息Connection

session与一级缓存相关

4Transaction

commit():提交相关联的session实例

rollback():撤销事务操作

wasCommitted():检查事务是否提交

5Query(分页)

Query query = session.createQuery(hql);

query.setFirstResult(5);//从哪开始查询

query.setMaxResults(5);//查询多少数据

6Criteria---条件查询对象

Criteria cri = session.createCriteria(User.class);

cri.add(Restrictions.ilike("name", "test"));//添加查询条件

cri.add(Restrictions.ge("age", 20));//查询age大于20

cri.addOrder(Order.asc("name"));//添加排序

List<User> userList = cri.list();

 

理解Hibernate中持久化类:POJO + 有一个hbm文件描述这个类和表的对应关系

编写规则

提供一个无参数 public访问控制符的构造器

提供一个标识属性,映射数据表主键字段

所有属性提供public访问控制符的 set  get 方法

标识属性应尽量使用基本数据类型的包装类型

不要用final修饰 (将无法生成代理对象进行优化)

 

区分自然主键和代理主键

自然主键:具有业务含有的主键

代理主键:不具有业务含有的主键(建议使用代理主键)

 

主键生成策略

1increment:自增,由hibernate框架发出SQL查询最大的idSELECT max(id) FROM Table),有线程问题

2identity:使用数据库的自增策略,mysqlDB2可以使用,Oracle不能使用

3sequence:使用数据库的序列完成自增,DB2Oracle可以使用,mysql不能使用

4native:本地策略,根据客户端使用的数据库,选择使用identitysequence(一般使用这个就可以了)

5uuid:由hibernate框架负责生成32位字符串(使用uuid做为主键有一个好处就是在数据迁移时不会影响到迁移到的数据库中的已有数据)

6assigned:手动委派


你可能感兴趣的:(Hibernate 第一天笔记)