hibernate-基本用法1

简介

hibernate 是一个开源的对象关系映射框架,对 JDBC 进行的轻量级的封装,允许我们以面向对象编程方式去操作数据库。
其优点有:
1.ORM,移植性好
2.缓存机制,一级和二级缓存
3.简洁的 HQL
缺点:
1.全表映射在复杂查询时难以做到 sql 优化

使用基本流程:添加相关依赖-> 做连接数据库的基本配置 -> 实体类与数据表的映射配置-> 通过 session 操作数据库

Hibernate5 包依赖

通过 maven 依赖添加必须的 jar 包

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>hibernate.version</version>
</dependency>

hibernate 是有很多功能模块的,例如:orm 、search、validate、ogm,需要使用哪些功能,才添相应的依赖,通过 hibernate 官网的快速使用向导可以找到对应的 dependency

Hibernate 配置文件

1.hibernate.cfg.xml(复杂配置)
2.hibernate.properties(简单配置)
3.ehcache.xml(可选,二级缓存配置)

在写配置文件时,最好就是参考官网中给出的例子,一般在下载的例子项目中可以找到。配置信息主要分两部分:基础配置(连接数据的参数、数据库配置) 和 实体与数据表的映射配置。

基础配置基本格式:尤其注意数据头要与你的数据环境匹配

<!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 标签配置各种数据库基本信息:
        url、psw、username、driverClass
        -->
        <property />
        <!--mapping 标签配置实体类映射-->
        <mapping />
    </session-factory>
</hibernate-configuration>

实体与数据表的映射配置:
1.使用 xml 配置(ClassName.hbm.xml)

<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
  <hibernate-mapping>
    <class>
     <!--对应的实体类属性与数据表列字段映射-->
    </class>
</hibernate-mapping>

2.使用注解配置:新建对应的实体类,在类中使用注解,基本注解有如下
@Entity 声明一个映射实体对象
@Table 声明表名
@Id 主键
@GeneratedValue 主键生成策略
@Column 对应列名
@Temporal 指定时间精度
@Enumerated 指定枚举类型存储格式
@Transient 指明该字段不会被持久化

使用 Session 对象

获取 sessionFactory , 因为 sessionFactory 是用来创建 session 对象,在整个应用都需要用到,其作用域应该是全局的,我们一般设置为单例模式,可参考如下:

public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
            .configure().build();
    try{
        return new MetadataSources(registry).buildMetadata()
                .buildSessionFactory();
    }catch (Exception e) {
        e.printStackTrace();
        StandardServiceRegistryBuilder.destroy(registry);
    }
    return null;
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

通过 sessionFactory 获取 session,参考如下

/* session 线程不安全,不可以自动回滚和关闭事务 */
public static Session openSession(){
    return sessionFactory.openSession();
}

/* session 线程安全,可以自动回滚和关闭事务 */
public static Session getCurrentSession(){
    return sessionFactory.getCurrentSession();
}

调用 session 中的方法操作数据库,参考如下,具体使用查看 API

try{
    session.beginTransation();

    session.persist(pojo);
    session.update(pojo);
    session.delete(pojo);
    session.get(calzz,id);
    session.createQuery(sql).list();

    session.getTransation().commit();
}catch{
    session.getTransation().rollback();
}finally{
    session.close();
}

小结:上面记录了添加依赖 - 配置 - 使用 session 操作数据库的主线,要想用好 hibernate 还需要理解许多相关的细节。

HQL : hibernate 的 sql 语句

Query query = session.createQuery(hql);

获得 query 对象后,可以通过调用其中的方法完成相关操作,类似于使用 PrepareStatement。hql 语法,类似于 sql , 不同的是引用数据表名变为引用相对应的实体类类名,列字段变为实体类的属性。

<!--sql-->
select 列名 from 表名 where xxx group by xxx having xxx order by xxx

<!--hql-->
select className from className where xxx group by xxx having xxx order by xxx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值