现在编程是面向接口编程,举个例子,假如我的代码以前是哪mybaties写的,现在我要那hibernate写,我就只用修改service的实现类和Dao的实现类。我的Control层调用的是service的接口类,所以我就不用修改Control层的内容。修改Service实现类就是让表示层不依赖于业务层的具体实现,实现业务层与表示层的分离。修改Dao层实现类就是让业务层与以来持久层,实现业务层与持久层的分离。
hibernate与mybaties的区别就是,mybaties有一个mapper文件,Dao层只有接口类,而hibernate的Dao层即有接口类又有实现类,实现类里面如下所示
package com.jointem.study.dao.impl;
import com.jointem.study.dao.UserDao;
import com.jointem.study.entity.Student;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Title: UserDaoImpl
* @Description:
* @Author: lcb
* @Date: 2017年07月19日
* @Version: v1.0.0
* @Copyright: 2017 www.jointem.com Inc. All rights reserved.
* @Update: 1. Create File
*/
@Repository("userDao")
public class UserDaoImpl implements UserDao{
@Autowired
SessionFactory sessionFactory;
public List<Student> getList() {
String hql = "from Student";
Query query=sessionFactory.getCurrentSession().createQuery(hql);
return query.list();
}
public void addStudent(Student student) {
sessionFactory.getCurrentSession().save(student);
}
//删除用户
public void delStudent(Integer id) {
Student student =(Student)sessionFactory.getCurrentSession().get(Student.class,1);
sessionFactory.getCurrentSession().delete(student);
}
public Student setList1(String name) {
String sql = "select * from Student where name=:name";
Query query=sessionFactory.getCurrentSession().createSQLQuery(sql).setParameter("name",name);
List<Student> students=query.list();
if(students.size()>0 ){
return students.get(0);
}
return null;
}
// //修改用户
// public void updateUser(Student student) {
// Session session = sessionFactory.getCurrentSession();
// session.beginTransaction();
// String hql = ("update Student u set u.name = ?,u.password = ?,u.loginDate = ? where u.id = ?");
// Query query = session.createQuery(hql);
// query.setParameter(0, student.getName());
// query.setParameter(1, student.getPassword());
// query.setParameter(2, student.getLoginDate());
// query.setParameter(3, student.getId());
// query.executeUpdate();
// session.getTransaction().commit();
// }
}
本文介绍面向接口编程的概念及其优势,并通过MyBatis与Hibernate的对比,详细解释如何通过修改Service和DAO层实现从一种框架到另一种框架的迁移,从而保持Control层的不变,实现各层之间的解耦。
1668

被折叠的 条评论
为什么被折叠?



