Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.github.edgar615.util.spring.jdbc.JdbcOperationImpl Maven / Gradle / Ivy
package com.github.edgar615.util.spring.jdbc;
import com.github.edgar615.util.base.StringUtils;
import com.github.edgar615.util.db.Persistent;
import com.github.edgar615.util.db.SQLBindings;
import com.github.edgar615.util.db.SqlBuilder;
import com.github.edgar615.util.search.Example;
import com.google.common.collect.Lists;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.sql.DataSource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
/**
* Created by Edgar on 2017/8/8.
*
* @author Edgar Date 2017/8/8
*/
public class JdbcOperationImpl implements JdbcOperation {
private final DataSource dataSource;
public JdbcOperationImpl(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public void insert(Persistent persistent) {
SQLBindings sqlBindings = SqlBuilder.insert(persistent);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(sqlBindings.sql(), sqlBindings.bindings().toArray());
}
@Override
public ID insertAndGeneratedKey(Persistent persistent) {
SQLBindings sqlBindings = SqlBuilder.insert(persistent);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
connection -> {
PreparedStatement ps
= connection.prepareStatement(sqlBindings.sql(),
new String[]{StringUtils.underscoreName(
persistent.primaryField())}
);
int i = 1;
for (Object arg : sqlBindings.bindings()) {
ps.setObject(i++, arg);
}
return ps;
},
keyHolder);
persistent.setGeneratedKey(keyHolder.getKey());
return persistent.id();
}
@Override
public > void batchInsert(List persistentList) {
if (persistentList == null || persistentList.isEmpty()) {
return;
}
if (persistentList.size() == 1) {
insert(persistentList.get(0));
return;
}
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List sqlBindingsList = persistentList.stream()
.map(p -> SqlBuilder.fullInsertSql(p))
.collect(Collectors.toList());
String sql = sqlBindingsList.get(0).sql();
List args = sqlBindingsList.stream()
.map(sqlBindings -> sqlBindings.bindings().toArray())
.collect(Collectors.toList());
jdbcTemplate.batchUpdate(sql, args);
}
@Override
public > int deleteById(Class elementType, ID id) {
SQLBindings sqlBindings = SqlBuilder.deleteById(elementType, id);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.update(sqlBindings.sql(), sqlBindings.bindings().toArray());
}
@Override
public > int deleteByExample(Class elementType,
Example example) {
SQLBindings sqlBindings = SqlBuilder.deleteByExample(elementType, example);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.update(sqlBindings.sql(), sqlBindings.bindings().toArray());
}
@Override
public int updateById(Persistent persistent,
Map addOrSub,
List nullFields, ID id) {
SQLBindings sqlBindings = SqlBuilder.updateById(persistent, addOrSub, nullFields, id);
if (sqlBindings == null) {
return 0;
}
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.update(sqlBindings.sql(), sqlBindings.bindings().toArray());
}
@Override
public int updateByExample(Persistent persistent,
Map addOrSub,
List nullFields,
Example example) {
SQLBindings sqlBindings = SqlBuilder.updateByExample(persistent, addOrSub, nullFields, example);
if (sqlBindings == null) {
return 0;
}
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.update(sqlBindings.sql(), sqlBindings.bindings().toArray());
}
/**
* 根据主键更新,忽略实体中的null.
*
* @param persistent 持久化对象
* @param id 主键
* @param 主键类型
* @return 修改记录数
*/
@Override
public int updateById(Persistent persistent, ID id) {
return updateById(persistent, new HashMap<>(), new ArrayList<>(), id);
}
/**
* 根据条件更新,忽略实体中的null.
*
* @param persistent 持久化对象
* @param example 查询条件
* @param 条件集合
* @return 修改记录数
*/
@Override
public int updateByExample(Persistent persistent, Example example) {
return updateByExample(persistent, new HashMap<>(), new ArrayList<>(), example);
}
@Override
public > T findById(Class elementType, ID id) {
return findById(elementType, id, Lists.newArrayList());
}
@Override
public > T findById(Class elementType, ID id,
List fields) {
SQLBindings sqlBindings = SqlBuilder.findById(elementType, id, fields);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List result =
jdbcTemplate.query(sqlBindings.sql(), sqlBindings.bindings().toArray(),
BeanPropertyRowMapper.newInstance(elementType));
if (result.isEmpty()) {
return null;
}
return result.get(0);
}
@Override
public > List findByExample(Class elementType,
Example example) {
SQLBindings sqlBindings = SqlBuilder.findByExample(elementType, example);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.query(sqlBindings.sql(), sqlBindings.bindings().toArray(),
BeanPropertyRowMapper.newInstance(elementType));
}
@Override
public > List findByExample(Class elementType, Example example,
int start, int limit) {
SQLBindings sqlBindings = SqlBuilder.findByExample(elementType, example, start, limit);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.query(sqlBindings.sql(), sqlBindings.bindings().toArray(),
BeanPropertyRowMapper.newInstance(elementType));
}
@Override
public > int countByExample(Class elementType,
Example example) {
SQLBindings sqlBindings = SqlBuilder.countByExample(elementType, example);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate
.queryForObject(sqlBindings.sql(), Integer.class, sqlBindings.bindings().toArray());
}
}