首先分析一下什么是框架?
框架就是一个半成品项目,我们书写项目可以从半成品开始写。
这样能够大大提高开发效率。
不必纠结于框架本身的实现,只要学会如何使用这个框架即可。
复习一下什么是Hibernate框架?
这个框架应用与dao层。
ORM:Object Relactional Mapping
实体类和数据库表之间建立了联系,通过操作对象,直接对数据库进行修改。
Hibernate框架搭建
第一步:导包
1、hibernate包下载地址
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
2、Ant包下载地址:
http://apache.130th.net/ant/binaries/apache-ant-1.6.1-bin.zip
MySQL JDBC Driver下载地址
http://dev.mysql.com/downloads/connector/j/3.0.html
PostgreSQL JDBC Driver下载地址
http://jdbc.postgresql.org/download.html
MS-SQL Server JDBC Driver下载地址
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&displaylang=en
导包步骤
2、准备一个实体类
(1)所有的属性应该设置为私有,并添加get和set方法
(2)构造函数要么不写,如果要写至少要写两个(必须包含一个空的)
(3)属性的类型应是包装类型
package cn.hd.bean;
public class User {
private Integer id;
private String name;
private Integer age;
private String sex;
private Integer balance;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getBalance() {
return balance;
}
public void setBalance(Integer balance) {
this.balance = balance;
}
public User(Integer id, String name, Integer age, String sex, Integer balance) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.balance = balance;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", balance=" + balance +
'}';
}
}
3准备数据库
(1)数据库必须由我们自己建,数据库表,可以由hibernate自动创建,如果手动创建,表中的字段和实体类一一对应。
4 创建实体类和数据表之间的映射配置文件
创建一个 实体类名 + .hbm + .xml
建议这个文件的目录和实体类在同一个目录下。
<hibernate-mapping>
<class name="cn.hd.bean.User" table="t_user">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="age" column="age"></property>
<property name="sex" column="sex"></property>
<property name="balance" column="balance"></property>
</class>
</hibernate-mapping>
5.书写核心配置文件
名字必须是:hibernate.cfg.xml
文件的位置必须放在src目录下
导入约束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
书写配置
<hibernate-configuration>
<session-factory>
<!--必须 数据库连接属性-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql_sql">true</property>
<!--自动创建表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--事务:4-->
<property name="hibernate.connection.isolation">4</property>
<mapping resource="cn/hd/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
6.书写Servlet
package cn.hd.test;
import cn.hd.bean.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Demo {
public static void main(String[] args) {
//读取配置文件
Configuration cfg = new Configuration();
cfg.configure();//读取配置
//创建sessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
//获得一个session对象
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
User user = new User();
user.setName("牧尘");
user.setAge(20);
user.setSex("男");
user.setBalance(15000);
session.save(user);
//提交事务
transaction.commit();
//释放资源
session.close();
sessionFactory.close();
}
}
配置文件详解
1、映射文件
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 下面class中的类的路径,下面的class name 属性可以缩写 -->
<hibernate-mapping package="cn.hd.bean">
<!-- 映射类和数据库表之间的关系 -->
<!-- name属性是实体类名 写完整路径名 -->
<!-- table属性 数据库表名字 -->
<class name="User" table="t_user">
<!-- 映射文件中必须拥有 主键id -->
<id name="id" column="id">
<!-- 主键生成策略
identity:mysql自动递增
increment:当前最大序号+1
sequence:Oracle数据库中的自动递增
native :自动递增(3和1)
assigned:
uuid:
-->
<generator class="native"></generator>
</id>
<!-- 基本属性 在这里可以设置数据库的属性
字段名 类型 长度 不为空 默认值
-->
<property name="name" column="name"></property>
<property name="age" column="age"></property>
<property name="sex" column="sex"></property>
<property name="balance" column="balance"></property>
</class>
</hibernate-mapping>
2、核心配置文件详解
名字和位置都必须按照规定来。
<hibernate-configuration>
<session-factory>
<!--必须 数据库连接属性-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 方言 必须要设置-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 在控制台展示SQL语句 不必须-->
<property name="hibernate.show_sql">true</property>
<!-- SQL语句格式化输出 -->
<property name="hibernate.format_sql">true</property>
<!-- 自动创建表
1、update 如果映射文件和数据库保持一致就不修改,如果没有就自动创建表
2、crate 每次执行都会重新创建一个表(覆盖)
3、create_drop 先将原来的表删除,然后重建
4、validate 只做校验
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 事务的隔离级别:
1
2
4
8
脏读
幻读
不可重复读
串行化
-->
<property name="hibernate.connection.isolation">4</property>
<!-- 扫描影射文件
class: 影射文件和配置文件名字和路径必须保持一致
mapping:扫描该包下的所有配置文件
resource: 指定某个确定XML配置文件
-->
<mapping resource="cn/hd/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>