JdbcTemplate使用

JdbcTemplate

简介

JdbcTemplate 是spring对JDBC的封装

自定义SqlString类对JdbcTemplate再次进行封装,以便使用:

用到的方法

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
/**
 * @Description:
 *          简单的自定义sql拼接类,用来明确描述拼接sql的行为
 */
@Component
@Scope(value = "prototype")
public class SQLString implements Serializable ,Cloneable{

	static final long serialVersionUID = 1213885877147921107L;

	private StringBuffer sqlSentence;

	@Autowired
	private JdbcTemplate jdbcTemplate;

	@Autowired
	private OracleDialect oracleDialect;

	@Autowired
	private MysqlDialect mysqlDialect;

	/** 默认数据库类型*/
	@Value("${sqlDialect.databaseType}")
	private String databaseType;

	private SqlDialect sqlDialect;

	public SQLString() {
		this.sqlSentence = new StringBuffer();
	}

	public SQLString append(String str){
		this.sqlSentence.append(str);
		return this;
	}

	public SQLString before(String str){
		this.sqlSentence.insert(0,str);
		return this;
	}

	public SQLString arround(String prefix,String suffix){
		this.sqlSentence.insert(0,prefix);
		this.sqlSentence.insert(this.sqlSentence.length(),suffix);
		return this;
	}

	public SQLString count() {
		setSqlModel();
		sqlDialect.count(this.clone());
		return this;
	}

	public SQLString limit(Integer offset, Integer startIndex) {
		return null;
	}

	public SQLString paging(Integer pageNo, Integer pageSize) {
		System.out.println("--------------------"+databaseType);
		setSqlModel();
		sqlDialect.paging(this.clone(),pageNo,pageSize);
		return this;
	}

	public SQLString countIf(String where) {
		return null;
	}

	/**
	 * @param rowMapper
	 * @return List<T>
	 * @notice
	 *       映射实体查询方法
	 */
	public <T> List<T> query(BeanPropertyRowMapper<T> rowMapper){
		List<T> result = jdbcTemplate.query(getSqlSentence().toString(), rowMapper);
		return result;
	}

	/**
	 * @param
	 * @return List<Map<String,Object>>
	 * @notice
	 *       直接查询List方法
	 */
	public List<Map<String,Object>> queryForList(){
		return  jdbcTemplate.queryForList(getSqlSentence().toString());
	}


	public int queryForCount(){
		Map<String, Object> map = jdbcTemplate.queryForMap(getSqlSentence().toString());
		Integer count = Integer.valueOf(map.get("count")+"");
		return count;
	}

	public void setSqlModel(){
		if(databaseType.equals(DatabaseType.ORACLE)){
			this.sqlDialect = oracleDialect;
		}
		if(databaseType.equals(DatabaseType.MYSQL)){
			this.sqlDialect = mysqlDialect;
		}
	}

	@Override
	public String toString(){
		return this.sqlSentence.toString();
	}

	public int length(){
		return this.sqlSentence.length();
	}

	public boolean isEmpty(){
		return this.sqlSentence==null||this.sqlSentence.length()==0;
	}

	public void clean(){
		setSqlSentence(new StringBuffer());
	}

	public SQLString where(String... conditions){
		if(conditions == null||conditions.length==0)
			throw new IllegalParametersException("conditions is null or empty");
		String con = "";
		for (String condition :conditions) {
			con += "  "+condition+"  and";
		}
		String connew = con.substring(0, con.length() - 3);
		this.sqlSentence.append("where   "+connew);
		return this;
	}

	/**深拷贝,利用序列化和反序列化实现  使用 apache的jar 的工具类实现
	 *   对象中使用了 jdbcTemplate 此对象没有实现序列化接口 故不可以深拷贝*/
	public SQLString deepClone() {
		SQLString clone = null;
		try{
			clone = SerializationUtils.clone(this);
		}catch(Exception e) {
			e.printStackTrace();
		}
		return clone;
	}

	@Override
	public SQLString clone(){
		SQLString clone = null;
		try{
			clone = (SQLString)super.clone();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return clone;
	}

	public void execute(){
		jdbcTemplate.execute(getSqlSentence().toString());
	}


	public void changeDatabaseType(String databaseType){
		setDatabaseType(databaseType);
	}

	public StringBuffer getSqlSentence() {
		return sqlSentence;
	}

	public void setSqlSentence(StringBuffer sqlSentence) {
		this.sqlSentence = sqlSentence;
	}

	public String getDatabaseType() {
		return databaseType;
	}

	public void setDatabaseType(String databaseType) {
		this.databaseType = databaseType;
	}

	public SqlDialect getSqlDialect() {
		return sqlDialect;
	}

	public void setSqlDialect(SqlDialect sqlDialect) {
		this.sqlDialect = sqlDialect;
	}

}

具体使用时在将此类聚合到具体类型的类中即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Songgp1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值