hibernate 框架
1、hibernate框架应用在javaee三层结构中的dao层框架
2、好处就是不需要写复杂jdbc代码,不需要sql语句实现
3、是开源的轻量级框架
hibernate使用orm思想对数据库进行crud操作, orm - object relational mapping, 对象关系映射,让实体类和数据库表一一对应,实体类属性与表里的字段一一对应。
对数据库表进行操作,不需要对数据库操作,直接对实体类进行操作即可完成。它与jdbc的对比关系如下图
MAVEN导包配置
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency>
搭建hibernate步骤
第一步,创建实体类
public class LoginInfo { //对应数据库的主键,值唯一 private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } 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; } }
注意:如果实体类对应的表不存在,hibernate可以自动创建数据表
第二步 配置数据表与实体类的映射关系
新建一个配置文件loginInfo.hbm.xml. 文件名字与位置没有固定,建议放在实体类所在包,名字样式为xxx.hbm.xml.在开始配置前,首先引入约束,约束文件为 http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd 点击下载MappingDTD文件
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
本例子中logininfo.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 : 实体类名 table :表名--> <class name="com.blueto.hibernate.LoginInfo" table="t_logininfo"> <id name="id" column="id"> <!--主键 自动增长--> <!--<generator class="native"></generator>--> <!--uuid方式生成主键--> <generator class="uuid"></generator> </id> <!--name 实体类属性, column 表字段名--> <property name="username" column="username"></property> <property name="password" column="password"></property> </class> </hibernate-mapping>
第三步 创建hibernate的核心配置文件
与mapping文件不一样,该配置文件名与位置必须固定,文件名只能为hibernate.cfg.xml, 并且只能放在目录src下面
配置分三小步骤
1)首先引入约束 http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd, 点击下载DTD
2)配置数据库信息
3)配置hibernate信息
4)把映射配置文件(上一节的xxx.hbm.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> <session-factory> <!--1) 配置数据库信息--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///t_logininfo</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- 2) 配置hibernate信息,可选--> <!--输出底层sql语句--> <property name="hibernate.show_sql">true</property> <!--输出sql格式--> <property name="hibernate.format_sql">true</property> <!--如果没有表,则创建,有则更新--> <property name="hibernate.hbm2ddl.auto">update</property> <!--配置数据库方言--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 3) 把映射配置文件放到核心配置文件中--> <mapping resource="com/blueto/hibernate/logininfo.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
如果从没有接触过hibernate, 那怎么知道里面怎么配置啊?如果记不住配置内容,可以打开hibernate.properties文件查看里面的配置属性,找到对应的数据库按照properties里定义配置就好了。方便理解,上一张它们间的关系图
我使用的是mysql数据库,其他数据库配置同样可以参考hibernate.properties文件配置(点击下载hibernate.properties)
第四步 数据库的CRUD操作
public class HiberDemo {
@Test
public void testAdd(){
// step 1 : 加载hibernate核心配置文件
Configuration cfg = new Configuration();
cfg.configure();
//setp 2 : 创建SessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
//step 3 : 创建session对象
Session session = sessionFactory.openSession();
//step 4 开启事务
Transaction tx = session.beginTransaction();
//step 5 crud
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUsername("new name");
//写入数据表中,如果表不存在,则创建表,
// 前提是要在核心配置文件中配置 : <property name="hibernate.hbm2ddl.auto">update</property>
session.save(loginInfo);
//step 6 提交事务
tx.commit();
//step 7 关闭资源
session.close();
sessionFactory.close();
}
}