简单的Hibernate开发

本文介绍了如何使用Hibernate框架实现基本的CRUD操作。通过配置hibernate.cfg.xml和xxx.hbm.xml文件,创建实体类和测试类,实现了数据的增删改查。

近期工作中遇到一个项目的功能优化,由于其持久层框架使用的是Hibernate,而我熟悉的框架是Mybatis,所以趁着周末,学习了一下Hibernate,并用其实现了基本的CRUD。

个人感觉Mybatis和Hibernate最大的区别是Hibernate不用建立Mappers映射文件(其中存放自己写的sql语句,如UserMapper.xml),而且也不用自己去定义接口(与Mappers中的文件形成映射,如UserMapper.java)。使用Hibernate只需创建session即可实现各项操作,但是前期的准备工作就响应的多一点,比如要在xxx.hbm.xml文件中配置java对象的属性与数据库表中字段的映射关系,但是不用自己写sql语句就没有那么灵活了,可谓各有利弊吧。

下面简单介绍Hibernate的两大配置文件:

1.核心配置文件——hibernate.cfg.xml(主要描述Hibernate的相关配置)

<?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的配置文件,位置:src目录下-->
<hibernate-configuration>
	<!-- sessionFactory类似于DataSource -->
	<session-factory>
		<!-- 1 连接数据库参数 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">
		<!-- 此字符串不能写为jdbc:mysql://localhost:3306/daycode?useUnicode=true&characterEncoding=utf8,
		不然会出现编译错误 -->
			<![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8]]>
		</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>

		<!-- 可以将向数据库发送的SQL语句显示出来 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL语句 -->
		<property name="hibernate.format_sql">true</property>

		<!-- 2 hibernatse的环境配置 -->
		<!-- hibernate的方言,指定hibernate生成的SQL语句的数据库版本 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

		<!-- 3 ORM映射信息 -->
		<mapping resource="com/demo/entity/Person.hbm.xml" />
	</session-factory>
</hibernate-configuration>  

2.映射配置文件——xxx.hbm.xml(建立表与类之间的映射关系

<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<!-- DO NOT EDIT: This is a generated file that is synchronized -->
<!-- by MyEclipse Hibernate tool integration. -->
<!--位置:实体类所在包下 -->
<hibernate-mapping package="com.demo.entity">
	<!-- name:即实体类的全名 table:映射到数据库里面的那个表的名称 catalog:数据库的名称 -->
	<class name="Person" table="person" catalog="test">
		<!-- class下必须要有一个id的子元素 -->
		<!-- id是用于描述主键的 -->
		<id name="id" column="id" type="integer">
			<!-- 主键生成策略 -->
			<generator class="native" />
		</id>
		<!-- 使用property来描述属性与字段的对应关系 如果length忽略不写,且你的表是自动创建这种方案,那么length的默认长度是255 -->
		<property name="name" column="name" type="string" />
		<property name="age" column="age" type="integer" />
	</class>

</hibernate-mapping>

开发步骤:

1.导包:去官网下载压缩文件(点此下载),我下载的是这个版本:hibernate-release-5.2.10.Final

解压后将hibernate-release-5.2.10.Final\lib\required包下所有jar包拷贝到项目的lib文件夹下,还不够!

还要添加:mysql-connector-java-5.1.37.jar(必须的!)、activation-1.1.jar、jaxb-api-2.1.jar、jaxb-impl-2.1.2.jar


2.创建实体类Person

3.数据库中创建表t_person

4.测试:

package com.demo.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.demo.entity.Person;

public class HibernateTest{

    // 保存一个Person
    @Test
    public void savePersonTest() {
        // 创建一个Person
        Person c = new Person();
        c.setId(1);
        c.setName("叶子");
        c.setAge(20);

        // 使用Hibernate的API来完成将Person信息保存到mysql数据库中的操作
        Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
        SessionFactory sessionFactory = config.buildSessionFactory();
        //Session session = sessionFactory.getCurrentSession();
        Session session = sessionFactory.openSession(); // 相当于得到一个Connection
        // 开启事务
        session.beginTransaction();

        // 操作
        session.save(c);

        // 事务提交
        session.getTransaction().commit();
        session.close();
        sessionFactory.close();
    }

    // 根据id查询一个Person对象
    @Test
    public void findPersonByIdTest() {
        Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session session = sessionFactory.openSession(); // 相当于得到一个Connection
        // 开启事务
        session.beginTransaction();

        // 根据业务来编写代码
        // Person c = session.get(Person.class, 1);
        Person c = session.load(Person.class, 3);

        System.out.println(c);

        // 事务提交
        session.getTransaction().commit();
        session.close();
        sessionFactory.close();
    }

    // 修改操作
    @Test
    public void updatePersonTest() {
        Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session session = sessionFactory.openSession(); // 相当于得到一个Connection
        // 开启事务
        session.beginTransaction();

        // 根据业务来编写代码
        Person c = session.get(Person.class, 4);
        c.setName("郑敏");
        session.update(c); // 修改操作

        // 事务提交
        session.getTransaction().commit();
        session.close();
        sessionFactory.close();
    }

    // 删除操作---根据id进行删除
    @Test
    public void deletePersonTest() {
        Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session session = sessionFactory.openSession(); // 相当于得到一个Connection
        // 开启事务
        session.beginTransaction();

        // 根据业务来编写代码
        Person c = session.get(Person.class,6);
        session.delete(c); // 删除操作
        // 事务提交
        session.getTransaction().commit();
        session.close();
        sessionFactory.close();
    }

    // 查询所有Person
    @Test
    public void findAllPersonTest() {
        Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session session = sessionFactory.openSession(); // 相当于得到一个Connection
        // 开启事务
        session.beginTransaction();

        // 根据业务来编写代码
        Query query = session.createQuery("from Person"); // HQL语句,它类似于SQL语句
        List<Person> list = query.list();
        System.out.println(list);

        // 事务提交
        session.getTransaction().commit();
        session.close();
        sessionFactory.close();
    }
    }

参考文章:hibernate快速入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值