Hutool操作数据库的基本封装

这篇博客介绍了如何在Java项目中引入Hutool库,通过Maven配置Hutool和MySQL的依赖。展示了如何读取配置文件创建数据源,并提供了对象转换为数据库实体以及实体转换为对象的方法,便于数据库的CRUD操作。
摘要由CSDN通过智能技术生成

来源:

Hutool参考文档

maven依赖

        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.0</version>
        </dependency>
        <!-- mysql 持久化配置开始 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
             <version>5.1.18</version>
        </dependency>

db.setting

[event_caiji]
## db.setting文件
url = jdbc:mysql://192.168.10.231:3307/test
user = bj
pass = bj2016
## 可选配置
# 是否在日志中显示执行的SQL
showSql = true
# 是否格式化显示的SQL
formatSql = false
# 是否显示SQL参数
showParams = true

HutoolDbUtil

package com.cjh.util;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.db.ds.DSFactory;
import cn.hutool.setting.Setting;

import java.io.File;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HutoolDbUtil {
    private static DSFactory ds;
    static {
        //自定义数据库Setting,更多实用请参阅Hutool-Setting章节
        Setting setting = new Setting(new File("./conf/db.setting"), CharsetUtil.CHARSET_UTF_8,false);
        ds = DSFactory.create(setting);
    }

    public static Db getDb(String group){
       return Db.use(ds.getDataSource(group));
    }

    //Object转entity
    public static Entity objToEntity(Object obj, String table_name) {
        Entity entity = new Entity();
        entity.setTableName(table_name);
        try {
            Class<?> clazz = obj.getClass();
            System.out.println(clazz);
            for (Field field : clazz.getDeclaredFields()) {
                field.setAccessible(true);
                String fieldName = field.getName();
                Object value = field.get(obj);
                if (value != null) {
                    entity.set(fieldName, value);
                }
            }
        } catch (Exception e) {
            System.out.println("object to map error " + e.getMessage());
            return null;
        }
        return entity;
    }

    /**
     * Record 转 任意实例类
     *满足数据库列名和实体名除了下划线无区别的映射
     * @param
     * @param entity
     * @return
     */
    public static <T> T entityToObj(Class<T> clazz, Entity entity) {
        // 获取JavaBean里面的所有属性
        Field[] field = clazz.getDeclaredFields();
//        Set<String> colunms = formatNames(record.getColumns().keySet());

        Map<String, String> nameMaps = getNameMaps(entity.getFieldNames());

        try {
            T obj = clazz.newInstance();
            for (Field f : field) {
                // 获取该字段名称
                String name = f.getName();
                String typeName = f.getType().getSimpleName();
//                    System.out.println("typeName======"+typeName);
                // 判断该字段是否在ResultSet的字段里,在的话才去进行赋值操作
                // 如果不进行判断的话,在JavaBean字段比ResultSet字段多的情况下,会抛异常
                String formatKey = formatStr(name);
                if (nameMaps.containsKey(formatKey)) {
                    // 判断是否查询到对应的值
                    name=nameMaps.get(formatKey);
                    if (entity.get(name) != null) {
                        // 跳过检查,这里访问的时私有属性
                        f.setAccessible(true);
                        if ("String".equals(typeName)) {
                            // 将查询到的值付给对应的属性
                            f.set(obj, entity.getStr(name));
                        } else if ("Long".equals(typeName)) {
                            // 将查询到的值付给对应的属性
                            f.set(obj, entity.getLong(name));
                        } else if ("Integer".equals(typeName)) {
                            // 将查询到的值付给对应的属性
                            f.set(obj, entity.getInt(name));
                        } else if ("Date".equals(typeName)) {
                            // 将查询到的值付给对应的属性
                            f.set(obj, new Date(entity.getTimestamp(name).getTime()));
                        } else if ("Boolean".equals(typeName)) {
                            // 将查询到的值付给对应的属性
                            f.set(obj, entity.getBool(name));
                        } else {
                            f.set(obj, entity.get(name));
                        }
                    }
                }
            }
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("entity 转 T 异常... " + e);
        }

        return null;
    }

    /**
     * 获取格式化后的字段名和原始字段名之间的映射
     * @param names
     * @return
     */
    private static Map<String,String> getNameMaps(Set<String> names) {
        Map<String,String> map=new HashMap<>();
        for (String name : names) {
            map.put(formatStr(name),name);
        }
        return map;
    }

    private static String formatStr(String str) {
        return str.replace("_", "").toLowerCase();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值