Hibernate增删改查

1.首先我们要知道什么是Hibernate

Hibernate是一个轻量级的ORMapping对象。主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法,

可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务。

2.什么是ORM  Object-Relational-Mapping对象关系映射

ORM:是通过java对象映射到数据库表,通过操作Java对象可以完成对数据表的操作。(假如你用的是Dbutils那么还需要在Java类中写sql语句,而orm就不用)

Hibernate是一个完全的ORM框架只需要对对象的操作即可生成底层的SQL。

接下来直接进入主题:

先看看使用hibernate的基本流程!下面是简单的流程图

1.创建项目:

用myeclipse创建一个web project

2.导入hibernate相关的架包到项目

第三步: 配置文件hibernate

hibernate的配置有两种形式!

一种是使用hibernate.properties文件!

另一种是使用hibernate.cfg.xml文件!这里我们使用hibernate.cfg.xml进行配置

a. 采用properties方式,必须手动编程加载hbm文件或者持久化类

b. 采用XML配置方式,可以配置添加hbm文件

在src目录下新建一个xml文件,名称为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>
<!-- 配置会话工厂 hibernate 核心 管理数据库连接池 -->
<session-factory>
<!-- 1.配置数据库连接参数 -->
<!-- 1.1配置jdbc四个基本连接参数 -->
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernateexec</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 1.2配置 hibernate使用的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 2.配置其他相关属性 -->
<!-- 2.1自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 2.2在日志中输出sql -->
<property name="hibernate.show_sql">true</property>
<!-- 2.3格式化sql -->
<property name="hibernate.format_sql">true</property> <!-- 开启事务 -->
<property name="hibernate.connection.autocommit">true</property> <!-- 配置c3p0数据库连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.idle_test_period">3000</property> <!-- 3.加载映射文件 -->
<mapping resource="com/study/model/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>

配置hibernate.cfg.xml

这里提醒一点:customer表你可以不用去手动创建,但是数据库hibernateexec是要你手动创建的

第四步.创建实体和映射文件 

public class Customer {

    private int id;
private String name;
private int age;
private String city;
private String addr;
}
/*
* 提供set和get方法
*/

Customer 实体

映射文件和实体对象在同一个包下:

 <?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">
<hibernate-mapping>
<!-- 完成实体类 和数据表的映射 -->
<!-- 1.类与表的映射 -->
<!--
name 要映射的完整类名
table 映射到数据库的表名
catalog 映射到数据库的名字
-->
<class name="com.study.model.Customer" table="customer" catalog="hibernateexec">
<!-- 2.类中属性 和表中 数据列的映射 -->
<!-- 2.1主键 -->
<!--
name 属性名(类中)
column 列名(表中)
type 数据类型
-->
<id name="id" column="id" type="int">
<!-- 配置主键生成策略 主键自动增长-->
<generator class="identity"></generator>
</id>
<!-- 2.2 普通属性 -->
<!--
name 属性名(类中)
column 列名(表中)
type 数据类型(也可以直接写String)
-->
<property name="name" column="name" type="java.lang.String"></property>
<property name="age" column="age" type="int"></property>
<!-- 也可以分开写 -->
<property name="city">
<column name="city" sql-type="varchar(20)"></column>
</property>
<!-- 如果什么都不写,那就默认类的属性名和数据库中的列名一致都为addr,类型为varchar -->
<property name="addr"></property> </class> </hibernate-mapping>

Customer.hbm.xml

第五步:创建SessionFactory对象

第六步:获取Session对象进行相关操作

第五步和第六步我和在一起,第六步我们发现不论增删改查前面四步都是一样的,我们其实可以提取到一个工具类,再来调用这样加快效率。

import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.study.model.Customer; public class HibernateTest {
/*
* 保存数据
*/
@Test
public void testInsert() {
// 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
// 创建会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 创建会话
Session session = sessionFactory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction();
// 编写自己的逻辑代码
Customer customer = new Customer();
customer.setName("小黄");
customer.setAge(40);
customer.setCity("北京");
// 直接保存
session.save(customer); // 提交事务
transaction.commit();
session.close();
sessionFactory.close();
} //查询所有的
@Test
public void testFindAllByHQL(){
// 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
// 创建会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 创建会话
Session session = sessionFactory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction(); //编写HQL语句(面向类和属性的查询
String hql =" from Customer";//这里是Customer不是表名 是类名 查询Customer
Query query =session.createQuery(hql); List<Customer> customers=query.list();
System.out.println(customers); // 提交事务
transaction.commit();
session.close();
sessionFactory.close();
} // 删除
@Test
public void testDelete() {
// 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
// 创建会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 创建会话
Session session = sessionFactory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction(); Customer customer =new Customer();
customer.setId(2);
session.delete(customer); // 提交事务
transaction.commit();
session.close();
sessionFactory.close();
} // 修改
@Test
public void testUpdate() {
// 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
// 创建会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 创建会话
Session session = sessionFactory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class, 2);
customer.setCity("杭州");
session.update(customer); // 提交事务
transaction.commit();
session.close();
sessionFactory.close(); } // 查询 根据id查询
@Test
public void testFindById() {
// 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
// 创建会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 创建会话
Session session = sessionFactory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class, 1);
System.out.println(customer); // 提交事务
transaction.commit();
session.close();
sessionFactory.close();
}
}

hibernate增删改查

运行效果:当你运行第一个增加用户的时候,运行结束数据库会自动创建customer表格,和往表格里添加数据。

这样就通过hibernate进行基础的增删改查了。

本文就到这里了,有不足之处欢迎大家指点,谢谢!

hibernate框架(1)---Hibernate增删改查的更多相关文章

  1. hibernate框架学习之增删改查helloworld

    插入数据删除数据修改数据查询单条数据查询多条数据 HelloWorldApp.java package cn.itcast.h3.helloworld; import org.hibernate.Se ...

  2. hibernate关联对象的增删改查------查

    本篇博客是之前博客hibernate关联对象的增删改查------查 的后继,本篇代码的设定都在前文已经写好,因此读这篇之前,请先移步上一篇博客 //代码片5 SessionFactory sessi ...

  3. Spring JdbcTemplate框架搭建及其增删改查使用指南

    Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...

  4. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

    前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...

  5. Hibernate进行对象的增删改查

    首先我们看看hibernate手动配置步骤 (这个了解一点就可以了,以后是不会自己全部手动配置的) 1.    创建WEB项目 2       下载hibernate-release-4.3.11.F ...

  6. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  7. hibernate关联对象的增删改查------增

    本文可作为,北京尚学堂马士兵hibernate课程的学习笔记. 这一节,我们看看hibernate关联关系的增删改查 就关联关系而已,咱们在上一节已经提了很多了,一对多,多对一,单向,双向... 其实 ...

  8. Hibernate——(2)增删改查

    案例名称:Hibernate完成增删改查 案例描述:抽取出工具类并完成删除.修改.查询功能. 具体过程: 1.使用上面的例子(Hibernate--(1)Hibernate入门http://blog. ...

  9. SSHE框架整合(增删改查)

    1.前期准备:jar包(c3p0.jdbc ,各个框架) web.xml文件:spring的   转码的,和Struts2的过滤器 <?xml version="1.0" e ...

  10. 快速入门GreenDao框架并实现增删改查案例

    大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...

随机推荐

  1. Golang之路【目录】

    我正在写一套使用Golang全栈开发的教程,名字暂叫“Golang之路”,希望大家多提建议. 目录如下: Golang之路[第一篇]:Golang简介和入门Golang之路[第二篇]:Golang基础 ...

  2. 【此处有干货~】jmeter+ant+jenkins持续集成配置及过程中问题解决思路

    本人是一枚工作近三年的小测试,大学正好专业为软件测试,在工作中用到最多的是功能测试.接口测试.压力测试.偶尔会涉及到性能测试......(小白,很多观念技术跟大佬差距太大,勿喷) 在接口测试过程当中, ...

  3. PCL安装

    本文是在Ubuntu16.04下安装PCL. 按照官网的教程,有两种方法可以安装: 1.直接安装预先编译好的二进制库文件 sudo add-apt-repository ppa:v-launchpad ...

  4. 1013. Battle Over Cities 用dfs计算联通分量

    使用一个标记数组,标记 节点是否已访问 int 连通度=0 dfs(node i) {标记当前节点为以访问 for(每一个节点) {if(当前几点未访问 并且 从i到当前节点有直接路径) dfs(当前 ...

  5. Linux二进制分析PDF

    链接:https://pan.baidu.com/s/1lp5mz30J3RamFyQIXRvx5w 提取码:vcdq 我就是看不惯csdn的付费下载,链接失效了就评论区留言,我能收到邮件.

  6. 摘录<奇特的一生>1~4——[苏]格拉宁

    一 只有在不实事求是的时候,事实才会叫人感兴趣. 虚构的人物任人摆布,并且纤毫毕露--他的一切想法意图,他的过去和未来,作者都一清二楚. 我还有一个任务:向读者灌输一些有用的知识,介绍些材料. 是一个 ...

  7. ArcSDE

    ArcSDE,即数据通路,是ArcGIS的空间数据引擎,它是在关系数据库管理系统(RDBMS)中存储和管理多用户空间数据库的通路.从空间数据管理的角度看,ArcSDE是一个连续的空间数据模型,借助这一 ...

  8. php中测试运行的时间,从而选择得出优化程序

    对于新手来说,优化代码的习惯十分重要, 测试运行的时间,从而得出最好的一个 <?php $t1=microtime(true);   //获取程序1,开始的时间 程序1(代码...) $t2=m ...

  9. linux sshd 登录不需要密码

    ssh 安全外壳协议 协议22 linux 默认放行了 22 号接口 ssh 默认安装 自行安装 应该是 openssh-server ssh命令是 openssh ssh-keygen 生成密钥 生 ...

  10. C++与java中的赋值操作符

    #include <iostream> using namespace std; class BankAccount{ private: double balance; public: B ...