`

Hibernate Part 2:单表CRUD

 
阅读更多


使用Hibernate实现单表CRUD,数据库使用MySQL

建立customer表

create database test;
create table customer (
	id int primary key auto_increment,
	name varchar(20),
	age int,
	city varchar(20)
);	

  
创建JavaBean对象

package rock.lee.bean;

import java.io.Serializable;

public class Customer implements Serializable{
	private static final long serialVersionUID = -3229680950625733244L;
	private Integer id;
	private String name;
	private Integer age;
	private String city;
	
	public Customer() {
		super();
	}
	public Customer(String name, Integer age, String city) {
		super();
		this.name = name;
		this.age = age;
		this.city = city;
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", age=" + age+ ", city=" + city + "]";
	}
}

 
Hibernate是一个Object Relational Mapping框架,这里采用配置文件的形式实现JavaBean对象映射到关系型数据表

编写hbm.xml文件,在JavaBean所在的包下建立Customer.hbm.xml文件,引入hibernate3.jar中org/hibernate/hibernate-mapping-3.0.dtd里的DTD约束

<?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>
	<!-- 
			name:Bean的完整的类名 
			table:与Bean所要映射的数据库表名 
			catalog: 数据库库名 
	-->
	<class name="rock.lee.bean.Customer" table="customer" catalog="test">
		<!-- 
				id:标签用于配置主键 
				name: Customer类中的主键属性 
				column:数据库中所对应的列名 
				type:属性的类型 
		-->
		<id name="id" column="id" type="int">
			<!-- 
					generator标签用于配置主键的生成策略 
			-->
			<generator class="native"></generator>
		</id>
		<!-- 
				property标签用于配置其它Bean属性所对应的表列明
		 -->
		<property name="name" column="name" type="java.lang.String"></property>
		<property name="age" column="age" type="int"></property>
		<property name="city" column="city" type="java.lang.String"></property>
	</class>
</hibernate-mapping>

 <proterty>标签中type的取值



 

 
编写Hibernate核心配置文件hibernate.cfg.xml, 引入hibernate3.jar 中/org/hibernate/hibernate-configuration-3.0.dtd 的配置文件约束

<!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:///test</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<!-- 配置数据库方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 向控制台打印SQL语句 -->
		<property name="show_sql">true</property>
		<!-- SQL语句格式化打印 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 可以自动根据类生成DDL 建表语言,完成自动建表 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 加载 hbm 映射文件 -->
		<mapping resource="rock/lee/bean/Customer.hbm.xml" />
	</session-factory>
</hibernate-configuration>

 

 
com.mysql.jdbc.Driverjdbc:mysql:///testrootrootorg.hibernate.dialect.MySQLDialecttruetrueupdate
编写测试用例

CRUD的代码结构

	@Test
	public void test(){
		Configuration configuration = new Configuration().configure();// 实例化配置对象,加载配置文件 hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();// 创建Session连接工厂
		Session session = sessionFactory.openSession();//创建Session
		Transaction transaction = session.beginTransaction();//开启事物
		//.....编写CRUD代码
		transaction.commit();//提交事务
		session.close();//关闭session
		sessionFactory.close();//关闭session工厂
	}

 
这段代码的流程


 
 
保存:

@Test
	public void testSave(){
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Customer c = new Customer("小明",18,"北京");
		session.save(c);
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 
通过ID获取数据:

@Test
	public void testSave(){
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Customer c = new Customer("小明",18,"北京");
		session.save(c);
		
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

 
更新数据:

	@Test
	public void testUpdate(){
		Configuration configuration = new Configuration().configure();// 实例化配置对象,加载配置文件 hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();// 创建Session连接工厂
		Session session = sessionFactory.openSession();//创建Session
		Transaction transaction = session.beginTransaction();//开启事物

		Customer customer = new Customer();
		customer.setId(1);
		customer.setName("小丽");
		customer.setAge(25);
		customer.setCity("上海");
		session.update(customer);

		transaction.commit();//提交事务
		session.close();//关闭session
		sessionFactory.close();//关闭session工厂
	}

 
HQL查询所有数据:

	@Test
	public void testFindAllByHQL(){
		Configuration configuration = new Configuration().configure();// 实例化配置对象,加载配置文件 hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();// 创建Session连接工厂
		Session session = sessionFactory.openSession();//创建Session
		Transaction transaction = session.beginTransaction();//开启事物

		String hql = " from Customer";
		Query query = session.createQuery(hql);
		@SuppressWarnings("unchecked")
		List <Customer>list = query.list();
		System.out.println(list);
		
		transaction.commit();//提交事务
		session.close();//关闭session
		sessionFactory.close();//关闭session工厂
	}

 
SQL查询所有数据:

@Test
	public void testFindALllBySQL(){
		Configuration configuration = new Configuration().configure();// 实例化配置对象,加载配置文件 hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();// 创建Session连接工厂
		Session session = sessionFactory.openSession();//创建Session
		Transaction transaction = session.beginTransaction();//开启事物

		String sql = "select * from customer";
		SQLQuery query = session.createSQLQuery(sql);
		@SuppressWarnings("unchecked")
		List<Object[]> list = query.list();
		for (Object[] objs : list) {
			System.out.println(Arrays.toString(objs));
		}
		
		transaction.commit();//提交事务
		session.close();//关闭session
		sessionFactory.close();//关闭session工厂
	}

 
通过ID删除数据:

	@Test
	public void testDelete(){
		Configuration configuration = new Configuration().configure();// 实例化配置对象,加载配置文件 hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();// 创建Session连接工厂
		Session session = sessionFactory.openSession();//创建Session
		Transaction transaction = session.beginTransaction();//开启事物

		Customer customer = new Customer();
		customer.setId(1);
		session.delete(customer);
		
		transaction.commit();//提交事务
		session.close();//关闭session
		sessionFactory.close();//关闭session工厂
	}

 
通过操作Customer对象,实现了对数据表的CRUD操作,其中最为核心的一个Hibernate接口是Session接口,所有的CRUD操作都是通过Session接口完成的。



测试用例中的一些代码并不合理,只是为了说明Hibernate单表CRUD中所使用到的API。


 

  • 大小: 43.7 KB
  • 大小: 31.9 KB
分享到:
评论

相关推荐

    Hibernate Part 3:核心API和常量配置

    2. **Session**:Session是Hibernate与数据库交互的接口,负责执行CRUD操作(创建、读取、更新、删除)。它维护了对象状态,并提供了事务管理和缓存功能。 3. **Criteria API**:一种动态查询方式,允许在运行时...

    精通hibernate(part 2)共分4个part (孙卫琴)

    - **继承映射**:讨论了单表继承、类表继承和子类表继承等多种继承映射策略。 - **查询语言**:介绍了Hibernate Query Language (HQL) 和Criteria API,以及它们在复杂查询中的应用。 - **性能优化**:提供了关于...

    精通hibernate(part 4)共分4个part (孙卫琴)

    3. **Inheritance Mapping**:继承映射支持单表继承、多表继承等多种策略,使得复杂对象模型可以更加灵活地映射到数据库中。 4. **Associations**:关联映射处理一对多、多对多等关系类型,支持不同类型的关联映射...

    精通hibernate(part 1)共分4个part (孙卫琴)

    - **继承映射**:探讨如何使用单表、多表和联合表继承模式来映射具有层次结构的实体。 6. **事务管理** - **本地事务**:讨论如何在Hibernate中使用本地事务处理单个操作。 - **全局事务**:介绍如何使用JTA...

    javaweb_part2

    5. **Hibernate ORM**:学习如何创建实体类,定义实体与数据库表的映射,以及如何使用Session进行CRUD操作。 6. **整合SSH**:如何将这三个框架集成在一起,利用Spring管理Struts 2的Action和Hibernate的数据访问层...

    hibernate例子程序SSH.part01.rar

    【标题】"hibernate例子程序SSH.part01.rar"是一个关于Hibernate框架的示例程序,结合了Spring、Struts和Hibernate(SSH)这三大Java Web开发中的主流框架。这个压缩包是尚学堂提供的,尚学堂是一家知名的IT教育机构...

    整合struts+hibernate+spring应用开发详解 part1

    Hibernate允许开发者用面向对象的方式来处理数据库,通过映射XML文件(hibernate.cfg.xml和.hbm.xml)将Java类与数据库表关联。这样,开发者可以专注于业务逻辑,无需过多关注SQL语句的编写。Hibernate支持事务管理...

    javaweb_part7_1

    在IT行业中,SSH(Struts2 + Spring + Hibernate)是一个非常经典的Java Web开发框架组合,被誉为"javaweb_part7_1"的学习资源。SSH框架是企业级应用开发的常用工具,它整合了三大框架,分别为Spring框架、Struts2...

    springMVC+hibernate+spring4.3 jar包整合

    5. 实现业务逻辑:在Service层使用Spring的依赖注入获取SessionFactory,通过Session进行数据库操作,利用Hibernate的CRUD方法完成数据的增删改查。 6. 创建控制器:在Spring MVC的Controller类中,定义处理HTTP...

    javaweb_part8

    在Java Web开发领域,SSH(Struts2、Spring和Hibernate)是一个非常经典的开源框架组合,用于构建企业级的Web应用程序。SSH框架集成了MVC设计模式、依赖注入以及持久层管理,大大提高了开发效率和代码的可维护性。在...

    javaweb_part20

    - 集成Hibernate:配置Hibernate的SessionFactory,创建实体类,建立对象与表的映射关系,通过Session接口进行CRUD操作。 - 使用AOP进行事务管理:Spring的AOP可以方便地实现事务的统一管理,确保业务操作的原子性和...

    javaweb_part11

    在IT行业中,SSH(Struts2、Spring、Hibernate)是一个非常经典的Java Web开发框架组合,被誉为"SSH"。这三个开源框架分别负责Web层、业务层和数据持久化层的管理,为开发者提供了一套高效、灵活且易于维护的解决...

    精通Struts:基于MVC (part 3)共分5个part

    ### 精通Struts:基于MVC (Part 3) #### Struts框架概述 Struts是一个开源的Java Web应用程序框架,它遵循Model-View-Controller(MVC)设计模式。MVC是一种软件架构模式,它将应用程序分为三个主要部分:模型、...

    javaweb_part9

    - **Hibernate实体类和映射文件**:可能会详细阐述如何创建Java实体类以及对应的.hbm.xml映射文件,用于描述对象与数据库表的关系。 - **事务管理**:介绍Spring如何进行事务管理,包括编程式事务管理和声明式事务...

    javaweb_part3

    在Java Web开发领域,SSH(Struts2、Spring、Hibernate)是一个非常经典的开源框架组合,用于构建企业级的Web应用程序。SSH框架集合了MVC设计模式的Struts2、依赖注入与面向切面编程的Spring以及对象关系映射的...

    javaweb_part17

    Hibernate通过映射Java类和数据库表,实现了对象的持久化,开发者无需关心底层SQL语句,只需操作Java对象即可完成数据的CRUD(Create、Read、Update、Delete)操作。Hibernate还提供了二级缓存机制,提升了数据访问...

    javaweb_part18

    - **ORM(对象关系映射)**:Hibernate 是一个流行的Java ORM框架,将Java对象与数据库表进行映射,使得开发者可以操作对象而不是SQL语句。 - **Session API**:提供了Session接口,用于与数据库进行交互,如增删...

    hiberante4.2.3-part01

    这个压缩包“hibernate4.2.3-part01”很可能是Hibernate 4.2.3版本的一部分,包含了一些基本的组件和文档,供开发者学习和使用。 在Hibernate 4.2.3版本中,有几个重要的知识点值得我们深入了解: 1. **实体管理**...

Global site tag (gtag.js) - Google Analytics