• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
敬YES
Now Or Never
博客园    首页       联系   管理    订阅  订阅

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

一、Hibernate简介

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

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

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

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

二、Spring+Hibernate实例

1.创建数据库表

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

1 create table Category (
2 Id int not null,
3 Name varchar(80) null,
4 constraint pk_category primary key (Id)
5 );
6
7 INSERT INTO category(id,Name) VALUES (1,'女装');
8 INSERT INTO category(id,Name) VALUES (2,'美妆');
9 INSERT INTO category(id,Name) VALUES (3,'书籍');

db_store.sql

2.代码结构

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

图片转存失败,建议将图片保存下来直接上传

3.创建实体类Category

class Category{
private int cateId;

private String cateName;

//次数省略get,set方法

@Override
public String toString() {
return "id="+cateId+" name="+cateName;
}
}

  

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



junit
junit
4.12


org.hibernate
hibernate-core
4.3.5.Final


mysql
mysql-connector-java
5.1.30

  

5.配置applicationContext.xml










tx:annotation-driven/





  

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





org.hibernate.dialect.MySQLDialect
true


  

②Category.hbm.xml










  

7.数据访问实现类CategoryDao

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

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 getAll() {
return currentSession().createCriteria(Category.class).list();
}
}

  

8.测试

@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 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

作者:陈敬(公众号:敬YES)
出处:http://www.cnblogs.com/janes/
博客文章仅供交流学习,请勿用于商业用途。如需转载,请务必注明出处。

posted on 2017-06-09 16:14  敬YES  阅读(766)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3