Spring4+Hibernate4를 기반으로 한 유니버설 데이터 액세스 층(Dao 층)의 설계와 실현!
우리가 이런 모델에 대한 조작은 대부분이 유사하다. 다음은 내가 제시한 것들(명지의, 기타 자체 뇌보)이다.
1.save 2.saveAll 3.findById 4.update 5.saveOrUpdate 6.delete 7.deleteAll 8.deleteById 9.loadAll 10.load(int page,int rows) 11.getTotalCount 12.getScrollData(int firstResult, int maxResult) 13.getScrollData(int firstResult, int maxResult, LinkedHashMap orderby) 14.getScrollData(int firstResult, int maxResult, String where, Object[] params) 15.getScrollData(int firstResult, int maxResult, String where, Object[] params, LinkedHashMap orderby)
각 Dao(Dao Impl), Service(Service Impl)에서 이러한 메서드를 정의한 경우 계산해 보겠습니다.만약 20개의 모델이 있다면: 20*15*(2+2) = 1200입니다.나리, 이렇게 낡은 물건 더미에 1200가지 방법이 걸렸어!!!(다음에는 이걸로 코드를 채워서 재도 되겠다...)방법당 평균 20회, 방법당 평균 40회 복제.아무 잘못도 없을 것을 보증하는 것은 정말 힘든 일이다.다음은 우리가 더욱 선진적인 방법이다.[참고: 다음 방법은 반드시 Spring을 4로 업데이트해야 하며, Spring3은 일반 주입을 지원하지 않습니다!]
우리는 Dao(Dao Impl), 서비스(Service Impl)에서 BaseDao(Base Dao Impl), BaseService(Base Service Impl)를 정의한 다음에 ORM이 Hibernate를 사용하기 때문에 우리는 하나의 실체를 조작할 때 사실 두 가지 속성 {Model.id.class(메인 키 형식), Model.class(실체 클래스 유형)만 알아야 한다. 그래, 사실은 모두 Class 유형인지 서열화할 수 있는지.이렇게 하면 우리 BaseDao가 실현될 때 구체적으로 어떤 실체류인지, 모델에 따라 주목할 필요가 없다.id.class 및 Model.class는 조작의 모든 것을 얻을 수 있습니다.그리고 각 구체적인 Dao가 BaseDao를 계승하면 BaseDao에서 정의한 10여 가지 방법(중복할 필요가 없음)을 가질 수 있고 업무 수요에 따라 구체적인 Dao의 방법을 확장하여 어느 정도의 결합(기초 조작과 특수 조작의 결합)을 할 수 있다.그리고 구체적인 DaoImpl은 먼저 BaseDaoImpl(이렇게 하면 10여 가지 기초 방법의 실현을 생략할 수 있다)을 계승하여 자신의 Dao의 특수한 업무 논리 방법을 실현한다.결합 해제가 잘 됐어![물론 범용성을 바탕으로 한 만큼 모델류를 잘못 넘기지 마세요!!!]서비스 레이어도 마찬가지입니다!!!
다음은 패키지의 구조입니다.
com.xy.model {Car,Driver,Passenger}com.xy.dao {BaseDao,CarDao,DriverDao,PassengerDao}com.xy.dao.impl {BaseDaoImpl,CarDaoImpl,DriverDaoImpl,PassengerDaoImpl}com.xy.service {BaseService,CarService,DriverService,PassengerService}com.xy.service.impl {BaseServiceImpl,CarServiceImpl,DriverServiceImpl,PassengerServiceImpl}
다음은 프로필 정보입니다. [원래는 이것이 중요한 것이 아니라고 생각했는데 작성할 필요가 없었지만 붙였습니다.] ##웹.xml
org.springframework.web.context.request.RequestContextListener
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:spring.xml,classpath:spring-hibernate.xml
org.springframework.web.util.IntrospectorCleanupListener
openSessionInViewFilter
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
singleSession
true
openSessionInViewFilter
*.action
##Spring.xml
##Spring-hibernate.xml
${hibernate.hbm2ddl.auto}
${hibernate.dialect}
${hibernate.show_sql}
${hibernate.format_sql}
com.xy.model
뒤에 포인트가 왔어요!!!
#BaseDao.java
public interface BaseDaoInter {
/**
* session session
* @return
*/
public Session getSession();
/**
*
* @param t
* @return ID
*/
public K save(T t);
/**
* 【 】
* @param ct 【 】
*/
public void saveAll(Collection ct);
/**
* Id
* @param id id
* @return
*/
public T findById(K id);
/**
*
* @param t
* @return
*/
public T update(T t);
/**
*
* @param t
* @return
*/
public T saveOrUpdate(T t);
/**
*
* @param t
*/
public void delete(T t);
/**
*
* @param ct
*/
public void deleteAll(Collection ct);
/**
* id
* @param id id
* @return (id )
*/
public boolean deleteById(K id);
/**
*
* @return
*/
public QueryResult loadAll();
/**
*
* @param page
* @param rows
* @return page
*/
public QueryResult load(int page,int rows);
/**
*
* @return
*/
public long getTotalCount();
/******************************HQL******************************/
/**
*
* @return
*/
public QueryResult getScrollData();
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult);
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @param orderby ,Key ,Value asc/desc, :
* LinkedHashMap orderby = new LinkedHashMap();
orderby.put("email", "asc");
orderby.put("password", "desc");
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult, LinkedHashMap orderby);
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @param where , where , , 1 , :o.username=?1 and o.password=?2
* @param params
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult, String where, Object[] params);
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @param where , where , , 1 , :o.username=?1 and o.password=?2
* @param params
* @param orderby ,Key ,Value asc/desc, :
* LinkedHashMap orderby = new LinkedHashMap();
orderby.put("email", "asc");
orderby.put("password", "desc");
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult, String where, Object[] params, LinkedHashMap orderby);
}
#CarDao.java
public interface CarDaoInter extends BaseDaoInter{
}
#DriverDao.java
public interface DriverDaoInter extends BaseDaoInter,Driver>{
}
#BaseDaoImpl.java /**
* abstract , BaseDaoImpl @Repository , clatt
* class
*
* @author BearSmall
*
* @param
*/
public abstract class BaseDaoImpl
implements BaseDaoInter {
@Autowired
private SessionFactory sessionFactory; // session 【 get,set 】
private Class clatt; // 【 Class 】
/**
* // sessionFactory
*
* @return sessionFactory
*/
public SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* clatt 【 】
*
* @param clatt
*/
public BaseDaoImpl(Class clatt) {
this.clatt = clatt;
}
// @SuppressWarnings("unchecked")
// public BaseDaoImpl() {// clatt , abstract
// ParameterizedType parameterizedType =
// (ParameterizedType)this.getClass().getGenericSuperclass();
// clatt= (Class)(parameterizedType.getActualTypeArguments()[0]);
// }
@Override
public Session getSession() {
return getSessionFactory().getCurrentSession();
}
@SuppressWarnings("unchecked")
@Override
public K save(T t) {
Session session = getSession();
return (K) session.save(t);
}
@Override
public T findById(K id) {
Session session = getSession();
@SuppressWarnings("unchecked")
T t = (T) session.get(clatt, id);
return t;
}
@Override
public void saveAll(Collection ct) {
Session session = getSession();
for (T t : ct) {
session.save(t);
}
}
@Override
public T update(T t) {
Session session = getSession();
session.update(t);
return t;
}
@Override
public void deleteAll(Collection ct) {
Session session = getSession();
for (T t : ct) {
session.delete(t);
}
}
@Override
public T saveOrUpdate(T t) {
Session session = getSession();
session.saveOrUpdate(t);
return t;
}
@Override
public void delete(T t) {
Session session = getSession();
session.delete(t);
}
@Override
public boolean deleteById(K id) {
Session session = getSession();
@SuppressWarnings("unchecked")
T t = (T) session.get(clatt, id);
if (t == null)
return false;
session.delete(t);
return true;
}
@SuppressWarnings("unchecked")
@Override
public QueryResult loadAll() {
Session session = getSession();
Criteria criteria = session.createCriteria(clatt);
QueryResult result = new QueryResult<>();
result.setDatas(criteria.list());
result.setTotalCount(Long.parseLong(criteria
.setProjection(Projections.rowCount()).uniqueResult()
.toString()));
return result;
}
@SuppressWarnings("unchecked")
@Override
public QueryResult load(int page, int rows) {
Session session = getSession();
Criteria criteria = session.createCriteria(clatt);
criteria.setFirstResult((page - 1) * rows);
criteria.setMaxResults(rows);
QueryResult result = new QueryResult<>();
result.setDatas(criteria.list());
result.setTotalCount(Long.parseLong(criteria
.setProjection(Projections.rowCount()).uniqueResult()
.toString()));
return result;
}
@Override
public long getTotalCount() {
Session session = getSession();
Criteria criteria = session.createCriteria(clatt);
Object object = criteria.setProjection(Projections.rowCount())
.uniqueResult();
long totalCount = 0;
if (object != null) {
totalCount = Long.parseLong(object.toString());
}
return totalCount;
}
/****************************** HQL ******************************/
@Override
public QueryResult getScrollData() {
return getScrollData(-1, -1, null, null, null);
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult) {
return getScrollData(firstResult, maxResult, null, null, null);
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult,
LinkedHashMap orderby) {
return getScrollData(firstResult, maxResult, null, null, orderby);
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult,
String where, Object[] params) {
return getScrollData(firstResult, maxResult, where, params, null);
}
@Override
@SuppressWarnings("unchecked")
public QueryResult getScrollData(int firstResult, int maxResult,
String where, Object[] params, LinkedHashMap orderby) {
String entityName = clatt.getSimpleName();
String whereql = where != null && !"".equals(where.trim()) ? " where "
+ where : "";
Session session = getSession();
Query query = session.createQuery("select o from " + entityName + " o"
+ whereql + buildOrderby(orderby));
if (firstResult != -1 && maxResult != -1)
query.setFirstResult(firstResult).setMaxResults(maxResult);
setQueryParameter(query, params);
QueryResult qr = new QueryResult();
// qr.setResultlist(query.getResultList());
Query queryCount = session.createQuery("select count(o) from "
+ entityName + " o" + whereql);
setQueryParameter(queryCount, params);
long count = (Long) queryCount.uniqueResult();
qr.setTotalCount(count);
qr.setDatas(query.list());
return qr;
}
/**
*
*
* @param query
*
* @param params
*
*/
public static void setQueryParameter(Query query, Object[] params) {
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
}
/**
*
*
* @param orderby
* asc/desc, Key ,Value asc/desc
* @return
*/
public static String buildOrderby(LinkedHashMap orderby) {
StringBuilder sb = new StringBuilder();
if (orderby != null && !orderby.isEmpty()) {
sb.append(" order by ");
for (Map.Entry entry : orderby.entrySet()) {
sb.append("o.").append(entry.getKey()).append(" ")
.append(entry.getValue()).append(',');
}
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
}
#CarDaoImpl.java
@Repository("carDao")
public class CarDaoImpl extends BaseDaoImpl implements CarDaoInter{
// clazz ,
public CarDaoImpl() {
super(Car.class);
}
}
#DriverDaoImpl.java
@Repository(value="driverDao")
public class DriverDaoImpl extends BaseDaoImpl implements DriverDaoInter{
// clazz ,
public DriverDaoImpl() {
super(Driver.class);
}
}
#BaseService.java
#CarService.java
public interface CarServiceInter extends BaseServiceInter{
}
#DriverService.java
public interface DriverServiceInter extends BaseServiceInter{
}
#BaseServiceImpl.java
@Transactional(propagation=Propagation.REQUIRED)
public abstract class BaseServiceImpl implements BaseServiceInter {
@Autowired
private BaseDaoInter baseDao; // session 【 get,set 】
@Override
public K save(T t) {
return baseDao.save(t);
}
@Override
public void saveAll(Collection ct) {
baseDao.saveAll(ct);
}
@Override
public T findById(K id) {
return baseDao.findById(id);
}
@Override
public T update(T t) {
return baseDao.update(t);
}
@Override
public T saveOrUpdate(T t) {
return baseDao.saveOrUpdate(t);
}
@Override
public void delete(T t) {
baseDao.delete(t);
}
@Override
public void deleteAll(Collection ct) {
baseDao.deleteAll(ct);
}
@Override
public boolean deleteById(K id) {
return baseDao.deleteById(id);
}
@Override
public QueryResult loadAll() {
return baseDao.loadAll();
}
@Override
public QueryResult load(int page, int rows) {
return baseDao.load(page, rows);
}
@Override
public long getTotalCount() {
return baseDao.getTotalCount();
}
/******************************HQL******************************/
@Override
public QueryResult getScrollData() {
return baseDao.getScrollData();
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult) {
return baseDao.getScrollData(firstResult, maxResult);
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult,
LinkedHashMap orderby) {
return baseDao.getScrollData(firstResult, maxResult, orderby);
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult,
String where, Object[] params) {
return baseDao.getScrollData(firstResult, maxResult, where, params);
}
@Override
public QueryResult getScrollData(int firstResult, int maxResult,
String where, Object[] params, LinkedHashMap orderby) {
return baseDao.getScrollData(firstResult, maxResult, where, params, orderby);
}
}
#BaseService
public interface BaseServiceInter {
/**
*
* @param t
* @return ID
*/
public K save(T t);
/**
* 【 】
* @param ct 【 】
*/
public void saveAll(Collection ct);
/**
* Id
* @param id id
* @return
*/
public T findById(K id);
/**
*
* @param t
* @return
*/
public T update(T t);
/**
*
* @param t
* @return
*/
public T saveOrUpdate(T t);
/**
*
* @param t
*/
public void delete(T t);
/**
*
* @param ct
*/
public void deleteAll(Collection ct);
/**
* id
* @param id id
* @return (id )
*/
public boolean deleteById(K id);
/**
*
* @return
*/
public QueryResult loadAll();
/**
*
* @param page
* @param rows
* @return page
*/
public QueryResult load(int page,int rows);
/**
*
* @return
*/
public long getTotalCount();
/******************************HQL******************************/
/**
*
* @return
*/
public QueryResult getScrollData();
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult);
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @param orderby ,Key ,Value asc/desc, :
* LinkedHashMap orderby = new LinkedHashMap();
orderby.put("email", "asc");
orderby.put("password", "desc");
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult, LinkedHashMap orderby);
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @param where , where , , 1 , :o.username=?1 and o.password=?2
* @param params
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult, String where, Object[] params);
/**
*
* @param firstResult , -1,
* @param maxResult , -1,
* @param where , where , , 1 , :o.username=?1 and o.password=?2
* @param params
* @param orderby ,Key ,Value asc/desc, :
* LinkedHashMap orderby = new LinkedHashMap();
orderby.put("email", "asc");
orderby.put("password", "desc");
* @return
*/
public QueryResult getScrollData(int firstResult, int maxResult, String where, Object[] params, LinkedHashMap orderby);
}
#CarServiceImpl.java
@Service("carProxy")
public class CarServiceImpl extends BaseServiceImpl implements CarServiceInter {
@Autowired
private CarDaoInter carDao; // session 【 get,set 】
}
#DriverServiceImpl.java
@Service("driverProxy")
public class DriverServiceImpl extends BaseServiceImpl implements DriverServiceInter {
@Autowired
private DriverDaoInter driverDao; // session 【 get,set 】
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.