Java EE 三层结构
- web 层:struts2
- service 层:spring
- dao 层:hibernate
Hibernate 配置文件
- 映射文件的名称和位置没有固定要求
- class 标签 name 属性值实体类全路径
- id 标签和 property 标签 name 属性值 实体类名称
- id 标签和 property 标签,column 属性可以省略
- property 标签 type 属性,设置生成表字段类型,自动对应类型(可以不做设置)
//实体类User.java
public class User {
private int uid;
private String username;
private String password;
private String address;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
//映射文件,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>
<class name="com.eric.demo.entity.User" table="t_user">
<id name="uid" column="uid">
<generator class="native"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
- 数据库部分必须配置
- hibernate 部分可选
- 映射文件必须配置
- 核心配置文件名称和位置固定(hibernate.cfg.xml、位置在 src 下)
- 该文件配置完成后,很少修改
<?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>
<session-factory>
<!-- 第一部分,配置数据库信息(必须) -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">0314</property>
<!-- 第二部分,配置hibernate信息(可选) -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.fromat_sql">true</property>
<!-- 自动生成表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置数据库方言
让hibernate框架识别不同的数据库所持有的语句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 第三部分,把映射文件放到核心文件中(必须) -->
<mapping resource="com/eric/demo/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Hibernate 核心 api 的使用
- 到 src 下找到名称为 hibernate.cfg.xml 配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
Configuration cfg = new Configuration();
cfg.configure();
- 使用 Configuration 对象创建 SessionFactory 对象
- 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建。
<property name="hibernate.hbm2ddl.auto">update</property>
- 创建 SessionFactory 过程中,这个过程需要创建表,这个过程很耗时
- 一个项目只创建一个 SessionFactory 对象。
- 具体优化实现
- 写工具类,写静态代码块实现
public class HibernateUtils {
private static final Configuration cfg;
private static final SessionFactory sessionFactory;
static{
// 加载核心配置文件
cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
// 获取SessionFactory的引用
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
- 类似于 jdbc 中的 connection
- 调用 session 中的不同方法实现 crud 操作
- 添加 save
- 修改 update
- 删除 delete
- 根据 id 查询 get
- session 对象是单线程对象:session 不能共用,只能自己使用
- 开启事务
Transaction tx = session.beginTransaction();
- 事务的提交 tx.commit()
- 事务的回滚 tx.rollback()
- 事务的四个特性
- 原子性:一组操作,一个失败相当于所有失败
- 一致性:操作之前之后,数据总量没变
- 隔离性:多个操作同时操作同一条记录,互不影响
- 持久性:提交数据到数据库保存
解决 MyEclipse 写配置文件没有提示的问题
- 若是电脑可以上网,配置的约束可以有提示功能
- 把约束文件引入到 MyEclipse 中
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于