springTemplate 收藏的

 

本文收藏自 http://my.oschina.net/jolphin/blog/61693

package com.team.dao;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;

import com.team.util.PageHelper;

public interface Jdbc {

	// JdbcTemplate
	public JdbcTemplate getJdbcTemplate();
	
	// 更新
	public int update(String sql, Object... args);
	
	// 统计
	public long stat(String sql, Object... args);
	
	// 查找
	public <T> T find(String sql, Class<T> clazz, Object... args);

	// 查询
	public <T> List<T> query(String sql, Class<T> clazz, Object... args);
	
	// 分页
	public <T> PageHelper<T> query(String sql, long count, Class<T> clazz, Object... args);
	
	// 命名更新
	public <T> int updateNamed(String namedSql, T bean);
	
	// 批量命名更新
	public <T> int[] updateNamed(String namedSql, List<T> beans);
	
	// 命名更新
	public int updateNamedMap(String namedSql, Map<String, Object> paramMap);
	
	// 批量命名更新
	public int[] updateNamedMap(String namedSql, List<Map<String, Object>> paramMaps);
}
package com.team.dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterUtils;
import org.springframework.jdbc.core.namedparam.ParsedSql;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.team.util.PageHelper;

@Repository
@Transactional
public class JdbcSupport implements Jdbc {
	
	@Resource
	protected JdbcTemplate jdbcTemplate;
	
	@Override
	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

	@Override
	public int update(String sql, Object... args) {
		return jdbcTemplate.update(sql, args);
	}
	
	@Override
	@Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=true)
	public long stat(String sql, Object... args) {
		return jdbcTemplate.queryForLong(sql, args);
	}

	@Override
	@Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=true)
	public <T> T find(String sql, Class<T> clazz, Object... args) {
		try {
			return jdbcTemplate.queryForObject(sql, BeanPropertyRowMapper.newInstance(clazz), args);
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}

	@Override
	@Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=true)
	public <T> List<T> query(String sql, Class<T> clazz, Object... args) {
		return jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(clazz), args);
	}

	@Override
	@Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=true)
	public <T> PageHelper<T> query(String sql, long count, Class<T> clazz, Object... args) {
		int page = 0;
		int size = 0;
		
		if (args != null && args.length >= 2) {
			page = (Integer)args[args.length - 2];
			size = (Integer)args[args.length - 1];
		}
		page = (page < 1) ? 1 : page;
		size = (size < 1) ? 1 : size;
		int from = (page - 1) * size;
		
		args[args.length - 2] = from;
		args[args.length - 1] = size;
		
		List<T> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(clazz), args);
		
		return new PageHelper<T>(list, count, page, size);
	}
	
	@Override
	public <T> int updateNamed(String namedSql, T bean) {
		String sql = NamedParameterUtils.parseSqlStatementIntoString(namedSql);
		ParsedSql parsedSql = NamedParameterUtils.parseSqlStatement(namedSql);
		
		BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(bean);
		List<SqlParameter> params = NamedParameterUtils.buildSqlParameterList(parsedSql, source);
		
		Object[] args = NamedParameterUtils.buildValueArray(parsedSql, source, params);
		
		return jdbcTemplate.update(sql, args);
	}
	
	@Override
	public <T> int[] updateNamed(String namedSql, List<T> beans) {
		String sql = NamedParameterUtils.parseSqlStatementIntoString(namedSql);
		ParsedSql parsedSql = NamedParameterUtils.parseSqlStatement(namedSql);
		List<Object[]> batchArgs = new ArrayList<Object[]>();
		
		for(T bean : beans){
			BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(bean);
			List<SqlParameter> params = NamedParameterUtils.buildSqlParameterList(parsedSql, source);
			
			Object[] args = NamedParameterUtils.buildValueArray(parsedSql, source, params);
			batchArgs.add(args);
		}
		return jdbcTemplate.batchUpdate(sql, batchArgs);
	}
	
	@Override
	public int updateNamedMap(String namedSql, Map<String, Object> paramMap) {
		String sql = NamedParameterUtils.parseSqlStatementIntoString(namedSql);
		Object[] args = NamedParameterUtils.buildValueArray(namedSql, paramMap);
		
		return jdbcTemplate.update(sql, args);
	}
	
	@Override
	public int[] updateNamedMap(String namedSql, List<Map<String, Object>> paramMaps) {
		String sql = NamedParameterUtils.parseSqlStatementIntoString(namedSql);
		List<Object[]> batchArgs = new ArrayList<Object[]>();
		
		for(Map<String, Object> paramMap : paramMaps){
			Object[] args = NamedParameterUtils.buildValueArray(namedSql, paramMap);	
			batchArgs.add(args);
		}
		return jdbcTemplate.batchUpdate(sql, batchArgs);
	}
}
p
package junit.test.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.team.bean.User;
import com.team.dao.Jdbc;
import com.team.util.PageHelper;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JdbcTest {

	@Resource
	private Jdbc jdbc;
	
	@Test
	public void update(){
		jdbc.update("delete from user where id = ?", 110);
	}
	
	@Test
	public void updateNamed(){
		User user = new User();
		user.setUsername("username");
		user.setRealname("realname");
		user.setPassword("password");
		
		jdbc.updateNamed("insert into user(username, realname, password, memo) "+
				         "values(:username, :realname, :password, :memo)", user);
	}
	
	@Test
	@SuppressWarnings("serial")
	public void batchUpdate(){
		List<User> list = new ArrayList<User>(){{
			add(new User(1, null, null, "changePassword", null));
			add(new User(2, null, null, "changePassword", null));
			add(new User(3, null, null, "changePassword", null));
		}};
		
		jdbc.updateNamed("update user set password = :password where id = :id", list);
	}
	
	@Test
	@SuppressWarnings("serial")
	public void updateMap(){
		Map<String, Object> map = new HashMap<String, Object>(){{
			put("password", "changePawword");
			put("id", 110);	
		}};
		
		jdbc.updateNamedMap("update user set password = :password where id = :id", map);
	}
	
	@Test
	@SuppressWarnings("serial")
	public void batchUpdateMap(){
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		
		list.add(new HashMap<String, Object>() {{
			put("password", "changePawword");
			put("id", 110);
		}});
		
		list.add(new HashMap<String, Object>() {{
			put("password", "changePawword");
			put("id", 109);
		}});
		
		list.add(new HashMap<String, Object>() {{
			put("password", "changePawword");
			put("id", 108);
		}});
		
		jdbc.updateNamedMap("update user set password = :password where id = :id", list);
	}
	
	@Test
	public void query(){
		User user = jdbc.find("select * from user where id = ?", User.class, 110);
		System.out.println(user);
		
		List<User> list = jdbc.query("select * from user", User.class);
		for(User obj : list){
			System.out.println(obj);
		}
		
		long count = jdbc.stat("select count(*) from user");
		PageHelper<User> result = jdbc.query("select * from user limit ?, ?", count, User.class, 1, 10);
		for(User oo : result.getList()){
			System.out.println(oo);
		}
	}
}
package com.team.util;

import java.util.List;

//分页类
public class PageHelper<T> {

	private List<T> list; //结果集
	private long record; //总记录
	private long count; //总页数
	private int page;  //当前页
	private int size; //每页记录

	public PageHelper(List<T> list, long record, int page, int size) {
		this.list = list;
		this.page = page;
		this.size = size;
		this.record = record;
		this.count = (record+size-1)/size;
	}

	public List<T> getList() {
		return list;
	}

	public void setList(List<T> list) {
		this.list = list;
	}

	public long getRecord() {
		return record;
	}

	public void setRecord(long record) {
		this.record = record;
	}

	public long getCount() {
		return count;
	}

	public void setCount(long count) {
		this.count = count;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}
}
 

本文收藏自 http://my.oschina.net/jolphin/blog/61693

猜你喜欢

转载自treasurenow.iteye.com/blog/1848631