Hibernate 入门
搭建 hibernate 环境
出于方便的考虑,建立一个 maven 项目,这样就不用考虑 jar 包问题,只需要将相应的 maven 坐标找到就可以了,以下是我演示项目 pom.xml 里的坐标
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.1.0.Final</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.5.6-Final</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>
创建实体类
这时应当注意的是,在 hibernate 中要求实体类有一个属性唯一的值,也就是数据库中的主键,因为在 hibernate 中可以自动生成表,因此要写这么一个属性。
public class User { private int uid; private String userName; private String password; private String address; } ```<br/> 以上是我的User类中的属性。<br/> ## 配置实体类和数据库表的对应关系<br/> > (1)首先创建一个xml格式的配置文件。映射配置文件名称和位置没有固定要求。 建议:在实体类所在的包里面创建,实体类名称为XXXX.hbm.xml > (2)应当配置相应的xml约束,一般是dtd格式当然还有schema格式。一般在网上都会搜的到配置文件,直接借过来用!! <br/> 以下是我的映射文件(里面有解释)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 5.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-5.0.dtd"> <hibernate-mapping> <!--第一步 首先配置类和表对应的class标签 name属性:实体类全路径 table属性:对应数据库表的名字 --> <class name="entity.User" table="t_user"> <!--第二步 配置实体类id和表对应的id,也就是所说的表的主键。 hibernate要求实体类有一个属性唯一值,即同时要求此id作为表字段的主键 name属性:实体类里面id的属性名称 column属性:生成表字段名称(可以不填,那么在生成表时会以name值作为表字段) --> <id name="uid" column="uid"> <generator class="native"></generator> </id> <!--第三步 配置其他属性和表字段对应 name属性:实体类里面id的属性名称 column属性:生成表字段名称(可以不填,那么在生成表时会以name值作为表字段) --> <property name="userName" column="userName"></property> <property name="password" column="password"></property> <property name="address" column="address"></property> </class> </hibernate-mapping>
## 创建hibernate核心的配置文件<br/> > (1)首先创建一个xml格式的配置文件。注意的是,核心配置文件的名称和位置是固定的,但在spring中映射配置文件名称和位置没有固定要求(请参照以后的spring学习笔记 ** 位置:必须在src下** ** 名称:hibernate.cfg.xml** > (2)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载 > (3)配置映射文件信息时,用\<mapping\>标签,resource应当写上映射文件的全路径,因为都在src包下,只需写不同的包名+文件名在这即为:entity/User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN"" http://hibernate.sourceforge.net/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/webtest</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- 配置hibernate信息 --> <!--输出底层sql语句--> <property name="hibernate.show_sql">true</property> <!--输出底层sql的格式语句--> <property name="hibernate.format_sql">true</property> <!-- 配置自动创建表 update的意思是没表创建,有表就更新--> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 注意! 这里配置的是数据库的方言,比如在mysql中的分页操作用到limit关键字,需要将mysql方言做如下配置 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置映射文件信息 --> <mapping resource="entity/User.hbm.xml"/> </session-factory> </hibernate-configuration>
## 实现基本操作<br/> > (1) **加载核心配置文件** > (2) **创建sessionFactory对象** > (3) **使用sessionFactory创建session对象** > (4) **开启事务** > (5) **写出具体的操作CRUD** > (6) **提交事务** > (7) **关闭资源** 如果在数据库中观察到了表的创建。表中有数据,说明配置成功。
public class Demo1 {
@Test
public void testAdd(){
//加载核心配置文件
Configuration cfg = new Configuration();
cfg.configure();
//创建 sessionFactory 对象,在此过程中,根据映射关系在数据库中创建相应的表
SessionFactory sessionFactory = cfg.buildSessionFactory();
//使用 sessionFactory 创建 session 对象
Session session = sessionFactory.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
//写出具体的操作 CRUD
User user = new User();
user.setUserName("小王");
user.setAddress("sd");
user.setPassword("123");
session.save(user);
// 提交事务
tx.commit();
//关闭资源
session.close();
sessionFactory.close();
}
}
# Hibernate配置文件详解<br/> ## hibernate映射配置文件<br/> > 1. **映射配置文件名称没有固定要求** > 2. **映射配置文件中,标签name属性值写实体类相关内容** > (1) **class标签name属性值为实体类全路径** > (2) **id标签和property标签 name属性值为实体类属性名称** > 3. **id标签和property标签,column属性可以忽略** > (1) **不写值和name属性一样** > 4. **property标签type属性,设置生成表字段类型,自动对应类型** ## hibernate核心配置文件<br/> > 1. **配置写位置要求在\<bibernate-configuration>\<session-factory>\</session-factory>\</bibernate-configuration>中** > 2. **配置三部分要求** > (1) **数据库部分必须** > (2) **hibernate部分可选** > (3) **映射文件必须** > 3. **i配置文件名称和位置是固定的** > (1) **位置,src下** > (2) **名称,hibernate.cfg.xml** # Hibernate核心API<br/> ## Configuration<br/> > 1. **代码**
Configuration cfg = new Configuration(); cfg.configure();
> 2. **会到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件加载进去** ## SessionFactory<br/> > 1. **使用configuration对象创建sessionFactory对象**
SessionFactory sessionFactory = cfg.buildSessionFactory();
> 2. **创建SessionFactory的过程中非常消耗资源** > (1) **在hibernate中,建议一个项目只创建一个sessionFactory对象(创建一个工具类)** ## Session<br/> > 1. **session类似于jdbc中的connection** > 2. **调用session对象里的不同方法进行CRUD** > (1) **添加 save 方法** > (2) **修改 update 方法** > (3) **删除 delete 方法** > (4) **根据id查询 get 方法** > 3. **session对象是单线程对象** > (1) **session对象不能共用,只能自己使用** > 4. **property标签type属性,设置生成表字段类型,自动对应类型** ## Transaction<br/> > 1. **事务对象**
Transaction tx = session.beginTransaction();
> 2. **事务提交和回滚**
tx.commit(); tx.rollback();
> 3. **事务特性(ACID)** > (1) **原子性、一致性、隔离性、持久性**
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于