博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dao层系列-1-Hibernate上手
阅读量:7115 次
发布时间:2019-06-28

本文共 6600 字,大约阅读时间需要 22 分钟。

hot3.png

之前一直用spring jdbc,觉得是最简洁,最人畜无害的。但是,sql写的我tmd有点烦了,于是今天开始转向hibernate。之前学过一点,但是工作中从来没用过,先大概了解一下近两年来hibernate的发展,其他的也没注意,就是hibernate也支持注解了(可能是我孤陋寡闻了 - -!)也加了对JPA的实现,了解的过程中又发现Spring Data这货。一点点来吧,本文主要是试用一下从基础的Hibernate xml配置,再到annotation,再到与spring集成,再到spring data,再到。。。。。

注:本文不会为你一一讲解怎么配置、怎么用,就是想展示一下代码结构。如果想入门请另google。

完整代码见:

-------------------------割割割割割割割割割割割割割-------------------------------------------

新建Maven工程,假设是用户管理模块,目录结构:

User.java

package com.yaolifei.test.user.domain;import java.util.Date;public class User {	private Integer id;	private String name;	private Date birthday;	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 Date getBirthday() {		return birthday;	}	public void setBirthday(Date birthday) {		this.birthday = birthday;	}}
UserService.java
package com.yaolifei.test.user.service;import java.util.List;import com.yaolifei.test.user.domain.User;public interface UserService {	User getById(Integer id);	List
getAll(); void save(User user); void update(User user); void remove(User user);}
假设没有一点业务逻辑,就纯粹的调用Dao
UserServiceImpl.java
package com.yaolifei.test.user.service;import java.util.List;import com.yaolifei.test.user.dao.UserDao;import com.yaolifei.test.user.domain.User;public class UserServiceImpl implements UserService {	private UserDao userDao;	@Override	public User getById(Integer id) {		return userDao.getById(id);	}	@Override	public List
getAll() { return userDao.getAll(); } @Override public void save(User user) { userDao.save(user); } @Override public void update(User user) { userDao.update(user); } @Override public void remove(User user) { userDao.remove(user); } }
所以UserDao和UserService差不多是一样的
UserDao.java

package com.yaolifei.test.user.dao;import java.util.List;import com.yaolifei.test.user.domain.User;public interface UserDao {		User getById(Integer id);	List
getAll(); void save(User user); void update(User user); void remove(User user);}
重点是UserDaoImpl的实现
UserDaoImpl.java
package com.yaolifei.test.user.dao;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.yaolifei.test.user.domain.User;import com.yaolifei.test.util.HibernateUtil;public class UserDaoImpl implements UserDao {	@Override	public User getById(Integer id) {		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();		Session session = sessionFactory.openSession();		session.beginTransaction();		User user = (User) session.get(User.class, id);		session.getTransaction().commit();		session.close();		return user;	}	@Override	public List
getAll() { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Query query = session.createQuery("from User"); List
list = query.list(); session.getTransaction().commit(); session.close(); return list; } @Override public void save(User user) { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(user); session.getTransaction().commit(); session.close(); } @Override public void update(User user) { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); session.update(user); session.getTransaction().commit(); session.close(); } @Override public void remove(User user) { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); session.delete(user); session.getTransaction().commit(); session.close(); } }
可以看出
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();// ..................session.getTransaction().commit();session.close();

这个是模板代码,可以封装下。(不过我相信spring已经做了)

HibernateUtil提供创建单例SessionFactory的方法
HibernateUtil.java

package com.yaolifei.test.util;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {		private final static SessionFactory sessionFactory = buildSessionFactory();		private static SessionFactory buildSessionFactory() {		Configuration cfg = new Configuration();		cfg.configure("hibernate.cfg.xml");				return cfg.buildSessionFactory();	}				public static SessionFactory getSessionFactory() {		return sessionFactory;	}	}

下面看下Hibernate的配置:

com.mysql.jdbc.Driver
jdbc:mysql://localhost/test
root
880716
1
org.hibernate.dialect.MySQL5Dialect
thread
org.hibernate.cache.NoCacheProvider
true
update
还有映射文件:
测试类
UserServiceTest.java
package com.yaolifei.test.user.service;import static org.junit.Assert.*;import java.util.Calendar;import java.util.List;import org.junit.Test;import com.yaolifei.test.user.domain.User;public class UserServiceTest {	private UserService userService = new UserServiceImpl();		@Test	public void getById() {		Integer id = 1;		User user = userService.getById(id);		assertEquals("yaolifei", user.getName());	}	@Test	public void getAll() {		List
user = userService.getAll(); assertEquals(1, user.size()); } @Test public void save() { User user = new User(); user.setName("yaolifei"); Calendar c = Calendar.getInstance(); c.set(1988, 7-1, 16); user.setBirthday(c.getTime()); userService.save(user); } @Test public void update() { User user = userService.getById(1); user.setName("yaolf"); userService.update(user); User newUser = userService.getById(1); assertEquals(newUser.getName(), "yaolf"); } @Test public void remove() { User user = userService.getById(1); userService.remove(user); User newUser = userService.getById(1); assertNull(newUser); } }
 下面来跑测试
首先是增加一个User
控制台出现一条sql语句:INFO: HHH000232: Schema update completeHibernate: insert into SYS_USER (USER_NAME, USER_BIRTHDAY) values (?, ?)

因为id是自动生成的,所以没有插入,看下表里的数据:

自动生成了一个sys_user表,看下表结构:
再看下表数据:
下面可以一一测试一下其他代码。这边就不一一贴结果了

测试中。。。。

全部成功。

转载于:https://my.oschina.net/yaolifei/blog/145161

你可能感兴趣的文章
Ubuntu 16.04 grub rescue 模式下修复 grub
查看>>
【Spring】24、<load-on-startup>0</load-on-startup>配置
查看>>
L0 Regularization
查看>>
使用JDBC向Kudu表插入中文数据乱码(转载)
查看>>
spf13-vim安装与使用
查看>>
字体颜色代码表
查看>>
hdu 2156 分数矩阵
查看>>
android SQLite数据库应用于草稿箱
查看>>
Android 无缝换肤深入了解与使用
查看>>
Cordova快速开始(安卓篇)
查看>>
ActiveMQ
查看>>
聚类算法(kmeans)详解和python实现
查看>>
四种遍历方法你选哪个?
查看>>
LeetCode41.缺失的第一个正数 JavaScript
查看>>
Java设计模式五——单件模式
查看>>
奇怪的 Ruby
查看>>
79. Word Search
查看>>
【Android】RxJava的使用(四)线程控制 —— Scheduler
查看>>
极限编程 (Extreme Programming) - 迭代计划 (Iterative Planning)
查看>>
小程序外卖购物车 直接就能用~
查看>>