`

Spring baseDao封装,Spring jdbcTemplate封装,springJdbc泛型Dao,SpringJdbc持久层封装

阅读更多

Spring baseDao封装,Spring jdbcTemplate封装,springJdbc泛型Dao,SpringJdbc持久层封装

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年7月6日

http://fanshuyao.iteye.com/

 

很久之前弄的Spring Jdbc持久化层的baseDao,现在做个记录。

基本的增、删、查、改、分页、排序都可以用,只是兼容一般,如主键必须是id,并没有深入再封装。

 

封装基于Spring4+Mysql



 

 

package com.lqy.spring.dao.impl;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.BeanWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import com.lqy.Utils.EntityUtils;
import com.lqy.Utils.StrUtils;
import com.lqy.spring.bean.Page;
import com.lqy.spring.dao.BaseDao;
import com.lqy.spring.editor.GenderEditor;
import com.lqy.spring.entity.SqlEntity;
import com.lqy.spring.enums.Gender;

@SuppressWarnings({"unchecked","rawtypes"})
public class BaseDaoImpl<T> implements BaseDao<T> {
	
	
	@Autowired
	JdbcTemplate jdbcTemplate;
	
	//entityClass.getSimpleName()=Person
	//entityClass.getName()=com.lqy.spring.c3p0.beans.Person
	protected Class<T> entityClass = (Class<T>) EntityUtils.getEntityClass(this.getClass());

	//private  RowMapper<T> rowMapper = new BeanPropertyRowMapper<T>(entityClass);
	
	private BeanPropertyRowMapper<T> rowMapper = new BeanPropertyRowMapper<T>(entityClass){
		@Override
		protected void initBeanWrapper(BeanWrapper bw) {
			bw.registerCustomEditor(Gender.class, new GenderEditor());
			super.initBeanWrapper(bw);
		}
	};
	
	/**
	 * 获取实体
	 * @param id 对象的id(Serializable)
	 * @return T 对象
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public T get(Serializable id) {
		String sql = getSql() + "and id=? ";
		return (T)jdbcTemplate.queryForObject(sql, rowMapper, id);
	}

	/**
	 * 查询
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public List<T> query() {
		return (List<T>) jdbcTemplate.query(getSql(), rowMapper);
	}

	/**
	 * 查询
	 * @param page 分页参数
	 * @param whereSql 查询条件(例:o.name=?)
	 * @param params 查询条件对应的参数(List<Object>)
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public List<T> query(Page page, String whereSql, List<Object> params) {
		List<Object> paramList = new ArrayList<Object>();
		if(!StrUtils.isEmpty(whereSql) && !StrUtils.isEmpty(params)){
			for (Object object : params) {
				if(object instanceof Enum){
					paramList.add(((Enum)object).ordinal());
				}else{
					paramList.add(object);
				}
			}
		}
		String sql = getSql(page, whereSql, null);
		dealPage(page, sql, paramList);
		
		if(!StrUtils.isEmpty(page)){
			paramList.add(page.getOffSize());
			paramList.add(page.getCurrentSize());
		}
		return (List<T>)jdbcTemplate.query(sql, rowMapper, paramList.toArray());
	}

	/**
	 * 查询
	 * @param page 分页参数
	 * @param orderby 排序条件(LinkedHashMap<String, String>)
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public List<T> query(Page page, LinkedHashMap<String, String> orderby) {
		List<Object> paramsList = new ArrayList<Object>();
		
		String sql = getSql(page, null, orderby);
		dealPage(page, sql, paramsList);
		
		if(!StrUtils.isEmpty(page)){
			paramsList.add(page.getOffSize());
			paramsList.add(page.getCurrentSize());
		}
		return (List<T>)jdbcTemplate.query(sql, rowMapper, paramsList.toArray());
	}

	/**
	 * 查询
	 * @param page 分页参数
	 * @param whereSql 查询条件(例:o.name=?)
	 * @param params 查询条件对应的参数(List<Object>)
	 * @param orderby 排序条件(LinkedHashMap<String, String>)
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public List<T> query(Page page, String whereSql, List<Object> params, LinkedHashMap<String, String> orderby) {
		List<Object> paramsList = new ArrayList<Object>();
		if(!StrUtils.isEmpty(whereSql) && !StrUtils.isEmpty(params)){
			for (Object object : params) {
				if(object instanceof Enum){
					paramsList.add(((Enum)object).ordinal());
				}else{
					paramsList.add(object);
				}
			}
		}
		
		String sql = getSql(page, whereSql, orderby);
		//System.out.println("sql ="+sql);
		dealPage(page, sql, paramsList);
		
		if(!StrUtils.isEmpty(page)){
			paramsList.add(page.getOffSize());
			paramsList.add(page.getCurrentSize());
		}
		
		return (List<T>)jdbcTemplate.query(sql, rowMapper, paramsList.toArray());
	}

	/**
	 * 更新
	 * @param sql 自定义更新sql
	 * @param params 查询条件对应的参数(List<Object>)
	 * @return int 更新的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int update(String sql, List<Object> params) {
		//String sql="update person set name=? where id=?";
		return jdbcTemplate.update(sql, params.toArray());
	}
	
	/**
	 * 更新(先从数据库取出来再更新)
	 * @param t 更新的对象
	 * @return int 更新的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int update(T t) throws Exception{
		SqlEntity sqlEntity = getUpdateSql(t);
		//System.out.println("=====sqlEntity.getSql()="+sqlEntity.getSql());
		return jdbcTemplate.update(sqlEntity.getSql(), sqlEntity.getParams().toArray());
	}
	
	/**
	 * 更新(通过模板更新,把符合template条件的数据都更新为value对象中的值)
	 * @param t 更新的对象
	 * @return int 更新的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int update(T value,T template) throws Exception{
		SqlEntity sqlEntity = getUpdateSql(value,template);
		//System.out.println("=====update(T value,T template) sqlEntity.getSql()="+sqlEntity.getSql());
		return jdbcTemplate.update(sqlEntity.getSql(), sqlEntity.getParams().toArray());
	}
	
	/**
	 * 保存
	 * @param t 保存的对象
	 * @return int 保存的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int save(T t) throws Exception{
		SqlEntity sqlEntity = getSaveSql(t);
		return jdbcTemplate.update(sqlEntity.getSql(), sqlEntity.getParams().toArray());
	};

	/**
	 * 保存
	 * @param sql 自定义保存sql
	 * @param params 查询条件对应的参数(List<Object>)
	 * @return int 保存的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int save(String sql, List<Object> params) {
		//String sql="INSERT INTO person (`name`,age,create_time) VALUES(?,?,?);";
		return jdbcTemplate.update(sql, params.toArray());
	}

	/**
	 * 删除
	 * @param id 对象的id(Serializable)
	 * @return int 删除的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int delete(Serializable id) {
		String sql="delete from " + StrUtils.changeName(this.entityClass.getSimpleName()) + " where id=?";
		return jdbcTemplate.update(sql, id);
	}
	
	@SuppressWarnings("deprecation")
	@Override
	public int getCount(String whereSql, Object[] objects){
		String entityName = this.entityClass.getSimpleName();
		StringBuffer sql = new StringBuffer("select count(*) from ");
		sql.append(StrUtils.changeName(entityName));
		sql.append(" o ").append(whereSql);
		//System.out.println("getCount sql.toString()="+sql.toString());
		//return jdbcTemplate.queryForInt(sql.toString(), entityClass);
		return jdbcTemplate.queryForInt(sql.toString(), objects);
				
	}
	
	protected String getSql(){
		String entityName = this.entityClass.getSimpleName();
		StringBuffer sql = new StringBuffer("select * from ");
		sql.append(StrUtils.changeName(entityName));
		sql.append(" o where 1=1 ");
		return sql.toString();
	}
	
	protected String getSql(String whereSql){
		String entityName = this.entityClass.getSimpleName();
		StringBuffer sql = new StringBuffer("select * from ");
		sql.append(StrUtils.changeName(entityName));
		sql.append(" o where 1=1 ");
		if(!StrUtils.isEmpty(whereSql)){
			sql.append(" ").append(whereSql);
		}
		return sql.toString();
	}
	
	/**
	 * 获取sql
	 * @param page 分页参数,如果为空,则不在sql增加limit ?,? 
	 * @param orderby 排序参数,如果为空,则不在sql增加ORDER BY
	 * @param whereSql 查询条件参数,如果为空,则不在sql增加 and name=?
	 * @return sql
	 */
	protected String getSql(Page page, String whereSql, Map<String,String> orderby){
		String entityName = this.entityClass.getSimpleName();
		StringBuffer sql = new StringBuffer("select * from ");
		sql.append(StrUtils.changeName(entityName));
		sql.append(" o where 1=1 ");
		if(!StrUtils.isEmpty(whereSql)){
			sql.append(" ").append(whereSql);
		}
		if(!StrUtils.isEmpty(orderby)){
			sql.append(" ORDER BY ");
			for (String string : orderby.keySet()) {
				String value = orderby.get(string);
				if(StrUtils.isEmpty(value)){
					value = "ASC";
				}
				sql.append("o.").append(string).append(" ").append(value.toUpperCase()).append(",");
			}
			if(sql.indexOf(",") > -1){
				sql.deleteCharAt(sql.length()-1);
			}
		}
		if(!StrUtils.isEmpty(page)){
			sql.append(" limit ?,? ");
		}
		//System.out.println("------sql.toString()="+sql.toString());
		return sql.toString();
	}
	
	private SqlEntity getUpdateSql(T t) throws Exception{
		SqlEntity sqlEntity = new SqlEntity();
		sqlEntity.setParams(new ArrayList<Object>());
		Field[] fields = entityClass.getDeclaredFields();
		StringBuffer sql = new StringBuffer("");
		sql.append("update ").append(StrUtils.changeName(entityClass.getSimpleName())).append(" o set ");
		for (Field field : fields) {
			StringBuffer methodName = new StringBuffer("");
			//System.out.println("===field.getType()="+field.getType());
			if(field.getType() == boolean.class){
				if(field.getName().contains("is")){
					methodName.append(field.getName());
				}else{
					methodName.append("is").append(StrUtils.firstCodeToUpperCase(field.getName()));
				}
			}else{
				methodName.append("get").append(StrUtils.firstCodeToUpperCase(field.getName()));
			}
			if(!"id".equals(field.getName())){
				Method method = entityClass.getMethod(methodName.toString(), new Class[]{});
				Object objectValue = method.invoke(t, new Object[]{});
				if(objectValue instanceof Enum){
					sqlEntity.getParams().add(((Enum)objectValue).ordinal());
				}else{
					sqlEntity.getParams().add(objectValue);
				}
				sql.append(" o.").append(StrUtils.changeName(field.getName())).append("= ?,");
			}
		}
		if(sql.indexOf(",") > -1){
			sql.deleteCharAt(sql.length() - 1);
		}
		sql.append(" where o.id=?");
		Method idMethod = entityClass.getMethod("getId", new Class[]{});
		sqlEntity.getParams().add(idMethod.invoke(t, new Object[]{}));
		sqlEntity.setSql(sql.toString());
		return sqlEntity;
	}
	
	private SqlEntity getUpdateSql(T value, T template) throws Exception{
		
		SqlEntity sqlEntity = new SqlEntity();
		sqlEntity.setParams(new ArrayList<Object>());
		Field[] fields = entityClass.getDeclaredFields();
		StringBuffer sql = new StringBuffer("");
		sql.append("update ").append(StrUtils.changeName(entityClass.getSimpleName())).append(" o set ");
		StringBuffer whereSql = new StringBuffer(" where ");
		for (Field field : fields) {
			StringBuffer methodName = new StringBuffer("");
			//System.out.println("===field.getType()="+field.getType());
			if(field.getType() == boolean.class){
				if(field.getName().contains("is")){
					methodName.append(field.getName());
				}else{
					methodName.append("is").append(StrUtils.firstCodeToUpperCase(field.getName()));
				}
			}else{
				methodName.append("get").append(StrUtils.firstCodeToUpperCase(field.getName()));
			}
			if(!"id".equals(field.getName())){
				Method method = entityClass.getMethod(methodName.toString(), new Class[]{});
				Object objectValue = method.invoke(value, new Object[]{});
				if(!StrUtils.isEmpty(objectValue)){
					if(objectValue instanceof Enum){
						sqlEntity.getParams().add(((Enum)objectValue).ordinal());
					}else{
						sqlEntity.getParams().add(objectValue);
					}
					//sqlEntity.getParams().add(objectValue);
					sql.append(" o.").append(StrUtils.changeName(field.getName())).append("= ?,");
				}
			}
		}
		
		for (Field field : fields) {
			StringBuffer methodName = new StringBuffer("");
			if(field.getType() == boolean.class){
				if(field.getName().contains("is")){
					methodName.append(field.getName());
				}else{
					methodName.append("is").append(StrUtils.firstCodeToUpperCase(field.getName()));
				}
			}else{
				methodName.append("get").append(StrUtils.firstCodeToUpperCase(field.getName()));
			}
			Method method = entityClass.getMethod(methodName.toString(), new Class[]{});
			Object objectValue = method.invoke(template, new Object[]{});
			if(!StrUtils.isEmpty(objectValue)){
				sqlEntity.getParams().add(objectValue);
				whereSql.append(" o.").append(StrUtils.changeName(field.getName())).append("= ? and");
			}
		}
		if(sql.indexOf(",") > -1){
			sql.deleteCharAt(sql.length() - 1);
		}
		if(whereSql.indexOf("and") > -1){
			sql.append(whereSql.substring(0, whereSql.length()-3));
			whereSql = new StringBuffer();
		}else{
			sql.append(whereSql);
		}
		sqlEntity.setSql(sql.toString());
		return sqlEntity;
	}
	
	private SqlEntity getSaveSql(T t) throws Exception{
		SqlEntity sqlEntity = new SqlEntity();
		sqlEntity.setParams(new ArrayList<Object>());
		Field[] fields = entityClass.getDeclaredFields();
		StringBuffer sql = new StringBuffer("");
		sql.append("insert into ").append(StrUtils.changeName(entityClass.getSimpleName())).append(" ( ");
		int paramLength = 0;
		for (Field field : fields) {
			StringBuffer methodName = new StringBuffer("");
			if(field.getType() == boolean.class){
				if(field.getName().contains("is")){
					methodName.append(field.getName());
				}else{
					methodName.append("is").append(StrUtils.firstCodeToUpperCase(field.getName()));
				}
			}else{
				methodName.append("get").append(StrUtils.firstCodeToUpperCase(field.getName()));
			}
			Method method = entityClass.getMethod(methodName.toString(), new Class[]{});
			Object value = method.invoke(t, new Object[]{});
			if(!StrUtils.isEmpty(value)){
				if(value instanceof Enum){
					sqlEntity.getParams().add(((Enum) value).ordinal());
				}else{
					sqlEntity.getParams().add(value);
				}
				sql.append("`").append(StrUtils.changeName(field.getName())).append("`").append(",");
				paramLength ++;
			}
		}
		if(sql.indexOf(",") > -1){
			sql.deleteCharAt(sql.length() - 1);
		}
		sql.append(") values(");
		for (int i=0;i<paramLength;i++) {
			sql.append("?,");
		}
		if(sql.indexOf(",") > -1){
			sql.deleteCharAt(sql.length() - 1);
		}
		sql.append(")");
		//System.out.println("sql.toString()="+sql.toString());
		sqlEntity.setSql(sql.toString());
		return sqlEntity;
	}
	
	private void dealPage(Page page, String sql, List<Object> params){
		String whereSql = "";
		if(sql != null && !sql.trim().equals("")){
			int whereIndex = sql.toLowerCase().indexOf("where");
			int orderIndex = sql.toLowerCase().indexOf("order");
			int limitIndex = sql.toLowerCase().indexOf("limit");
			if(whereIndex > -1){
				whereSql = sql.substring(whereIndex, sql.length());
				orderIndex = whereSql.toLowerCase().indexOf("order");
			}
			if(whereIndex > -1 && orderIndex > -1){
				whereSql = whereSql.substring(0, orderIndex - 1);
				limitIndex = whereSql.toLowerCase().indexOf("limit");
			}
			if(whereIndex > -1 && limitIndex > -1){
				whereSql = whereSql.substring(0, limitIndex - 1);
			}
		}
		if(page.getTotalSizeNew()){
			page.setTotalSize(getCount(whereSql, params.toArray()));
		}
		setPage(page);
	}
	
	private void setPage(Page page){
		page.setTotalPages(page.getTotalSize()%page.getCurrentSize()==0?page.getTotalSize()/page.getCurrentSize():(page.getTotalSize()/page.getCurrentSize()+1));
		page.setCurrentPage(page.getOffSize()/page.getCurrentSize()+1);
	}
}

 

 

package com.lqy.spring.dao;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import com.lqy.spring.bean.Page;


public interface BaseDao<T> {

	public T get(Serializable id);
	
	public List<T> query();
	
	public List<T> query(Page page, String whereSql, List<Object> params);
	
	public List<T> query(Page page, LinkedHashMap<String, String> orderby);
	
	public List<T> query(Page page, String whereSql, List<Object> params, LinkedHashMap<String, String> orderby);
	
	public int update(String sql, List<Object> params);
	
	public int update(T t) throws Exception;
	
	public int update(T value,T template) throws Exception;
	
	public int save(T t) throws Exception;
	
	public int save(String sql, List<Object> params);
	
	public int delete(Serializable id);
	
	public int getCount(String whereSql, Object[] objects);
}

 

package com.lqy.spring.service.impl;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import com.lqy.spring.bean.Page;
import com.lqy.spring.dao.BaseDao;
import com.lqy.spring.service.BaseService;

@Transactional
public class BaseServiceImpl<T> implements BaseService<T> {

	@Autowired
	BaseDao<T> baseDao;
	
	/**
	 * 获取实体
	 * @param id 对象的id(Serializable)
	 * @return T 对象
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Transactional(isolation=Isolation.READ_COMMITTED,
			readOnly=true)
	@Override
	public T get(Serializable id) {
		return baseDao.get(id);
	}

	/**
	 * 查询
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Transactional(isolation=Isolation.READ_COMMITTED,readOnly=true)
	@Override
	public List<T> query() {
		return baseDao.query();
	}

	/**
	 * 查询
	 * @param page 分页参数
	 * @param whereSql 查询条件(例:o.name=?)
	 * @param params 查询条件对应的参数(List<Object>)
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Transactional(isolation=Isolation.READ_COMMITTED,
			readOnly=true)
	@Override
	public List<T> query(Page page, String whereSql, List<Object> params) {
		return baseDao.query(page, whereSql, params);
	}

	/**
	 * 查询
	 * @param page 分页参数
	 * @param orderby 排序条件(LinkedHashMap<String, String>)
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Transactional(isolation=Isolation.READ_COMMITTED,
			readOnly=true)
	@Override
	public List<T> query(Page page, LinkedHashMap<String, String> orderby) {
		return baseDao.query(page, orderby);
	}

	/**
	 * 查询
	 * @param page 分页参数
	 * @param whereSql 查询条件(例:o.name=?)
	 * @param params 查询条件对应的参数(List<Object>)
	 * @param orderby 排序条件(LinkedHashMap<String, String>)
	 * @return List<T>
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Transactional(isolation=Isolation.READ_COMMITTED,
			readOnly=true)
	@Override
	public List<T> query(Page page, String whereSql, List<Object> params,
			LinkedHashMap<String, String> orderby) {
		return baseDao.query(page, whereSql, params, orderby);
	}

	/**
	 * 更新
	 * @param sql 自定义更新sql
	 * @param params 查询条件对应的参数(List<Object>)
	 * @return int 更新的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int update(String sql, List<Object> params) {
		return baseDao.update(sql, params);
	}

	/**
	 * 更新(先从数据库取出来再更新)
	 * @param t 更新的对象
	 * @return int 更新的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int update(T t) throws Exception {
		return baseDao.update(t);
	}
	
	/**
	 * 更新(通过模板更新,把符合template条件的数据都更新为value对象中的值)
	 * @param t 更新的对象
	 * @return int 更新的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int update(T value,T template) throws Exception{
		return baseDao.update(value,template);
	}

	/**
	 * 保存
	 * @param t 保存的对象
	 * @return int 保存的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int save(T t) throws Exception {
		return baseDao.save(t);
	}

	/**
	 * 保存
	 * @param sql 自定义保存sql
	 * @param params 查询条件对应的参数(List<Object>)
	 * @return int 保存的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int save(String sql, List<Object> params) {
		return baseDao.save(sql, params);
	}

	/**
	 * 删除
	 * @param id 对象的id(Serializable)
	 * @return int 删除的数量
	 * @author lqy
	 * @since 2015-10-18
	 */
	@Override
	public int delete(Serializable id) {
		return baseDao.delete(id);
	}

}

 

package com.lqy.spring.service;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import com.lqy.spring.bean.Page;


public interface BaseService<T> {

	public T get(Serializable id);
	
	public List<T> query();
	
	public List<T> query(Page page, String whereSql, List<Object> params);
	
	public List<T> query(Page page, LinkedHashMap<String, String> orderby);
	
	public List<T> query(Page page, String whereSql, List<Object> params, LinkedHashMap<String, String> orderby);
	
	public int update(String sql, List<Object> params);
	
	public int update(T t) throws Exception;
	
	public int update(T value,T template) throws Exception;
	
	public int save(T t) throws Exception;
	
	public int save(String sql, List<Object> params);
	
	public int delete(Serializable id);
}

 

package com.lqy.spring.bean;

public class Page {

	private int currentSize;
	private int offSize;
	private int totalSize;
	private int totalPages;
	private int currentPage;
	private Boolean totalSizeNew;
	
	/**
	 * 分页构造函数
	 * @author lqy
	 * @since 2015-10-22
	 */
	public Page() {
		super();
	}
	
	
	/**
	 * 分页构造函数
	 * @param currentSize
	 * @param offSize
	 * @author lqy
	 * @since 2015-10-22
	 */
	public Page(int currentSize, int offSize) {
		super();
		this.currentSize = currentSize;
		this.offSize = offSize;
	}

	/**
	 * 分页构造函数
	 * @param currentSize
	 * @param offSize
	 * @param totalSizeNew
	 * @author lqy
	 * @since 2015-10-22
	 */
	public Page(int currentSize, int offSize, boolean totalSizeNew) {
		super();
		this.currentSize = currentSize;
		this.offSize = offSize;
		this.totalSizeNew = totalSizeNew;
	}

	/**
	 * 分页构造函数
	 * @param currentSize
	 * @param offSize
	 * @param totalSize
	 * @param totalPages
	 * @param currentPage
	 * @param totalSizeNew
	 * @author lqy
	 * @since 2015-10-22
	 */
	public Page(int currentSize, int offSize, int totalSize, int totalPages,
			int currentPage, boolean totalSizeNew) {
		super();
		this.currentSize = currentSize;
		this.offSize = offSize;
		this.totalSize = totalSize;
		this.totalPages = totalPages;
		this.currentPage = currentPage;
		this.totalSizeNew = totalSizeNew;
	}

	public int getCurrentSize() {
		return currentSize;
	}

	public void setCurrentSize(int currentSize) {
		this.currentSize = currentSize;
	}

	public int getOffSize() {
		return offSize;
	}

	public void setOffSize(int offSize) {
		this.offSize = offSize;
	}

	public int getTotalSize() {
		return totalSize;
	}

	public void setTotalSize(int totalSize) {
		this.totalSize = totalSize;
	}

	public int getTotalPages() {
		return totalPages;
	}

	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public Boolean getTotalSizeNew() {
		return totalSizeNew;
	}

	public void setTotalSizeNew(Boolean totalSizeNew) {
		this.totalSizeNew = totalSizeNew;
	}

	@Override
	public String toString() {
		return "Page [currentSize=" + currentSize + ", offSize=" + offSize
				+ ", totalSize=" + totalSize + ", totalPages=" + totalPages
				+ ", currentPage=" + currentPage + ", totalSizeNew="
				+ totalSizeNew + "]";
	}

	
	
	
	
}

 

 

使用的一个例子:

package com.lqy.spring.service.impl;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.lqy.Utils.StrUtils;
import com.lqy.exception.PersonMoneyNotEnoughException;
import com.lqy.spring.bean.Page;
import com.lqy.spring.bean.Person;
import com.lqy.spring.dao.PersonDao;
import com.lqy.spring.service.BookService;
import com.lqy.spring.service.PersonService;


@Service
public class PersonServiceImpl extends BaseServiceImpl<Person> implements PersonService {
	
	@Autowired
	PersonDao personDao;
	@Autowired
	BookService bookService;
	
	@Override
	public List<Person> getPersons(Page page, String name, Integer age, Integer statusType){
		StringBuffer whereSql = new StringBuffer();
		List<Object> params = new ArrayList<Object>();
		LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
		
		if(!StrUtils.isEmpty(name)){
			whereSql.append(" and o.name like ?");
			params.add("%"+name+"%");
		}
		if(!StrUtils.isEmpty(age)){
			whereSql.append(" and o.age = ?");
			params.add(age);
		}
		if(!StrUtils.isEmpty(statusType)){
			whereSql.append(" and o.statusType = ?");
			params.add(statusType);
		}
		orderby.put("create_time", "desc");
		orderby.put("id", "desc");
		
		return personDao.query(page, whereSql.toString(), params, orderby);
	}
	
	@Transactional
	public int buyBook(Integer personId, Double price) throws Exception{
		int result = -1;
		Person person = personDao.get(personId);
		if(!StrUtils.isEmpty(person)){
			Double leftMoney = person.getMoney() - price;
			if(leftMoney >= 0){
				person.setMoney(leftMoney);
				result = personDao.update(person);
			}else{
				throw new PersonMoneyNotEnoughException();
			}
		}
		return result;
	}
	
	@Transactional
	@Override
	public int buyBook(Integer personId, Integer bookId, Integer amount) throws Exception{
		int result = -1;
		Person person = personDao.get(personId);
		if(!StrUtils.isEmpty(person)){
			Double price = bookService.getBooksPrices(bookId, amount);
			Double leftMoney = person.getMoney() - price;
			if(leftMoney >= 0){
				person.setMoney(leftMoney);
				personDao.update(person);
				bookService.sellBooks(bookId, amount);
				result = 1;
			}else{
				throw new PersonMoneyNotEnoughException();
			}
		}
		return result;
	}
	
}

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年7月6日

http://fanshuyao.iteye.com/

  • 大小: 12.1 KB
1
1
分享到:
评论
4 楼 overshit 2018-01-22  
缺少辅助类。
3 楼 蕃薯耀 2017-07-10  
masuweng 写道
这些分装能与mybitas项目整合了吗,,,, 准备整合个ssm项目了。


这个不需要和Mybatis整合了,直接用spring整合。
你直接看这个吧:http://www.oschina.net/code/snippet_733736_37996
2 楼 masuweng 2017-07-06  
这些分装能与mybitas项目整合了吗,,,, 准备整合个ssm项目了。
1 楼 蕃薯耀 2017-07-06  
SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao

>>>>>>>>>
蕃薯耀

相关推荐

    baseDao封装基本的增删查改方法

    使用baseDao封装基本的增删改查的方法,包括分页查询等功能

    Mybatis通用DAO设计封装(mybatis)

    Mybatis是一款轻量级的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。通过提供自定义SQL、存储过程以及高级映射,Mybatis使得开发者能够专注于编写高质量的代码,而无需关心底层数据库交互...

    基于SpringJDBC的BaseDAO

    ### 基于Spring JDBC的BaseDAO实现与应用 #### 概述 在Java开发领域,尤其是企业级应用开发中,持久层框架是至关重要的组件之一。Spring框架提供了多种方式来处理数据库操作,其中Spring JDBC模块是轻量级且功能...

    Spring JDBC BaseDao

    基于Spring JDBC 的一个公用持久化层源代码,支持普通的增删改查,仅支持Spring JDBC环境使用~

    Spring JdbcTemplate

    在提供的文件列表中,`BaseDao.java`和`BaseDaoImpl.java`很可能是自定义的基类和实现类,用于封装JdbcTemplate的常用操作。BaseDao通常会定义一些基本的CRUD(创建、读取、更新、删除)方法,如`selectById(int id)...

    JDBCTemplate+JavaPOJO实现通用DAO

    通过这个项目,你可以学习到如何利用Spring的JDBCTemplate和Java POJO来构建一个可复用、易于维护的DAO层,提升代码的可读性和可扩展性。同时,这也是一个良好的实践,帮助开发者遵循面向接口编程和低耦合的设计原则...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    本项目结合了Spring 4和Hibernate 4,旨在提供一个基础的数据访问层(DAO)实现,包括基本的CRUD操作(创建、读取、更新、删除)以及分页功能。以下是关于这个项目的详细知识点: 1. **Spring 4**:Spring框架是...

    Android 使用ORMLite打造万能泛型Dao简化数据持久化层

    本文将深入探讨如何使用ORMLite在Android中构建一个万能泛型Dao,以实现数据持久化的高效管理。 首先,我们需要理解什么是ORM。ORM是Object-Relational Mapping的缩写,它的主要作用是提供一种机制,将数据库的表格...

    S2SH整合例子 注解配置 JSON 泛型Dao

    例如,可以有一个`BaseDao&lt;T&gt;`接口,其中T代表任意实体类型,然后针对每种实体创建具体的Dao实现类。 在实际开发中,`base`可能是指基础配置文件或者示例代码,包括Spring的bean配置文件(如`beans.xml`)、Struts2...

    基于JDBC封装的BaseDao(实例代码)

    本篇文章将介绍一个基于JDBC封装的`BaseDao`实例,该实例提供了一个通用的DAO(Data Access Object)模板,可以应用于多种实体类的操作。 首先,`BaseDao`泛型类被定义为`&lt;T&gt;`,表示它可以处理任何类型的对象。类中...

    基于泛型反射的数据层封装+MSSQLJDBC3.0驱动

    在数据层封装中,泛型通常被用来创建通用的DAO(Data Access Object)类,这样我们就可以为不同的数据库表或对象创建单一的DAO实现,只需要指定对应的实体类类型即可。例如,我们可以定义一个`BaseDAO&lt;T&gt;`,其中`T`...

    SSH 泛型DAO分页

    4. **泛型DAO**: 在SSH框架中,泛型DAO是一种常见的设计模式,用于封装对数据库的基本操作,如增删查改。通过泛型,我们可以创建一个通用的DAO接口和实现,减少代码重复,提高代码复用。例如,我们可以创建一个`...

    Hibernate封装dao层

    "Hibernate封装DAO层"就是将Hibernate的功能整合到DAO设计模式中,以实现更加高效、规范的数据库操作。 1. **DAO设计模式**: DAO模式是软件设计模式的一种,它的核心思想是创建一个独立于具体数据库操作的对象,...

    java泛型BaseDao与BaseService

    在Java开发中,BaseDao和BaseService是常见的设计模式,用于实现数据访问层(DAO)和业务逻辑层(Service)的抽象基类。通过结合泛型,我们可以创建更通用、灵活的代码,减少冗余并提高代码质量。 首先,我们来理解...

    java 基于泛型与反射的通用 DAO

    在`BaseDao.java`中,可能会定义一个泛型基类,如: ```java public abstract class BaseDao&lt;T&gt; { public abstract void save(T entity); public abstract T findById(ID id); // 其他通用操作 } ``` 这里的`...

    ssh整合下的通用泛型DAO+分页

    在SSH框架中,我们可以创建一个基础的泛型DAO接口,如`BaseDao&lt;T&gt;`,其中`T`代表任何实体类。这个接口通常包含基本的CRUD(创建、读取、更新、删除)操作,如`save()`, `get()`, `update()`, 和 `delete()`。然后,...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    2、基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,对于使用spring jdbc的人会有一点价值,比较简洁的封装可以节省很多重复劳动,具体节省多少可以看看example; 3、实现一套简单的ORM(直接使用...

    BaseDao的封装

    在IT行业中,数据库操作是应用程序的核心部分,而`BaseDao`的封装则是一种常见的设计模式,用于简化数据库访问层(DAO)的实现。这个模式的主要目的是提高代码的可复用性和可维护性,减少重复的SQL操作代码。下面...

    hibernate basedao(泛型版本)

    在Java的持久层框架Hibernate中,BaseDAO(基础数据访问对象)是常用的设计模式,用于封装对数据库的基本操作。在给定的“hibernate basedao(泛型版本)”中,开发人员通过引入泛型进一步提高了代码的复用性和灵活...

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    在Java Web开发中,S2SH(Struts2 + Spring + Hibernate)是一个常见的技术栈,它结合了MVC框架Struts2、依赖注入容器Spring以及持久层框架Hibernate,以实现高效且灵活的Web应用开发。在这个基于Annotation并对DAO...

Global site tag (gtag.js) - Google Analytics