Hibernate 学习笔记(一)

本贴最后更新于 2979 天前,其中的信息可能已经东海扬尘

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/> ## &nbsp;&nbsp;&nbsp;&nbsp;配置实体类和数据库表的对应关系<br/> > &nbsp;&nbsp;&nbsp;&nbsp;(1)首先创建一个xml格式的配置文件。映射配置文件名称和位置没有固定要求。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建议:在实体类所在的包里面创建,实体类名称为XXXX.hbm.xml > &nbsp;&nbsp;&nbsp;&nbsp;(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>
## &nbsp;&nbsp;&nbsp;&nbsp;创建hibernate核心的配置文件<br/> > &nbsp;&nbsp;&nbsp;&nbsp;(1)首先创建一个xml格式的配置文件。注意的是,核心配置文件的名称和位置是固定的,但在spring中映射配置文件名称和位置没有固定要求(请参照以后的spring学习笔记 **&nbsp;&nbsp;&nbsp;&nbsp;位置:必须在src下** **&nbsp;&nbsp;&nbsp;&nbsp;名称:hibernate.cfg.xml** > &nbsp;&nbsp;&nbsp;&nbsp;(2)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载 > &nbsp;&nbsp;&nbsp;&nbsp;(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>
## &nbsp;&nbsp;&nbsp;&nbsp;实现基本操作<br/> > &nbsp;&nbsp;&nbsp;&nbsp;(1) **加载核心配置文件** > &nbsp;&nbsp;&nbsp;&nbsp;(2) **创建sessionFactory对象** > &nbsp;&nbsp;&nbsp;&nbsp;(3) **使用sessionFactory创建session对象** > &nbsp;&nbsp;&nbsp;&nbsp;(4) **开启事务** > &nbsp;&nbsp;&nbsp;&nbsp;(5) **写出具体的操作CRUD** > &nbsp;&nbsp;&nbsp;&nbsp;(6) **提交事务** > &nbsp;&nbsp;&nbsp;&nbsp;(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/> ## &nbsp;&nbsp;&nbsp;&nbsp;hibernate映射配置文件<br/> > &nbsp;&nbsp;&nbsp;&nbsp;1. **映射配置文件名称没有固定要求** > &nbsp;&nbsp;&nbsp;&nbsp;2. **映射配置文件中,标签name属性值写实体类相关内容** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **class标签name属性值为实体类全路径** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **id标签和property标签 name属性值为实体类属性名称** > &nbsp;&nbsp;&nbsp;&nbsp;3. **id标签和property标签,column属性可以忽略** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **不写值和name属性一样** > &nbsp;&nbsp;&nbsp;&nbsp;4. **property标签type属性,设置生成表字段类型,自动对应类型** ## &nbsp;&nbsp;&nbsp;&nbsp;hibernate核心配置文件<br/> > &nbsp;&nbsp;&nbsp;&nbsp;1. **配置写位置要求在\<bibernate-configuration>\<session-factory>\</session-factory>\</bibernate-configuration>中** > &nbsp;&nbsp;&nbsp;&nbsp;2. **配置三部分要求** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **数据库部分必须** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **hibernate部分可选** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3) **映射文件必须** > &nbsp;&nbsp;&nbsp;&nbsp;3. **i配置文件名称和位置是固定的** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **位置,src下** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **名称,hibernate.cfg.xml** # Hibernate核心API<br/> ## &nbsp;&nbsp;&nbsp;&nbsp;Configuration<br/> > &nbsp;&nbsp;&nbsp;&nbsp;1. **代码**
Configuration cfg = new Configuration(); cfg.configure();
> &nbsp;&nbsp;&nbsp;&nbsp;2. **会到src下面找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件加载进去** ## &nbsp;&nbsp;&nbsp;&nbsp;SessionFactory<br/> > &nbsp;&nbsp;&nbsp;&nbsp;1. **使用configuration对象创建sessionFactory对象**
SessionFactory sessionFactory = cfg.buildSessionFactory();
> &nbsp;&nbsp;&nbsp;&nbsp;2. **创建SessionFactory的过程中非常消耗资源** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **在hibernate中,建议一个项目只创建一个sessionFactory对象(创建一个工具类)** ## &nbsp;&nbsp;&nbsp;&nbsp;Session<br/> > &nbsp;&nbsp;&nbsp;&nbsp;1. **session类似于jdbc中的connection** > &nbsp;&nbsp;&nbsp;&nbsp;2. **调用session对象里的不同方法进行CRUD** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **添加 save 方法** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) **修改 update 方法** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3) **删除 delete 方法** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4) **根据id查询 get 方法** > &nbsp;&nbsp;&nbsp;&nbsp;3. **session对象是单线程对象** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **session对象不能共用,只能自己使用** > &nbsp;&nbsp;&nbsp;&nbsp;4. **property标签type属性,设置生成表字段类型,自动对应类型** ## &nbsp;&nbsp;&nbsp;&nbsp;Transaction<br/> > &nbsp;&nbsp;&nbsp;&nbsp;1. **事务对象**
Transaction tx = session.beginTransaction();
> &nbsp;&nbsp;&nbsp;&nbsp;2. **事务提交和回滚**
tx.commit(); tx.rollback();
> &nbsp;&nbsp;&nbsp;&nbsp;3. **事务特性(ACID)** > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) **原子性、一致性、隔离性、持久性**
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 721 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...