zoukankan      html  css  js  c++  java
  • hibernate框架学习第一天:hibernate介绍及基本操作

    框架
    辅助开发者进行开发,半成品软件,开发者与框架进行合作开发

    Hibernate3
    Hibernate是一种基于Java的轻量级的ORM框架
    基于Java:底层实现是Java语言,可以脱离WEB,在纯JAVA环境下运行
    轻量级:与重量级比对,消耗资源比较小,运算速度比较快
    ORM:(ORMapping:Object Relation Mapping)对象关系映射
    O:Java对象
    R:关系型数据库表
    M:映射(map:地图 映射)

    对象与表的对应关系
    1.类与表对应
    2.类的属性与表的字段对应
    3.类实例(对象)与表记录对应
    4.一个类可以对应多个表,一个表可以对应多个类
    5.类的属性个数与表的字段个数无需完全对应
    类中有5个,表中有5个,只对应3个
    6.类的属性名称与表的字段名称无需完全对应
    7.对应关系中的数据类型必须是可转化的
    8.表与表的关系转化成对象与对象的关系

    Java操作数据库:JDBC+SQL
    Hibernate可以帮助开发者实现自动的JDBC+自动的SQL语句
    工程:
    表现层
    业务层(逻辑层)
    数据层
    Hibernate是一种数据层解决方案

    数据层解决方案了解:
    JDBC
    JPA(Java Persistence API )
    Hibernate实现JPA
    iBatis/MyBatis
    其他
    Apache
    Spring JDBCTemplate、HibernateTemplate、等等
    Toplink

    Hibernate有什么东西
    系统架构图:描述一个技术中所有的相关模块,以及模块与模块之间的关系(上层依赖于下层)
    图一:
    应用程序 Hibernate 数据库
    APP依赖H3 H3依赖DB
    H3:需要进行配置
    映射:需要使用XML格式
    持久化对象:出现在APP于H3间,起桥梁的作用,连接APP与H3
    图二:
    H3裂变成5块
    SessionFactory制作Session
    JDBC,JNDI,JTA??
    APP中包含一种叫做瞬时对象
    APP与H3关联靠Session进行
    图三:
    H3依赖别人实现的JDBC,JTA,JNDI
    H3存在有事务及事务工厂
    H3的连接需要别人提供

    -----------------------------------------------------------------
    课程Hibernate3.6.10版本
    下载Hibernate
    http://sourceforge.net/projects/hibernate/files/hibernate3/
    JBOSS
    JBOSS服务器
    Hibernate
    jbpm

    H3目录结构
    documentation:帮助文档
    lib:开发使用jar包
    hibernate3.jar:核心jar包
    project:源码
    hibernate-testing.jar:测试包

    H3开发jar包
    一共9个+2个日志包,共11个
    日志:
    slf4j:简单日志门面
    log4j:略
    开发使用日志技术:
    slf4j整合log4j的jar包:slf4j-log4j12-1.7.2.jar
    log4j包:log4j-1.2.16.jar

    Hibernate开发
    O:对象,也就是封装数据的模型(开发者完成)
    R:关系型数据库表(开发者完成)
    M:映射关系(开发者完成)

    1.创建工程
    2.导入jar包
    3.做表(R)
    CREATE TABLE `tbl_user` (
    `uuid` varchar(10) NOT NULL,
    `userName` varchar(30) NOT NULL,
    `age` int(3) NOT NULL,
    `address` varchar(30) NOT NULL,
    PRIMARY KEY (`uuid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    4.做模型类(O)
    UserModel.class
    private String uuid;
    private String userName;
    private Integer age;
    private String address;
    1.提供无参可访问的构造方法
    2.声明一个主键属性(uuid)
    3.声明其他的属性
    4.提供对应的访问器(getter/setter)
    5.映射文件(R)
    在Model对应的目录下创建一个文件,名:****Model.hbm.xml
    去资源中查找*.hbm.xml
    把内容复制到对应的文件中
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
    'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'>
    <hibernate-mapping>
    <!-- name写全路径模型名,table写DB中表名 -->
    <class name="cn.itcast.h3.helloworld.vo.UserModel" table="tbl_user">
    <!-- 模型中的主键名 -->
    <id name="uuid">
    <!-- assigned -->
    <generator class="assigned" />
    </id>
    <!-- 将模型中的所有属性都写上,使用name -->
    <property name="userName"/>
    <property name="age"/>
    <property name="address"/>
    </class>
    </hibernate-mapping>
    6.系统配置文件
    src/hibernate.properties(早期)
    src/hibernate.cfg.xml(主流)
    在src目录下创建 hibernate.cfg.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>
    <!-- 数据库连接的配置 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/h3</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <!-- 可选配置 -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <!-- 资源注册 -->
    <mapping resource="cn/itcast/h3/helloworld/vo/UserModel.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>
    8.客户端
    //1.加载配置文件hibernate.cfg.xml,得到一个配置对象
    Configuration conf = new Configuration().configure();
    //2.由配置创建一个SessionFactory
    SessionFactory sf = conf.buildSessionFactory();
    //3.由SessionFactory得到Session
    Session s = sf.openSession();
    //4.由Session对象获取事务对象Transaction
    Transaction t = s.beginTransaction();
    //5.完成任务
    //5.1创建一个要存储的对象
    UserModel um = new UserModel();
    um.setUuid("1");
    um.setUserName("李若亮");
    um.setAge(34);
    um.setAddress("传智播客");
    //5.2保存
    s.save(um);

    //6.提交事务
    t.commit();
    //7.关闭Session
    s.close();
    //8.关闭SessionFactory(略)
    sf.close();

    总结:
    1.导包
    2.ORM:O自己做UsreModel R自己做tbl_user M做映射文件hbm.xml
    3.系统配置:cfg.xml
    4.客户端

    ------------------------------------------------
    基本操作
    1.添加数据
    save(obj) 返回的是添加的对象的uuid
    2.修改数据
    update(obj)
    3.删除数据
    delete(obj)
    4.查单个数据
    get(要查询的模型类.class,主键)
    load(要查询的模型类.class,主键)
    返回一个对象,该对象使用反射思想已经被包装成了要查询的模型类
    5.查全部数据
    1.Query
    使用Query进行查询,Query对象需要依赖Session对象创建
    String hql = "from UserModel";
    Query q = s.createQuery(hql);
    查询完毕,可以将查询结果直接以集合的形式展示
    q.list();
    得到一个查询结果(已经被封装成了Model)的集合
    2.SQLQuery查询
    使用SQLQuery查询,SQLQuery对象需要依赖Session对象创建
    SQLQuery q = s.createSQLQuery(sql);
    查询完毕,可以将查询结果直接以集合的形式展示
    q.list();
    结果是将每行查询的数据包装成了一个对象数组Object[]
    每个数组中包装是当前查询的每个字段的内容

  • 相关阅读:
    Scheduler踩坑记录
    关于RedisTemplate的map存储踩坑记录
    关于HashMap的加载因子相关理解
    Mybatis 分页插件PageHelper 遇坑
    Linux 下 Mysql忘记密码重置
    Eclipse MAT和jvisualvm分析内存溢出
    使用jdk自带工具jvisualvm 分析内存dump文件
    EUREKA 删除 or 强制下线/上线 实例
    Idea 远程调试jenkins 项目
    spring 事务传播行为类型
  • 原文地址:https://www.cnblogs.com/xyhero/p/9348814.html
Copyright © 2011-2022 走看看