开源作品ThinkJDBC—一行代码搞定数据库操作
1 簡介
ThinkJD,又名ThinkJDBC,一個(gè)簡潔而強(qiáng)大的開源JDBC操作庫。你可以使用Java像ThinkPHP框架的M方法一樣,一行代碼搞定數(shù)據(jù)庫操作。ThinkJD會(huì)自動(dòng)管理數(shù)據(jù)庫連接,使用完畢或程序異常都會(huì)關(guān)閉連接以免造成內(nèi)存溢出。
先睹為快:
//數(shù)據(jù)庫配置(只需調(diào)用一次) D.setDbConfig("jdbc:mysql://127.0.0.1:3306/DbName?characterEncoding=UTF-8","root","root"); //JavaBean模式,自動(dòng)獲取表名、主鍵、自增屬性、字段名和數(shù)據(jù) User user = new User(); user.setAge(10); user.setName("Hello"); user.setSex(true); //插入數(shù)據(jù) long id=D.M(user).add(); //查詢數(shù)據(jù) user=D.M(User.class).find(id); //更新數(shù)據(jù) user.setSex(false); D.M(user).field("sex").save();//不指定字段名默認(rèn)更新JavaBean的所有非空屬性 //刪除數(shù)據(jù) D.M(user).delete(); //D.M(User.class).delete(id); //Table模式,手動(dòng)指定表名、主鍵、自增屬性、字段名和數(shù)據(jù) //插入數(shù)據(jù) long id=D.M("user").field("name,weight").data("Tom",60).add(); //更新數(shù)據(jù) D.M("user").field("name,weight").data("Tom",100).where("id=?",id).save(); //查詢數(shù)據(jù) user=D.M(User.class).find(id); //刪除數(shù)據(jù) D.M("user").delete(id);項(xiàng)目主頁?https://gitee.com/Leytton/ThinkJD?(碼云)?https://github.com/Leytton/ThinkJD?(Github)
測試項(xiàng)目?https://github.com/Leytton/ThinkJD_Demo
2 使用方法
0x01 添加依賴
ThinkJDBC-x.x.x-full.jar?包含了ThinkJDBC-x.x.x-core.jar核心庫和兩個(gè)依賴庫,只需要添加這一個(gè)jar包就行了
- mysql-connector-java-5.1.39.jar
- commons-dbutils-1.6.jar
0x02 定義數(shù)據(jù)庫
ThinkJD支持直接定義用戶名密碼訪問數(shù)據(jù)庫,也支持使用Hikari、C3P0等數(shù)據(jù)庫連接池。
數(shù)據(jù)庫連接方式有三種:
(1)配置文件方式
在項(xiàng)目根目錄下添加文件(跟Hikari配置文件格式一樣)
程序第一次啟動(dòng)時(shí)會(huì)自動(dòng)加載讀取配置文件,如果文件不存在則忽略。【V1.2.4_5 增加功能】
thinkjdbc.properties
jdbcUrl = jdbc:mysql://127.0.0.1:3306/thinkjdbc?useUnicode=true&characterEncoding=UTF-8 dataSource.user = root dataSource.password = root- 1
- 2
- 3
(2)帳號(hào)密碼方式
D.setDbConfig("jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=UTF-8","root","root");- 1
(3)使用數(shù)據(jù)庫連接池
例如使用Hikari連接池:
HikariConfig config = new HikariConfig("/hikari.properties"); HikariDataSource dataSource = new HikariDataSource(config); D.setDataSource(dataSource);- 1
- 2
- 3
注:如果定義了數(shù)據(jù)庫連接池,ThinkJD會(huì)優(yōu)先使用。
(3)配置表前綴
只需調(diào)用一次,配置表前綴不是必需的
D.setTablePrefix("jd_"); //D.M('user') D.M(User.class)將會(huì)操作 `jd_user` 表- 1
- 2
注:D.M('user').prefix('jd_')方法可單獨(dú)指定表前綴【V1.2.3新增】
0x03 連貫操作
| table | table(String table) | table(“user”) | ? |
| pk | pk(String key) | pk(“id”) | ? |
| autoInc | autoInc(boolean isPkAutoInc) | autoInc(false) | ? |
| join | join(String join) | join(“l(fā)eft join machine on user.id=user_id and machine_status=1”) | ? |
| field | field(String filed) | field(“id,username”) | ? |
| data | data(Object… dataParam) | data(11,”Leytton”) | ? |
| setInc | setInc(String key,long num) | setInc(“gold”,5) //gold=gold+5 | ? |
| setDec | setDec(String key,long num) | setDec(“gold”,5) //gold=gold-5 | ? |
| where | ①where(String where) ②where(String where, Object… whereParam) | ①where(“id=1111 and username=’Leytton’”) ②where(“id=? and username=?”,1111,”Leytton”) | ? |
| group | group(String group) | group(“type”) | ? |
| having | having(String having) | having(“id>1234”) | ? |
| order | order(String order) | order(“id desc”) | ? |
| asc | asc(String key) | asc(“id”) | ? |
| desc | desc(String key) | desc(“id”) | ? |
| page | page(long page, long rows) | page(1,10) | ? |
| limit | ①limit(long rows) ②limit(long offset, long rows) | ①limit(10) ②limit(1,10) | ? |
| union | union(String union,Boolean isAll) | ①union(“select * from user_two where id>1234”,false) ②union(“select * from user_two where id>1234”,true) | ? |
0x04 查詢數(shù)據(jù)
| select | ①<T> List<T> select() ②<T> List<T> select(String key, Object value) | ? |
| find | ①<T> T find() ②<T> T find(Object value) ③<T> T find(String key, Object value) | ? |
| count | ①long count() ②long count(String field) | ? |
| max | double max(String field) | ? |
| min | double min(String field) | ? |
| avg | double avg(String field) | ? |
| sum | double sum(String field) | ? |
?
通過調(diào)用fetchSql(true)方法,可以獲取到?ThinkJD產(chǎn)生的SQL語句(Exception形式)并且不會(huì)執(zhí)行數(shù)據(jù)庫操作。?
user表結(jié)構(gòu):
| id | int | 用戶id,自增長主鍵 |
| name | varchar | 用戶名 |
| age | tinyint | 年齡 |
| weight | float | 體重 |
| sex | tinyint | 性別 0女/1男 |
| time | int | 時(shí)間 |
select()和?find()查詢結(jié)果封裝到JavaBean里返回,JavaBean可使用注解映射數(shù)據(jù)庫字段。
注意:墻裂建議JavaBean字段基礎(chǔ)數(shù)據(jù)類型使用【Integer、Long、Boolean、Float、Double、Byte、Short、Char】不要使用【integer、long、boolean、float、double、byte、short、char】,因?yàn)榍罢呖梢再x值為null而后者不行(null時(shí)為0),所以獲取到的值是不準(zhǔn)確的。ThinkJD的save更新等操作通過判斷屬性值不為null則加入數(shù)據(jù)庫更新字段隊(duì)列。ThinkJD會(huì)自動(dòng)檢測以上不符合的數(shù)據(jù)類型并發(fā)出警告。如需關(guān)閉調(diào)用D.setCheckField(false);
//@Table(name="user")默認(rèn)類名為表名,可注解重定義 public class User {//@Column(isKey=true)默認(rèn)id為主鍵、isAutoInc=true自增,可注解重定義private Long id; private Integer age; //@Column(name="user_name")默認(rèn)屬性名為表字段,可注解重定義 private String name; private Float weight; private Boolean sex; @Column(isColumn=false) private Integer num; private Long time; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Float getWeight() { return weight; } public void setWeight(Float weight) { this.weight = weight; } public Boolean getSex() { return sex; } public void setSex(Boolean sex) { this.sex = sex; } public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public Long getTime() { return time; } public void setTime(Long time) { this.time = time;0x05 插入數(shù)據(jù)
| add | long add() | Table模式前提方法:data() 返回自動(dòng)生成的主鍵值; |
0x06 更新數(shù)據(jù)
| save | long save() | Table模式前提方法:data(),where(); 返回執(zhí)行生效行數(shù) |
?
0x07 刪除數(shù)據(jù)
| delete | long delete() | Table模式前提方法:where() 返回執(zhí)行生效行數(shù) |
注:為防止誤刪除,where條件不能為空。
long num=D.M("user").delete(5);//默認(rèn)為id=? num=D.M("user").delete("time",1523681398);//time=? num=D.M(User.class).where("id>=?",13421).delete(); //JavaBean模式 User user=new User(); user.setId(10L); long num=D.M(user).delete();- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
0x08 執(zhí)行SQL
| execute | void execute(String… sqls) | 直接執(zhí)行SQL語句 |
- 1
0x09 事務(wù)支持
數(shù)據(jù)庫表引擎應(yīng)該為InnoDB以支持事務(wù)操作。?
代碼示例:
3 許可證
Apache License 2.0
4 關(guān)于
如果喜歡的話,請(qǐng)點(diǎn)個(gè)贊讓我知道哦~在找到比它用得更順手的JDBC庫之前,這個(gè)項(xiàng)目會(huì)持續(xù)更新。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的开源作品ThinkJDBC—一行代码搞定数据库操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring 整合junit进行测试
- 下一篇: mysql中Invalid defaul