数据库访问公共方法实现抽象类
2018-03-17 11:50
465 查看
@Service
public abstract class AbstractCommonDaoImpl<T> implements CommonDao<T> {
private static Logger LOG = LogManager.getLogger(AbstractCommonDaoImpl.class);
private static int patchSize = 100;//一次批量插入数目
@PersistenceContext(unitName = "primaryPersistenceUnit")
EntityManager entityManager;
@Autowired
@Qualifier("jdbcTemplatePrimary")
JdbcTemplate jdbcTemplate;
public T findById(long id) {
if(0 == id){
return null;
}
return entityManager.find(getEntityClass(), id);
}
@Override
public List<T> findAll() {
String tableName = getEntityTable();
String sql = "select * from "+ tableName;
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(getEntityClass()));
}
@Override
@Transactional(rollbackFor=Exception.class)
public void delete(long id) {
if (0 != id) {
String tableName = getEntityTable();
String sql = "delete from " + tableName + " where id = " + id;
jdbcTemplate.execute(sql);
}
}
@Override
@Transactional(rollbackFor=Exception.class)
public T save(T t) {
Object o = t;
Field f;
try {
boolean isInsert = true;
f = o.getClass().getDeclaredField("id");
f.setAccessible(true);
Object id = f.get(o);
if(null != id){
Long v = (Long) id;
if(v.longValue() != 0){
isInsert = false;
}
}
if(!isInsert){
entityManager.merge(t);//update
}else{
entityManager.persist(t);//save
}
} catch (Throwable e) {
LOG.info("DB entity save error:",e);
}finally{
entityManager.close();
}
return t;
}
@Override
@Transactional(rollbackFor=Exception.class)
public T update(T t) {
entityManager.merge(t);
entityManager.close();
return t;
}
@Override
@Transactional(rollbackFor=Exception.class)
public int update(String updateSql) {
LOG.info("DB SQL:"+updateSql);
return jdbcTemplate.update(updateSql);
}
@Override
@Transactional(rollbackFor=Exception.class)
public void batchSave(List<T> tList) {
if(!CollectionUtils.isEmpty(tList)){
int current = 0;
for(T item : tList){
current++;
entityManager.persist(item);
if(current % patchSize == 0){
entityManager.flush();
entityManager.clear();
}
}
}
entityManager.close();
}
@Override
@Transactional(rollbackFor=Exception.class)
public void jdbcBatchSave(String valueSql) {
String tableName = getEntityTable();
String sql = "insert into "+ tableName+" values "+valueSql;
LOG.info("DB SQL:"+sql);
jdbcTemplate.execute(sql);
}
@Override
@Transactional(rollbackFor=Exception.class)
public void batchUpdate(List<T> tList) {
if(!CollectionUtils.isEmpty(tList)){
int current = 0;
for(T item : tList){
current++;
entityManager.merge(item);
if(current % patchSize == 0){
entityManager.flush();
entityManager.clear();
}
}
}
entityManager.close();
}
@Override
@Transactional(rollbackFor=Exception.class)
public void jdbcBatchUpdate(String filterSql, String updateSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
String tableName = getEntityTable();
String sql = "update " + tableName + " set "+ updateSql + " where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
jdbcTemplate.execute(sql);
}
@Override
public List<T> findByFilter(String filterSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
String tableName = getEntityTable();
String sql = "select * from "+tableName+" where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(getEntityClass()));
}
@Override
public List<Map<String,Object>> findFieldsByFilter(List<String> fieldList,String filterSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
if(!CollectionUtils.isEmpty(fieldList)){
StringBuffer buffer = new StringBuffer();
for(String field : fieldList){
buffer.append(",");
buffer.append(field);
}
String fieldSql = buffer.toString().substring(1);
String tableName = getEntityTable();
String sql = "select " + fieldSql + " from " + tableName + " where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForList(sql);
}else{
return null;
}
}
@Override
public List<Long> findFieldByFilter(String field,String filterSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
if(StringUtils.isNotBlank(field)){
String tableName = getEntityTable();
String sql = "select " + field + " from " + tableName + " where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForList(sql, Long.class);
}else{
return null;
}
}
@Override
public void deleteByFilter(String filterSql) {
if(StringUtils.isNotBlank(filterSql)){
String tableName = getEntityTable();
String sql = "delete from " + tableName + " where " + filterSql;
LOG.info("DB SQL:"+sql);
jdbcTemplate.execute(sql);
}
}
@Override
public Long count() {
String tableName = getEntityTable();
String sql = "select count(1) from " + tableName;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForObject(sql,
4000
Long.class);
}
@Override
public Long countByFilter(String filter) {
String tableName = getEntityTable();
String sql = "";
if(!StringUtils.isEmpty(filter)){
sql = "select count(1) from " + tableName +" where " + filter;
}else{
sql = "select count(1) from " + tableName;
}
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForObject(sql, Long.class);
}
@Override
public List<T> findObjectBySql(String sql) {
LOG.info("DB SQL:"+sql);
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(getEntityClass()));
}
@Override
public Long countBySql(String sql) {
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForObject(sql, Long.class);
}
}
public abstract class AbstractCommonDaoImpl<T> implements CommonDao<T> {
private static Logger LOG = LogManager.getLogger(AbstractCommonDaoImpl.class);
private static int patchSize = 100;//一次批量插入数目
@PersistenceContext(unitName = "primaryPersistenceUnit")
EntityManager entityManager;
@Autowired
@Qualifier("jdbcTemplatePrimary")
JdbcTemplate jdbcTemplate;
public T findById(long id) {
if(0 == id){
return null;
}
return entityManager.find(getEntityClass(), id);
}
@Override
public List<T> findAll() {
String tableName = getEntityTable();
String sql = "select * from "+ tableName;
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(getEntityClass()));
}
@Override
@Transactional(rollbackFor=Exception.class)
public void delete(long id) {
if (0 != id) {
String tableName = getEntityTable();
String sql = "delete from " + tableName + " where id = " + id;
jdbcTemplate.execute(sql);
}
}
@Override
@Transactional(rollbackFor=Exception.class)
public T save(T t) {
Object o = t;
Field f;
try {
boolean isInsert = true;
f = o.getClass().getDeclaredField("id");
f.setAccessible(true);
Object id = f.get(o);
if(null != id){
Long v = (Long) id;
if(v.longValue() != 0){
isInsert = false;
}
}
if(!isInsert){
entityManager.merge(t);//update
}else{
entityManager.persist(t);//save
}
} catch (Throwable e) {
LOG.info("DB entity save error:",e);
}finally{
entityManager.close();
}
return t;
}
@Override
@Transactional(rollbackFor=Exception.class)
public T update(T t) {
entityManager.merge(t);
entityManager.close();
return t;
}
@Override
@Transactional(rollbackFor=Exception.class)
public int update(String updateSql) {
LOG.info("DB SQL:"+updateSql);
return jdbcTemplate.update(updateSql);
}
@Override
@Transactional(rollbackFor=Exception.class)
public void batchSave(List<T> tList) {
if(!CollectionUtils.isEmpty(tList)){
int current = 0;
for(T item : tList){
current++;
entityManager.persist(item);
if(current % patchSize == 0){
entityManager.flush();
entityManager.clear();
}
}
}
entityManager.close();
}
@Override
@Transactional(rollbackFor=Exception.class)
public void jdbcBatchSave(String valueSql) {
String tableName = getEntityTable();
String sql = "insert into "+ tableName+" values "+valueSql;
LOG.info("DB SQL:"+sql);
jdbcTemplate.execute(sql);
}
@Override
@Transactional(rollbackFor=Exception.class)
public void batchUpdate(List<T> tList) {
if(!CollectionUtils.isEmpty(tList)){
int current = 0;
for(T item : tList){
current++;
entityManager.merge(item);
if(current % patchSize == 0){
entityManager.flush();
entityManager.clear();
}
}
}
entityManager.close();
}
@Override
@Transactional(rollbackFor=Exception.class)
public void jdbcBatchUpdate(String filterSql, String updateSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
String tableName = getEntityTable();
String sql = "update " + tableName + " set "+ updateSql + " where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
jdbcTemplate.execute(sql);
}
@Override
public List<T> findByFilter(String filterSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
String tableName = getEntityTable();
String sql = "select * from "+tableName+" where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(getEntityClass()));
}
@Override
public List<Map<String,Object>> findFieldsByFilter(List<String> fieldList,String filterSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
if(!CollectionUtils.isEmpty(fieldList)){
StringBuffer buffer = new StringBuffer();
for(String field : fieldList){
buffer.append(",");
buffer.append(field);
}
String fieldSql = buffer.toString().substring(1);
String tableName = getEntityTable();
String sql = "select " + fieldSql + " from " + tableName + " where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForList(sql);
}else{
return null;
}
}
@Override
public List<Long> findFieldByFilter(String field,String filterSql) {
String fSql = "";
if(StringUtils.isNotBlank(filterSql)){
fSql = " and "+filterSql;
}
if(StringUtils.isNotBlank(field)){
String tableName = getEntityTable();
String sql = "select " + field + " from " + tableName + " where 1 = 1 " + fSql;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForList(sql, Long.class);
}else{
return null;
}
}
@Override
public void deleteByFilter(String filterSql) {
if(StringUtils.isNotBlank(filterSql)){
String tableName = getEntityTable();
String sql = "delete from " + tableName + " where " + filterSql;
LOG.info("DB SQL:"+sql);
jdbcTemplate.execute(sql);
}
}
@Override
public Long count() {
String tableName = getEntityTable();
String sql = "select count(1) from " + tableName;
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForObject(sql,
4000
Long.class);
}
@Override
public Long countByFilter(String filter) {
String tableName = getEntityTable();
String sql = "";
if(!StringUtils.isEmpty(filter)){
sql = "select count(1) from " + tableName +" where " + filter;
}else{
sql = "select count(1) from " + tableName;
}
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForObject(sql, Long.class);
}
@Override
public List<T> findObjectBySql(String sql) {
LOG.info("DB SQL:"+sql);
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(getEntityClass()));
}
@Override
public Long countBySql(String sql) {
LOG.info("DB SQL:"+sql);
return jdbcTemplate.queryForObject(sql, Long.class);
}
}
相关文章推荐
- 数据库访问抽象类实现项目数据库灵活切换
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- 数据库访问的一些公共的方法02-返回DataReader,DataSet,DataTable等对象
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- 使用反射技术实现的导入Excel文件到数据库的公共方法
- 数据库访问的一些公共的方法01-执行SQL的事务处理
- 水果项目第2集-建立数据库->编写数据访问基础类->实现类的方法->调试通过
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- 面向对象,类的组合关系,继承,实现,方法重写,方法重载,this的使用,抽象方法和抽象类的比较,父类构造方法存在的意义,多态的是用和解析,各种访问修饰符
- 数据库访问的一些公共的方法01-创建SQL数据库或Acess数据库等连接对象
- 在Hibernate里面动态切换SChema实现访问不同的数据库的几种方法
- struts 2框架的使用和访问数据库的公共方法
- 访问数据库表公共接口方法
- VC中使用ADO访问数据库技术程序实现方法
- 通过web.xml访问数据库及实现方法
- VC中使用ADO访问数据库技术程序实现方法
- VC中使用ADO访问数据库技术程序实现方法
- 使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换
- Visual C#如何实现对数据库的访问