标签:sch 代码 sql new 添加 日本 pen 自动 mode
Hibernate概述
什么是框架
1 写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,少写一部分代码实现功能
什么是hibernate框架(重点)
1 hibernate框架应用在javaee三层结构中 dao层框架
2 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂jdbc代码了,
不需要写sql语句实现
3 hibernate开源的轻量级的框架
4 hibernate版本
Hibernate3.x
Hibernate4.x
Hibernate5.x(学习)
lib:hibernate相关jar包
1 hibernate使用orm思想对数据库进行crud操作
2 在web阶段学习 javabean,更正确的叫法 实体类
3 orm:object relational mapping,对象关系映射 文字描述: (1)让实体类和数据库表进行一一对应关系 让实体类首先和数据库表对应 让实体类属性 和 表里面字段对应 (2)不需要直接操作数据库表,而操作表对应实体类对象
画图描述:
|
第一步 导入hibernate的jar包
因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包
不要忘记还有mysql驱动的jar包
第二步 创建实体类
使用hibernate时候,不需要自己手动创建表,hibernate帮把表创建
第三步 配置实体类和数据库表一一对应关系(映射关系)
使用配置文件实现映射关系
(1)创建xml格式的配置文件
- 映射配置文件名称和位置没有固定要求
- 建议:在实体类所在包里面创建,实体类名称.hbm.xml
(2)配置是是xml格式,在配置文件中首先引入xml约束
- 学过约束dtd、schema,在hibernate里面引入的约束dtd约束
(3)配置映射关系
1 <hibernate-mapping> 2 <!-- 1 配置类和表对应 3 class标签 4 name属性:实体类全路径 5 table属性:数据库表名称 6 --> 7 <class name="cn.itcast.entity.User" table="t_user"> 8 <!-- 2 配置实体类id和表id对应 9 hibernate要求实体类有一个属性唯一值 10 hibernate要求表有字段作为唯一值 11 --> 12 <!-- id标签 13 name属性:实体类里面id属性名称 14 column属性:生成的表字段名称 15 --> 16 <id name="uid" column="uid"> 17 <!-- 设置数据库表id增长策略 18 native:生成表id值就是主键自动增长 19 --> 20 <generator class="native"></generator> 21 </id> 22 <!-- 配置其他属性和表字段对应 23 name属性:实体类属性名称 24 column属性:生成表字段名称 可以任意命名 但是一般让它实体类中的属性名 称一样 25 --> 26 <property name="username" column="username"></property> 27 <property name="password" column="password"></property> 28 <property name="address" column="address"></property> 29 </class> 30 </hibernate-mapping>
第四步 创建hibernate的核心配置文件
(1)核心配置文件格式xml,但是核心配置文件名称和位置固定的
- 位置:必须src下面
- 名称:必须hibernate.cfg.xml
(2)引入dtd约束
(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
第一部分: 配置数据库信息 必须的
第二部分: 配置hibernate信息 可选的
第三部分: 把映射文件放到核心配置文件中
实现添加操作
第一步 加载hibernate核心配置文件
第二步 创建SessionFactory对象
第三步 使用SessionFactory创建session对象
第四步 开启事务
第五步 写具体逻辑 crud操作
第六步 提交事务
第七步 关闭资源
1 @Test 2 public void testAdd() { 3 // 第一步 加载hibernate核心配置文件 4 // 到src下面找到名称是hibernate.cfg.xml 5 //在hibernate里面封装的对象 6 Configuration cfg = new Configuration(); 7 cfg.configure(); //这两行表示加载配置文件 8 //执行的过程:到src下面找到名称是hibernate.cfg.xml 把该文件放入这个//对象中 然后调用方法 执行加载配置文件 9 10 // 第二步 创建SessionFactory对象 11 //读取hibernate核心配置文件内容,创建sessionFactory 12 //在这过程中,根据映射关系,在我们配置的数据库里边 把表创建 13 SessionFactory sessionFactory = cfg.buildSessionFactory(); 14 15 // 第三步 使用SessionFactory创建session对象 16 // 类似于连接(可认为是和数据库建立的一个连接) 17 Session session = sessionFactory.openSession(); 18 19 // 第四步 开启事务 20 Transaction tx = session.beginTransaction(); 21 22 // 第五步 写具体逻辑 crud操作 23 //添加功能 24 User user = new User(); 25 user.setUsername("小王"); 26 user.setPassword("250"); 27 user.setAddress("日本"); 28 //调用session的方法实现添加 29 session.save(user); 30 31 // 第六步 提交事务 32 tx.commit(); 33 34 // 第七步 关闭资源 35 session.close(); 36 sessionFactory.close(); 37 }
看到效果:
(1)是否生成表
(2)看表是否有记录
1 package org.model; 2 3 public class User { 4 private int uid; 5 private String username; 6 private String password; 7 private String address; 8 public int getUid() { 9 return uid; 10 } 11 public void setUid(int uid) { 12 this.uid = uid; 13 } 14 public String getUsername() { 15 return username; 16 } 17 public void setUsername(String username) { 18 this.username = username; 19 } 20 public String getPassword() { 21 return password; 22 } 23 public void setPassword(String password) { 24 this.password = password; 25 } 26 public String getAddress() { 27 return address; 28 } 29 public void setAddress(String address) { 30 this.address = address; 31 } 32 33 }
继续在该包下创建映射配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <!--1.配置类和表的对应关系 name属性 :类的全路径 table:是数据库中的表名称 --> 7 <class name="org.model.User" table="t_user"> 8 <!-- 2.hibernate要求属性有一个属性唯一值 9 hinernate要求表中有一个字段 作为唯一值 10 name:实体中的id属性的名称 column:表中的主键列名称 一般和实体类中的名称一样 但是不一样也可以--> 11 <id name="uid" column="uid"> 12 <!-- 主键生成策略 --> 13 <generator class="native"></generator> 14 </id> 15 <property name="username" column="username"></property> 16 <property name="password" column="password"></property> 17 <property name="address" column="address"></property> 18 </class> 19 </hibernate-mapping>
在src下面创建核心配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <!--1. 配置数据库信息 --> 8 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 9 <property name="hibernate.connection.username">root</property> 10 <property name="hibernate.connection.password">jay571018</property> 11 <property name="hibernate.connection.url">jdbc:mysql:///hibernate1_demo1</property>
<!--<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate1_demo1</property> 上句代码和此句一样 多出了/表示是 本地的3306端口-->
12 13 <!--2. 配置hibernate信息 可选的 --> 14 <!-- 自动建立表 --> 15 <property name="hibernate.hbm2ddl.auto">update</property> 16 <!-- 控制台打印底层sql语句 --> 17 <property name="show_sql">true</property> 18 <!-- 格式化控制台打印的sql语句 --> 19 <property name="format_sql">true</property> 20 21 <!-- 定义方言 --> 22 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 23 24 <!--3. 把映射文件放到核心配置文件中 resource属性:给出关系映射文件的路径--> 25 <!-- 类的全路径 和文件的全路径是不同的 user类的全路径是:org.model.User User.hbm.xml文件的全路径是: 26 /Hibernate1_Demo1/src/org/model/User.hbm.xml 但是因为核心配置文件的位置是在src下 所以/org/model/User.hbm.xml即可 27 ctrl单击 如果到达指定的文件 说明路径配置正确--> 28 <mapping resource="org/model/User.hbm.xml"/> 29 </session-factory> 30 </hibernate-configuration>
测试程序:
1 package org.testdemo; 2 import org.hibernate.Session; 3 import org.hibernate.SessionFactory; 4 import org.hibernate.Transaction; 5 import org.hibernate.cfg.Configuration; 6 import org.junit.Test; 7 import org.model.User; 8 9 public class TestDemo { 10 @Test 11 public void test() { 12 13 // 第一步 加载hibernate核心配置文件 14 Configuration config=new Configuration(); 15 config.configure(); 16 17 // 第二步 创建SessionFactory对象 18 SessionFactory sessionfactory=config.buildSessionFactory(); 19 20 // 第三步 使用SessionFactory创建session对象 21 //注意这里的session和javaweb 22 Session session=sessionfactory.openSession(); 23 24 // 第四步 开启事务 25 Transaction tran=session.beginTransaction(); 26 27 // 第五步 写具体逻辑 crud操作 28 //hibernate对原始jdbc进行了封装,对数据库的操作通过对象关系映射变为对实体类的操作 29 User u=new User(); 30 u.setUsername("jay"); 31 u.setPassword("123"); 32 u.setAddress("台湾"); 33 session.save(u); 34 // 第六步 提交事务 35 tran.commit(); 36 // 第七步 关闭资源 37 session.close(); 38 sessionfactory.close(); 39 } 40 }
本程序在运行之前只创建了数据库hibernate1_demo1
运行程序之后,hibernate根据配置文件中的信息,帮我们创建出了表 并且表中也有了user这个对象的数据
控制台打印:
1 Hibernate: 2 insert 3 into 4 t_user 5 (username, password, address) 6 values 7 (?, ?, ?)
完成了数据的保存。
注意:
以上3个文件在hibernate的jar包中都可以搜索到
第一个文件:核心配置文件中的属性的值 都可以在该文件中找到
建立表的属性:
数据库配置属性:
核心配置文件中引入的约束在第二个文件中可以找到
对象关系映射文件中引入的约束在第三个文件中可以找到
参考视频:http://v.itcast.cn/course/203.html
支持大家转载,但请注明原创链接:http://www.cnblogs.com/Joke-Jay/p/6517021.html
查看更多随笔:http://www.cnblogs.com/Joke-Jay/
标签:sch 代码 sql new 添加 日本 pen 自动 mode
原文地址:http://www.cnblogs.com/Joke-Jay/p/6517021.html