使用JDBC簡(jiǎn)化數(shù)據(jù)庫(kù)操作

只需用ConnectionUtil.javaDBReflectionUtil.java搞定簡(jiǎn)單并且多屬性,數(shù)據(jù)量大的數(shù)據(jù)庫(kù)CURD。
點(diǎn)擊查看源文件

約束條件

  • 目前僅支持int,float,long,double,String數(shù)據(jù)類型
  • 目前僅支持 "=", "like", "and", "or"操作
  • 實(shí)體類中的字段與表中字段一一對(duì)應(yīng)
  • 實(shí)體類中需存在無參構(gòu)造函數(shù)以及getter&setter方法

功能介紹

用于小型的項(xiàng)目,簡(jiǎn)化數(shù)據(jù)庫(kù)訪問操作

  • 添加(含id添加忽略),表中若存在id字段,請(qǐng)?jiān)O(shè)為自增
  • 刪除:清空所有記錄,多條件刪除,單條件刪除
  • 更新:無條件更新記錄,多條件更新記錄,單條件更新記錄
  • 查詢:無條件全部查詢,多條件查詢多條記錄,多條件查詢單條記錄,
    單條件查詢多條記錄,單條件查詢單條記錄

使用說明

文件說明

  • ConnectionUtil.java : 用于連接數(shù)據(jù)庫(kù),在里面替換數(shù)據(jù)庫(kù)名
  • DBReflectionUtil.java:通用的增刪改查操作。

假設(shè)我們有個(gè)Student實(shí)體類,并存在students表

//實(shí)體類
package com.sprint.entity;

public class Student {
    private int id;
    private String name;
    private int age;
    private String sex;
    private String school;
    private String major;
    private String clazz;
    //省略構(gòu)造 && gettter && setter方法
}
//對(duì)應(yīng)表結(jié)構(gòu)
create table students (
    id int auto_increment,
    name varchar(128),
    age int,
    sex varchar(5),
    school varchar(128),
    major varchar(128),
    clazz varchar(128)
)engine=innodb default charset = utf8;

一般需要再封裝一層dao,看個(gè)人編程規(guī)范吧。這里直接使用DBReflectionUtil類操作

添加數(shù)據(jù): public static int insert(String tableName, T object)

參數(shù)名 參數(shù)名描述
tableName 表名
object 存儲(chǔ)的對(duì)象
Student stu = new Student("name", 18, "male", "CodeUniversity", "SoftWare", "class01");
DBReflectionUtil.insert("students", stu))   

清空所有記錄:public static int deleteAll(String tableName)

參數(shù)名 參數(shù)名描述
tableName 表名
DBReflectionUtil.deleteAll("students");

單條件刪除記錄:public static int deleteByKey(String tableName, Map<String, Object>map, String operator1)

參數(shù)名 參數(shù)名描述
tableName 表名
map 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
//例如:刪除students中 name前綴為'邢',需要自己進(jìn)行字符匹配
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "邢%");
DBReflectionUtil.deleteByKeys("students", map, "like");

多條件刪除記錄:public static int deleteByKeys(String tableName, Map<String, Object>map, String operator1, String operator2)

參數(shù)名 參數(shù)名描述
tableName 表名
map 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
operator2 邏輯操作,目前只支持"and"或"or"
//例如:刪除students中 age=18并且 sex='女'
Map<String, Object> map = new HashMap<String, Object>();
map.put("sex", "女");
map.put("age", 18);
DBReflectionUtil.deleteByKeys("students", map, "=", "and");

無條件更新:public static int updateAll(String tableName, Map<String, Object> map)

參數(shù)名 參數(shù)名描述
tableName 表名
map 需要更新的字段和字段值組成的key-value
//假設(shè)將students中的age更新為1000, major更新為"水下工作者"
Map<String, Object> map = new HashMap<String, Object>();
map.put("age", 1000);
map.put("major", "水下工作者");
DBReflectionUtil.updateAll("students", map);

單條件更新:public static int updateByKey(String tableName, Map<String, Object> updateMap, Map<String, Object> optionMap, String operator1)

參數(shù)名 參數(shù)名描述
tableName 表名
updateMap 需要更新的字段和字段值組成的key-value
optionMap 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
//假設(shè)將name中姓“駱”的age更改為20
Map<String, Object> updateMap = new HashMap<String, Object>();
map.put("age", 20);
Map<String, Object> optionMap = new HashMap<String, Object>();
map.put("name", "駱%");
DBReflectionUtil.updateByKeys("students", updateMap, optionMap, "like");

多條件更新:public static int updateByKeys(String tableName, Map<String, Object> updateMap, Map<String, Object> optionMap, String operator1, String operator2)

參數(shù)名 參數(shù)名描述
tableName 表名
updateMap 需要更新的字段和字段值組成的key-value
optionMap 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
operator2 邏輯操作,目前只支持"and" 或 "or"
//假設(shè)將age=18并且major='SoftWare'的記錄中clazz更改為"1403"
Map<String, Object> updateMap = new HashMap<String, Object>();
map.put("clazz", "1403");
Map<String, Object> optionMap = new HashMap<String, Object>();
map.put("age", 18);
map.put("major", "SoftWare");
DBReflectionUtil.updateByKeys("students", updateMap, optionMap, "=", "and");

無條件查詢操作接口:public static <T> List<T> findAll(String table, T object)

參數(shù)名 參數(shù)名描述
tableName 表名
object 獲取的對(duì)象,不用設(shè)置數(shù)據(jù),僅 new Object()
//例如:獲取所以的學(xué)生
List<Student> list = DBReflectionUtil.findAll("students", new Student());

單條件查詢單條:public static <T> T findOnlyByKey(String tableName, T object, Map<String, Object> map)

參數(shù)名 參數(shù)名描述
tableName 表名
object 獲取的對(duì)象,不用設(shè)置數(shù)據(jù),僅 new Object()
map 條件字段和字段值組成的key-value
// 例如:取出表中id為2的記錄
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 2);
Student stu = DBReflectionUtil.findOnlyByKey("students", new Student(),map);

單條件查詢多條:pulic static <T> List<T> findMoreByKey(String tableName, T object, , Map<String, Object> map, String operator1)

參數(shù)名 參數(shù)名描述
tableName 表名
object 獲取的對(duì)象,不用設(shè)置數(shù)據(jù),僅 new Object()
map 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
//例如:查找name中含"駱"的學(xué)生
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "駱%");
List<Student> list = DBReflectionUtil.findMoreByKey("students", new Student(), map, "like");

多條件查詢多條記錄:public static <T> List<T> findMoreByKeys(String tableName, T object, Map<String, Object> map, String operator1, String operator2)

參數(shù)名 參數(shù)名描述
tableName 表名
object 獲取的對(duì)象,不用設(shè)置數(shù)據(jù),僅 new Object()
map 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
operator2 邏輯操作,目前只支持"and" 或 "or"
//例如:查詢name中姓"駱",并且school為"中國(guó)"為前綴的學(xué)生
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "駱%");
map.put("sex", "中國(guó)%");
List<Student> list = DBReflectionUtil.findMoreByKeys("students", new Student(), map, "like", "and");

多條件查詢單條記錄:public static <T> T findOnlyByKeys(String tableName, T object, Map<String, Object> map, String operator1, String operator2)

參數(shù)名 參數(shù)名描述
tableName 表名
object 獲取的對(duì)象,不用設(shè)置數(shù)據(jù),僅 new Object()
map 條件字段和字段值組成的key-value
operator1 操作類型,目前只支持"="或"like"
operator2 邏輯操作,目前只支持"and" 或 "or"
//例如:查詢sex為"男",并且id為4為前綴的學(xué)生
Map<String, Object> map = new HashMap<String, Object>();
map.put("sex", "男");
map.put("id", 4);
Student stu = DBReflectionUtil.findOnlyByKeys("students", new Student(), map, "=", "and");

下一版需要改進(jìn)的地方(當(dāng)前版的缺點(diǎn))

  • 合理,全面的數(shù)據(jù)校驗(yàn)
  • 查詢,更新,刪除的sql語句改成 IN類型
  • 支持時(shí)間類型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,599評(píng)論 19 139
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,017評(píng)論 0 11
  • 學(xué)習(xí)是一件簡(jiǎn)單的事,今天我們探討的話題是:如何才能以火箭般的成績(jī)速度提高成績(jī)呢? 今天,我就為大家分享幾個(gè),如何提...
    兔青檸的窩閱讀 578評(píng)論 0 1
  • 首先,我的職位是 全棧開發(fā)工程師,"全棧"的意思就是啥都干. 0.寫給誰看. 大概就是我的家人,想知道我在干什么的...
    高君_a071閱讀 561評(píng)論 0 2

友情鏈接更多精彩內(nèi)容