JAVA入门[19]-Hibernate简单示例

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一、Hibernate简介

在很多场景下,我们不需要使用JdbcTemplate直接操作SQL语句,这时候可以用ORM工具来节省数大量的的代码和开发时间。ORM工具能够把注意力从容易出错的SQL代码转向如何实现应用程序的真正需求。

Spring对ORM框架的支持提供了与这些框架的集成点以及一些附加的服务:

  • 支持集成Spring声明式事务;
  • 透明的异常处理;
  • 线程安全的、轻量级的模板类;
  • DAO支持类;
  • 资源管理。

Hibernate是在开发者社区很流行的开源ORM框架。

二、Spring+Hibernate实例

1.创建数据库表

mysql新建数据库store,然后执行如下sql:

  db_store.sql

2.代码结构

我用的IDE是IdeaIU,通过maven构建项目,通过xml配置spring。完成后的代码结构为:

Image(8)

3.创建实体类Category

1
2
3
4
5
6
7
8
9
10
11
class  Category{
     private  int  cateId;
 
     private  String cateName;
 
     //次数省略get,set方法<br>
     @Override
     public  String toString() {
         return  "id=" +cateId+ " name=" +cateName;
     }
}

  

4.修改pom.xml,引入相关依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version> 4.12 </version>
         </dependency>
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-core</artifactId>
             <version> 4.3 . 5 .Final</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version> 5.1 . 30 </version>
         </dependency>
     </dependencies>

  

5.配置applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version= "1.0"  encoding= "UTF-8" ?>
<beans xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
        xmlns= "http://www.springframework.org/schema/beans"  xmlns:tx= "http://www.springframework.org/schema/tx"
        xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" >
 
 
     <bean id= "dataSource"  class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >
         <property name= "driverClassName"  value= "com.mysql.jdbc.Driver" ></property>
         <property name= "url"  value= "jdbc:mysql://localhost:3306/store" ></property>
         <property name= "username"  value= "root" ></property>
         <property name= "password"  value= "root" ></property>
     </bean>
 
     <bean id= "sessionFactory"
           class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
         <property name= "dataSource"  ref= "dataSource" />
         <property name= "configLocation"  value= "classpath:hibernate/hibernate.cfg.xml" />
     </bean>
 
     <tx:annotation-driven/>
     <bean id= "transactionManager"
           class = "org.springframework.orm.hibernate4.HibernateTransactionManager" >
         <property name= "sessionFactory"  ref= "sessionFactory" />
     </bean>
 
     <bean id= "categoryDao"  class = "CategoryDao" >
         <constructor-arg ref= "sessionFactory" ></constructor-arg>
     </bean>
</beans>

  

dataSource没什么特别的,就不在解释了。看下其他几点:

①hibernate sessionFactory:

使用Hibernate所需的主要接口是org.hibernate.Session,Session接口提供了CRUD等最基本的数据访问功能。通过Hibernate的Session接口,应用程序的Repository能够满足所有的持久化需求。而获取Hibernate Session对象的标准方式是借助于Hibernate SessionFactory接口的实现类。

在sessionFactory配置主要设置了两个属性:dataSource设置了数据连接,configLocation设置了hibernate配置文件的路径。

②事务

要是数据库操作支持事务,需要配置<tx:annotation-driven/>和transactionManager。

6.hibernate配置

①hibernate.cfg.xml

1
2
3
4
5
6
7
8
9
10
11
<?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= "dialect" >org.hibernate.dialect.MySQLDialect</property>
     <property name= "show_sql" > true </property>
     <mapping resource= "hibernate/Category.hbm.xml" />
</session-factory>
</hibernate-configuration>

  

②Category.hbm.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?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>
     < class  name= "Category"  table= "Category" >
         <id name= "cateId"  column= "id" >
             <generator  class = "native" />
         </id>
         <property name= "cateName"  column= "name" />
     </ class >
</hibernate-mapping>

  

7.数据访问实现类CategoryDao

如果方法要支持事务,需要加注解@Transactional。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public  class  CategoryDao {
     private  SessionFactory sessionFactory;
 
     public  CategoryDao(SessionFactory sessionFactory) {
         this .sessionFactory = sessionFactory;
     }
 
     private  Session currentSession() {
         return  sessionFactory.getCurrentSession();
     }
 
     @Transactional
     public  void  save(Category category) {
         currentSession().save(category);
     }
 
     @Transactional
     public  void  update(Category category){
         currentSession().update(category);
     }
 
     @Transactional
     public  void  delete( int  id) {
         Query query = currentSession().createSQLQuery( "DELETE FROM category WHERE Id=::ID" );
         query.setInteger( "::ID" , id);
         query.executeUpdate();
     }
 
     @Transactional
     public  int  count() {
         return  getAll().size();
     }
 
     @Transactional
     public  Category getById( int  id) {
         Criteria criteria=currentSession().createCriteria(Category. class );
         criteria.add(Restrictions.eq( "id" ,id));
         return  (Category) criteria.uniqueResult();
     }
 
     @Transactional
     public  List<Category> getAll() {
         return  currentSession().createCriteria(Category. class ).list();
     }
}

  

8.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@ContextConfiguration (locations =  "classpath:applicationContext.xml" )
@RunWith (SpringJUnit4ClassRunner. class )
public  class  testCategoryDao {
     @Autowired
     private  CategoryDao categoryDao;
 
     @Test
     public  void  testAdd() {
         Category category =  new  Category();
         category.setCateId( 4 );
         category.setCateName( "母婴" );
 
         categoryDao.save(category);
     }
 
     @Test
     public  void  testUpdate() {
         Category category =  new  Category();
         category.setCateId( 4 );
         category.setCateName( "男装" );
 
         categoryDao.update(category);
     }
 
 
     @Test
     public  void  testGetById() {
         int  id =  4 ;
         Category category = categoryDao.getById(id);
 
         if (category== null ){
             System.out.println( "not exist" );
         } else  {
             System.out.println(category.toString());
         }
     }
 
     @Test
     public  void  testGetAll() {
         List<Category> categories = categoryDao.getAll();
         for  (Category item : categories) {
             System.out.println(item);
         }
     }
 
     @Test
     public  void  testCount() {
         int  count = categoryDao.count();
         System.out.println(count);
     }
 
     @Test
     public  void  testDelete() {
         int  id =  4 ;
         categoryDao.delete(id);
     }
}

  

源码地址:https://github.com/cathychen00/learnjava/tree/master/DemoHibernate




    本文转自 陈敬(Cathy) 博客园博客,原文链接:http://www.cnblogs.com/janes/p/6972440.html,如需转载请自行联系原作者



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
13 1
|
2天前
|
Java 开发工具 Windows
Java入门及环境变量
Java入门及环境变量
|
2天前
|
Java API 调度
[AIGC] 深入理解Java并发编程:从入门到进阶
[AIGC] 深入理解Java并发编程:从入门到进阶
|
2天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
2天前
|
前端开发 Java 测试技术
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
|
2天前
|
Java 程序员 数据库连接
Java从入门到精通:3.3.2性能优化与调优——内存管理篇
Java从入门到精通:3.3.2性能优化与调优——内存管理篇
Java从入门到精通:3.3.2性能优化与调优——内存管理篇
|
2天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式