文档章节

hibernate入门

mouos
 mouos
发布于 02/20 16:51
字数 1090
阅读 5
收藏 0

下载和导包

下载hibernate

https://sourceforge.net/projects/hibernate/files/hibernate-orm/

导入数据库驱动包

导入hibernate必要包 lib/required

导入日志记录的包

创建数据库和数据库实体

package com.company.domain;

public class Customer {

    private Long cust_id;

    private String cust_name;

    public Long getCust_id() {
        return cust_id;
    }

    public void setCust_id(Long cust_id) {
        this.cust_id = cust_id;
    }

    public String getCust_name() {
        return cust_name;
    }

    public void setCust_name(String cust_name) {
        this.cust_name = cust_name;
    }
}

配置信息分别在 hibernate-core-5.4.1.Final.jar/hibernate-configuration-3.0.dtd 文件下和 压缩目录project/etc/hibernate.properties文件

创建映射文件 Customer.hbm.xml

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

<!-- 配置表与实体对象的关系 -->
<!-- package属性:包名(可选) -->
<hibernate-mapping package="com.company.domain" >
    <!--
        class元素: 配置实体与表的对应关系的
            name: 完整类名
            table:数据库表名
     -->
    <class name="Customer" table="cst_customer" >
        <!-- id元素:配置主键映射的属性
                name: 填写主键对应属性名
                column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
                type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
                not-null(可选):配置该属性(列)是否不能为空. 默认值:false
                length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
         -->
        <id name="cust_id"  >
            <!-- generator:主键生成策略 -->
            <generator class="native"></generator>
        </id>
        <!-- property元素:除id之外的普通属性映射 -->
        <property name="cust_name" column="cust_name" >
            <!--  <column name="cust_name" sql-type="varchar" ></column> -->
        </property>
    </class>
</hibernate-mapping>

创建hibernate的核心配置文件 hibernate.cfg.xml,在项目的src下创建

<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///mydatabase?characterEncoding=utf8</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root123</property>
        //不自动建表时修改此属性,比如 org.hibernate.dialect.MySQL5Dialect
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <!-- 将hibernate生成的sql语句打印到控制台 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 将hibernate生成的sql语句格式化 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 自动建表 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- hibernate操作数据库时的隔离级别 -->
		 <property name="hibernate.connection.isolation">4</property>
		 <!-- 指定session与当前线程绑定 -->
		 <property name="hibernate.current_session_context_class">thread</property>
        <!-- 引入orm元数据,路径书写: 填写src下的路径 -->
        <mapping resource="com/company/domain/Customer.hbm.xml" />

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

自动建表编码错误参考:Hibernate 自动建表默认编码格式改为UTF-8

Session对象,增删改查

package com.company.test;

import com.company.domain.Customer;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class SessionDemo {

    //事务操作
    public void fun() {
        Configuration conf = new Configuration().configure();
        SessionFactory sf = conf.buildSessionFactory();
        Session session = sf.openSession();
        Transaction transaction = session.beginTransaction();
       
        //---------------
        
        // 执行增删改查操作

        //---------------
       
        //提交事务
        transaction.commit();
        //回滚事务
        //transaction.rollback();
        session.close();
        sf.close();
    }
}

Customer c = new Customer();
c.setCust_name("新浪");
session.save(c);

Customer customer = session.get(Customer.class, 1l);

Customer c = session.get(Customer.class, 1l);
session.delete(c);

Customer c = session.get(Customer.class, 1l);
session.update(c);

hibernate中的批量查询

HQL查询

基本查询

//语法:select * from 对象的完整类名
//select * 可省略
//如果项目无重复的Customer,可简写
//String hql = " from com.company.domain.Customer ";
String hql = " from Customer "; 
Query query = session.createQuery(hql);
List<Customer> list = query.list(); 
//query.uniqueResult();//接收唯一的查询结果

条件查询

// cust_id为属性名
String hql = " from Customer where cust_id = 1 "; 
Query query = session.createQuery(hql);
Customer c = (Customer) query.uniqueResult();

问号占位符

String hql = " from Customer where cust_id = ? "; 
Query query = session.createQuery(hql);
//query.setLong(0, 1l);
query.setParameter(0, 1l);
Customer c = (Customer) query.uniqueResult();

命名占位符

String hql = " from Customer where cust_id = :cust_id "; 
Query query = session.createQuery(hql);
query.setParameter("cust_id", 1l);
Customer c = (Customer) query.uniqueResult();

分页查询

String hql = " from Customer  "; 
Query query = session.createQuery(hql);
query.setFirstResult(1);
query.setMaxResults(1);
List<Customer> list = query.list();

Criteria查询

基本查询

Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
//Customer c = (Customer) criteria.uniqueResult();

条件查询

    // > 				gt
    // >=				ge
    // <				lt
    // <=				le
    // ==				eq
    // !=				ne
    // in				in
    // between and		between
    // like 			like
    // is not null 		isNotNull
    // is null			isNull
    // or				or
    // and				and
Criteria criteria = session.createCriteria(Customer.class);
//查询cust_id为1的Customer对象
criteria.add(Restrictions.eq("cust_id", 1l));
Customer c = (Customer) criteria.uniqueResult();

分页查询

Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(1);
criteria.setMaxResults(2);
List<Customer> list = criteria.list();

查询总记录数

Criteria criteria = session.createCriteria(Customer.class);
//设置查询的聚合函数 => 总行数
criteria.setProjection(Projections.rowCount());
Long count = (Long) criteria.uniqueResult();

原生SQL查询

基本查询

String sql = "select * from cst_customer";
SQLQuery query = session.createSQLQuery(sql);
//指定将结果集封装到哪个对象中
query.addEntity(Customer.class);
List<Customer> list = query.list();

条件查询

String sql = "select * from cst_customer where cust_id = ? ";
SQLQuery query = session.createSQLQuery(sql);
query.setParameter(0, 1l);
query.addEntity(Customer.class);
List<Customer> list = query.list();

分页查询

String sql = "select * from cst_customer  limit ?,? ";
SQLQuery query = session.createSQLQuery(sql);
query.setParameter(0, 0);
query.setParameter(1, 1);
query.addEntity(Customer.class);
List<Customer> list = query.list();

© 著作权归作者所有

mouos
粉丝 1
博文 250
码字总数 133272
作品 0
其它
私信 提问
杨老师课堂之JavaEE三大框架Hibernate入门第一课

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/80998421 本篇任务 教学导航 CRM(Customer Relationship Management)客户关系管理...

杨校
2018/07/11
0
0
杨老师课堂之JavaEE三大框架Hibernate入门教程第一课

本篇任务 1. 使用Hibernate框架完成对客户的增删改查的操作 教学导航 1. 能够说出Hibernate的执行流程 2. 能够独立使用Hibernate框架完成增删改查的操作 框架和CRM项目的整体介绍 1. 什么是C...

杨校
2018/07/11
0
0
Hibernate 3.6.0.Beta4 发布

Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。...

红薯
2010/09/02
409
1
Hibernate Search 6.0.0.Alpha4 发布,数据检索框架

Hibernate Search 6.0.0.Alpha4 已发布,这是仍处于开发中的 6.0 分支的第四个 alpha 版本。此版本主要的新特性包括添加"exists"谓词;通过绕过 DSL 和投影转换器(projection converters)或...

局长
04/07
407
1
Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD
2016/12/01
154
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部