Java Web之Hibernate框架

本文详细介绍了Hibernate框架,包括其定义、开发步骤、优缺点等,并对比了MyBatis框架,帮助读者理解Hibernate如何简化数据库操作。

          Java Web框架之Hibernate

 

1. Hibernate的定义:

    Hibernate是一个基于JDBC的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO层编码工作。Hibernate         对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 

    在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。 

 

2. Hibernate的开发步骤:

1.创建持久化类

2.创建对象-关系映射(ROM)文件

3.创建Hibernate配置文件

4.通过Hibernate API编写访问数据库的代码

               

 

 

1.创建持久化类:

  /**
 * 实体
 */
public class User {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "[User: id=" + id + ", name=" + name + "]";
    }

}

 

2. 创建对象-关系映射文件*.hbm.xml:

 (Hibernate之所以能够智能地判断实体类和数据表之间的对象关系,就是因为有映射文件)

<hibernate-mapping>

<!-- 实体类class和数据库表table的映射 -->
<class name="com.ljh.hibernate.pojo.User" table="t_user">

<!--
id标签用来映射主键字段
name属性表示类的属性
column属性表示表的字段
 -->
<id name="usercode" column="usercode" length="20">

<!-- 主键生成策略
native 表示根据连接数据库的表的主键生成方式来生成主键值
  mysql数据采用的auto_increment属性来生成主键值,一般主键字            段需要设置的类型为int
assigned 表示主键由用户自己维护。
-->

<generator class="assigned"/>
</id>

<!-- 普通属性的映射
name 表示类中的属性名称  
column 表示表中的列名称   
            column属性不指定会采用默认的值,默认名称与属性名称一致
length 表示属性的字符长度
not-null 表示属性值不能为null
 -->

<property name="userpswd" column="userpswd" type="java.lang.String" length="20" not-null="true"/>
<property name="username" />
<property name="regdate" length="19"/>
<property name="orgtype" length="1"/>
</class>
</hibernate-mapping>

 

3. 创建Hibernate配置文件hibernate.cfg.xml:(在src目录下)

<hibernate-configuration>
    <session-factory name="foo">

        <!-- 1. 配置数据库信息 -->
        <!-- 方言(连接的数据库类型) -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql:///hibernate_20160926</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">yezi</property>

        <!-- 2. 其他配置 -->
        <!-- 显示生成的SQL语句 -->
        <property name="hibernate.show_sql">true</property>

        <!-- 3. 导入映射文件 -->
        <mapping resource="cn/itcast/a_helloworld/User.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

 

 

4.  通过Hibernate API编写访问数据库的代码:

编程步骤:

  1. 获取Configuration对象。
  2. 获取SessionFactory对象。
  3. 获取Session,打开事务Hibernate对JDBC进行了一种包装,提供了另外一套API来操作数据,其中与数据直接打交道的是Session,它是Hibernate的一级缓存,保持着应用程序与数据库之间的连接,通过它保持内存与数据库之间的数据同步。
  4. 用面向对象的方式操作数据库。
  5. 关闭事务,关闭Session。

 

public class App {

    private static SessionFactory sessionFactory;

    static {
        Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
        sessionFactory = cfg.buildSessionFactory(); // 根据配置生成Session工厂
    }

    @Test
    public void testSave() {
        User user = new User();
        user.setName("张三");

        // 保存
        Session session = sessionFactory.openSession(); // 打开一个新的Session
        Transaction tx = session.beginTransaction(); // 开启事务

        session.save(user);

        tx.commit(); // 提交事务
        session.close(); // 关闭Session,释放资源(不一定是真正的关闭)
    }

    @Test
    public void testGet() {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();

        User user = (User) session.get(User.class, 1); // 获取?
        System.out.println(user);

        tx.commit();
        session.close();
    }
}

注意:Session的管理,Spring会帮助关闭的

  这样一看我们的方法写的代码也是挺多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。其实真正的开发中,我们会把这些对象,事务的操作交给框架来管理,我们需要做的就是持久化操作的那些代码,是非常少的。

 

5. Hibernate的优点、缺点:

优点:

  1. 轻量级的ORM框架
  2. 对JDBC进行很好的封装,使用ORM映射,可以通过面向对象的方式操作数据库
  3. 提供了缓存机制,可以提高效率

 缺点:如果对大量的数据进行频繁的操作,性能效率低,不如直接使用JDBC。

 

6. ORM(object Relation Mapping)对象关系数据库的映射:

这是Hibernate框架的重点,也就是说我们程序中的实体(bean,这里也叫POJO)和数据库中的表进行映射。Java类型和sql类型映射,面向对象设计和关系型数据库设计的映射,从而我们只需要把更多的精力放在业务中。

 

7.  MyBatis和Hibernate的区别

 1、Hibernate 是一个标准的ORM框架(对象关系映射框架),不需要程序写sql,sql语句自动生成,对sql语句进行优化、修改          比较困难。全自动的、完全面向对象的持久层框架。

 2、MyBatis专注于sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。是一个不完全的ORM框架,虽然程序员自          己写sql,MyBatis也可以实现映射(输入映射,输出映射)半自动化的持久层框架。

  3、Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护sql和结果映射。

  4、Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

  5、Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同sql。

   6、Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

   7、MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

胚胎实例分割数据集 一、基础信息 • 数据集名称:胚胎实例分割数据集 • 图片数量: 训练集:219张图片 验证集:49张图片 测试集:58张图片 总计:326张图片 • 训练集:219张图片 • 验证集:49张图片 • 测试集:58张图片 • 总计:326张图片 • 分类类别: 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务。 • 数据格式:图片来源于相关研究领域,格式为常见图像格式,细节清晰。 二、适用场景 • 胚胎发育AI分析系统:构建能够自动分割胚胎实例的AI模型,用于生物学研究中的形态变化追踪和量化分析。 • 医学与生物研究:在生殖医学、遗传学等领域,辅助研究人员进行胚胎结构识别、分割和发育阶段评估。 • 学术与创新研究:支持计算机视觉与生物医学的交叉学科研究,推动AI在胚胎学中的应用,助力高水平论文发表。 • 教育与实践培训:用于高校或研究机构的实验教学,帮助学生和从业者掌握实例分割技术及胚胎学知识。 三、数据集优势 • 精准与专业性:实例分割标注由领域专家完成,确保胚胎轮廓的精确性,提升模型训练的可靠性。 • 任务专用性:专注于胚胎实例分割,填补相关领域数据空白,适用于细粒度视觉分析。 • 格式兼容性:采用YOLO标注格式,易于集成到主流深度学习框架中,简化模型开发与部署流程。 • 科学价值突出:为胚胎发育研究、生命科学创新提供关键数据资源,促进AI在生物学中的实际应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值