程序员

springboot jdbcTemplate整合增删改查使用类

2020-10-12  本文已影响0人  七百年前

1.整合增删改查集合类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Component;

import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class MysqlMake {

    private  String myTable;
    private  String myPrefix="ly_";
    private  String mySqlStr="";
    private  String myFiled="*";
    
    @Autowired
    JdbcTemplate jdbcTemplate;

    public MysqlMake table(String table){
        myTable = myPrefix+table;
        return this;
    }
    public MysqlMake field(String field){
        myFiled = field;
        return this;
    }
    // where 条件判断
    public MysqlMake where(String where){
        if(where != null){
            int intIndex = mySqlStr.indexOf("where");
            if(intIndex == - 1){
                mySqlStr = mySqlStr + " where "+where;
            }else{
                mySqlStr = mySqlStr + " "+where;
            }

        }

        return this;
    }
    public MysqlMake where(String key,String value){
        if (key != null && value != null) {
              int intIndex = mySqlStr.indexOf("where");
              if (intIndex == -1) {
                mySqlStr = mySqlStr + " where " + key + "=\"" + value + "\" ";
              } else {
                mySqlStr = mySqlStr + " and " + key + "=\"" + value + "\" ";
              }
        }
        return this;
    }
    public MysqlMake where(String key,String eq,String value){
        if (key != null && eq != null && value != null) {
          int intIndex = mySqlStr.indexOf("where");
          if (intIndex == -1) {
            mySqlStr = mySqlStr + " where " + key + eq + "\"" + value + "\" ";
          } else {
            mySqlStr = mySqlStr + " and " + key + eq + "\"" + value + "\" ";
          }
        }
        return this;
    }
    // Where IN in查询
    public MysqlMake whereIn(String key,String value){
        if(key != null && value != null){
            int intIndex = mySqlStr.indexOf("where");
            if (intIndex == -1) {
                mySqlStr = mySqlStr + " where " + key + " in ("+value+")";
            }else{
                mySqlStr = mySqlStr + " and " + key + " in ("+value+")";
            }
        }
        return this;
    }
    // whereBetween Between查询
    public MysqlMake whereBetween(String key,String start,String end){
        if (key != null && start != null && end != null) {
            int intIndex = mySqlStr.indexOf("where");
            if (intIndex == -1) {
                mySqlStr = mySqlStr + " where " + key + " between " + start + " and " + end;
            }else{
                mySqlStr = mySqlStr + " and " + key + " between " + start + " and " + end;
            }
        }
        return this;
    }
    // 链表查询 左链表
    public MysqlMake leftJoin(String table,String str){
        if(table != null && str != null ){
            mySqlStr = mySqlStr + " left join "+myPrefix+table+" on "+str;
        }
        return this;
    }
    // 排序
    public MysqlMake orderBy(String order,String sort){
        mySqlStr = mySqlStr + " order by "+order+" "+sort+" ";
        return this;
    }

    //查询数量
    public String count(){
        String sql = "select count(" + myFiled + ") from " + myTable + mySqlStr;
        cleanInit();
        return sql;
    }
    // 分页查询总条数
    public Integer pageTotalCount(){
        String sql2 = "select count(*) from " + myTable + mySqlStr;
        try {
            // 查询总数
            int total= jdbcTemplate.queryForObject(sql2,new Object[]{},Integer.class);
            return total;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    // 分页查询
    public HashMap<String, Object> page(Integer pageNum , Integer pageSize){
        // 总条数
        Integer total = pageTotalCount();
        System.out.println(total);
        // 构造查询语句
        Integer startNum = pageNum>0 ? (pageNum - 1) : 0;
        Integer pageStart = startNum * pageSize;//提取分页开始索引
        String sql = "select "+ myFiled + " from "+ myTable + mySqlStr + " limit "+pageStart+","+pageSize+" ";
        System.out.println(sql);
        // 置空
        cleanInit();
        try {
            HashMap<String, Object> result = new HashMap<String, Object>();
            List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
            if(list != null && list.isEmpty() == false){
                // 总页数
                Integer pages = (int) Math.ceil(total/pageSize);
                result.put("data",list);
                result.put("pages",pages);
                result.put("last_page",pages);
                result.put("total",total);
                System.out.println(result);
                return result;
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    // 列表查询
    public List<Map<String, Object>> select(){
        String sql =  "select " + myFiled + " from " + myTable + mySqlStr;
        cleanInit();
        try {
            List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
            if(list != null && !list.isEmpty()){
                return list;
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    // 单条查询
    public Map<String, Object> find(){
        // sql语句
        String sql =  "select " + myFiled + " from " + myTable + mySqlStr+ " limit 0,1 ";
        System.out.println(sql);
        cleanInit();
        try {
            List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
            if(list != null && !list.isEmpty()){
                Map<String, Object> info = list.get(0);
                return info;
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    // 单条单字段查询
    public String findOne(){
        // sql语句
        String sql =  "select " + myFiled + " from " + myTable + mySqlStr+ " limit 0,1 ";
        cleanInit();
        try {
            String info = jdbcTemplate.queryForObject(sql,new Object[]{},String.class);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    // 插入数据
    public Integer insert(Map<String, Object> dataMap){
        if(dataMap != null && !dataMap.isEmpty()){
            // 拼接插入参数
            String keyStr = "";
            String valueStr = "";
            for(Map.Entry<String, Object> entry : dataMap.entrySet()){
                String mapKey = entry.getKey();
                String mapValue = entry.getValue().toString();
                keyStr = keyStr + mapKey + ",";
                valueStr = valueStr + "\"" + mapValue + "\",";
            }
            // 删除拼接字符串最后的逗号
            keyStr = keyStr.substring(0,keyStr.length() - 1);
            valueStr = valueStr.substring(0,valueStr.length() - 1);
            // 插入sql 语句
            String sql =  "insert " + myTable + " ("+keyStr+") values ("+valueStr+")";
            cleanInit();
            try {
                // 插入数据后 获取自增ID
                KeyHolder keyHolder = new GeneratedKeyHolder();
                PreparedStatementCreator preparedStatementCreator = con -> {
                    PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
                    return ps;
                };
                jdbcTemplate.update(preparedStatementCreator,keyHolder);
                // 获取自增ID
                return keyHolder.getKey().intValue();
            } catch (Exception e) {
                e.printStackTrace();
                return 0;
            }
        }
        return 0;
    }
    // 删除数据
    public Integer delete(){
        // 更新sql语句
        String sql =  "delete from " + myTable + mySqlStr;
        cleanInit();
        try {
            // 可以成功更新数据库
            Integer info = jdbcTemplate.update(sql);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    // 更新数据 单个字段更新
    public Integer updateOne(String key,String value){
        // 更新sql语句
        String sql =  "update " + myTable + " SET " + key + "="+ value + mySqlStr;
        cleanInit();
        try {
            // 可以成功更新数据库
            Integer info = jdbcTemplate.update(sql);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    // 更新数据 整条数据更新
    public Integer update(Map<String, String> dataMap){
        if(dataMap !=null && !dataMap.isEmpty()){
            // 拼接更新参数
            String sqlStr = null;
            for(Map.Entry<String, String> entry : dataMap.entrySet()){
                String mapKey = entry.getKey();
                String mapValue = entry.getValue();
                sqlStr = sqlStr + mapKey + "=\"" + mapValue + "\",";
            }
            // 更新sql语句
            String sql =  "update " + myTable + " SET " + sqlStr + mySqlStr;
            cleanInit();
            try {
                // 执行
                Integer info = jdbcTemplate.update(sql);
                return info;
            } catch (Exception e) {
                e.printStackTrace();
                return 0;
            }
        }
        return 0;
    }
    // 字段数据自增
    public Integer increment(String key,String value){
        // 更新sql语句
        String sql =  "update " + myTable + " SET "+key+"="+key+"+"+value+mySqlStr;
        System.out.println(sql);
        cleanInit();
        try {
            // 执行
            Integer info = jdbcTemplate.update(sql);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    // 字段数据自减
    public Integer decrement(String key,String value){
        // 更新sql语句
        String sql =  "update " + myTable + " SET "+key+"="+key+"-"+value+mySqlStr;
        cleanInit();
        try {
            // 执行
            Integer info = jdbcTemplate.update(sql);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    // 置空还原数据
    public Boolean cleanInit(){
        myTable = "";
        myFiled = "*";
        mySqlStr = "";
        return true;
    }
}

2.使用

// 引入
@Resource
MysqlMake mysqlMake;

// 查询单个字段
String info = mysqlMake.table("account").field("money").where("account_id" , "1").findOne();

// 单条数据查询
Map<String, Object> info = mysqlMake.table("account").where("account_id" , "1").find();

// 分页查询
Map<String, Object> list  = mysqlMake.table("account_money_change as a")
        .field("a.money,a.created_at,n.nfc_sn,n.type")
        .leftJoin("account as ac", "ac.id=a.account_id")
        .leftJoin("account as at", "at.id=a.to_account_id")
        .leftJoin("user_nfc as n", "n.id=at.account_id")
        .where("a.consume_type","13")
        .whereIn("a.account_id",type)
        .whereBetween("a.created_at",startTime,endTime)
        .orderBy("a.id","desc")
        .page(pageNum,pageSize);
if(list !=null){
    // 修改数据
    List<HashMap<String, Object>> lista = (List<HashMap<String, Object>>) list.get("data");
    for (Map<String, Object> info : lista) {
        String newTime = DateUtil.timeStamp2Date(info.get("created_at").toString(), "yyyy-MM-dd");
        info.put("created_at",newTime);
    }
}

// 数据写入
String nowTime = DateUtil.timeStamp();
// 构造写入参数
Map<String, Object> info = new HashMap<String, Object>();
info.put("consume_type",consume_type);
info.put("name",getMoneyChangeName(consume_type.toString()));
info.put("account_id",account_id);
info.put("money",-money);
info.put("to_account_id",to_account_id);
info.put("order_id",order_id);
info.put("created_at",nowTime);
info.put("updated_at",nowTime);
// 写入数据 并获取ID
Integer account_change_id = mysqlMake.table("account_money_change").insert(info);


// 数据更新
// 出账后金额减少
mysqlMake.table("account").where("id",account_id.toString()).decrement("money",money.toString());
// 出账后更新出账后的金额
mysqlMake.table("account_money_change").where("id",account_change_id.toString()).updateOne("money_after",money_after.toString());
上一篇下一篇

猜你喜欢

热点阅读