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();
}
}

hibernate学习之一 框架配置的更多相关文章

  1. hibernate学习——Set集合配置

    Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VAR ...

  2. 学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法

    配置完了,运行,数据写入不到数据库中,就应该想UserAction 中的handleRequest()方法有没有进去,然后就设置断点.如果发现程序没有进去,就再想办法进去.

  3. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  4. 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置

    在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...

  5. 跟着刚哥学习Spring框架--事务配置(七)

    事务 事务用来保证数据的完整性和一致性. 事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.1.原子性(atomicity).一个事务是一个不可分割的工作单位,事务 ...

  6. 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化

    准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...

  7. Hibernate框架--配置,映射,主键

    SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,    基于持久层的框架(数据访问层使用)! Spring,   创建对象处理对象的依赖关系以及框架整合! Da ...

  8. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...

  9. 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

    Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ cl ...

随机推荐

  1. AtCoder Grand Contest 005

    AtCoder Grand Contest 005 A - STring 翻译 给定一个只包含\(ST\)的字符串,如果出现了连续的\(ST\),就把他删去,然后所有位置前移.问最后剩下的串长. 题解 ...

  2. 【Cf Edu #47 F】Dominant Indices(长链剖分)

    要求每个点子树中节点最多的层数,一个通常的思路是树上启发式合并,对于每一个点,保留它的重儿子的贡献,暴力扫轻儿子将他们的贡献合并到重儿子里来. 参考重链剖分,由于一个点向上最多只有$log$条轻边,故 ...

  3. response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别

    转发方式:request.getRequestDispatcher().forward(); 重定向方式:response.sendRedirect();  下面是HttpServletRespons ...

  4. Web Service(上)

    1.XML CDATA指不应由XML解析器进行解析的文本数据. 在XML元素中,<和&是非法的.解析器会把字符<解释为新元素的开始,把字符&解释为字符实体的开始. 某些文本 ...

  5. 2017 3 11 分治FFT

    考试一道题的递推式为$$f[i]=\sum_{j=1}^{i} j^k \times (i-1)! \times \frac{f[i-j]}{(i-j)!}$$这显然是一个卷积的形式,但$f$需要由自 ...

  6. LGP4588[JSOI2018]扫地机器人

    题解 需要先说明一点东西: 1 同一副对角线方向相同,共有$gcd(n,m)$条不同的副对角线,机器人的行为是一个$gcd(n,m)$的循环:: 如果左上方是$(1,1)$,容易看出所有的路径是从左或 ...

  7. 牛客网NOIP赛前集训营-普及组(第二场)

    T1 牛牛刚学习了输入输出,他遇到了一道这样的题目. 输入2个整数a和b 保证输入的a和b在long long范围之内,即满足 -9223372036854775808 <= a, b < ...

  8. mac下Android Studio使用及快捷键

    1.Android Studio使用及快捷键 (1)我们新建一个项目后进入界面,左侧可以选择Project或Android,一般选Project会比较习惯以前eclipse的显示 (2)点击左上角An ...

  9. 【题解】【雅礼集训 2017 Day5】远行 LOJ 6038 LCT

    Prelude 快要THUWC了,练一练板子. 传送到LOJ:o(TヘTo) Solution 首先有一条定理. 到树中任意一点的最远点一定是直径的两个端点之一. 我也不会证反正大家都在用,似乎可以用 ...

  10. Jenkins+Maven+SVN

    准备环境: CentOS7 JDK1.7.9.0_79 Maven3.3.9 Jenkins2.5.0 1.配置jdk环境变量 2.安装maven(否则在创建job时没有maven选项) unzip ...