ThinkJD, также известный как ThinkJDBC, — это простая и мощная библиотека JDBC с открытым исходным кодом. Вы можете работать с базой данных, используя всего одну строку кода на Java, подобно методу M в фреймворке ThinkPHP. ThinkJD автоматически управляет подключением к базе данных. После использования или возникновения исключения он закрывает соединение во избежание утечек памяти.
// Конфигурируем базу данных (только один раз)
D.setDbConfig("jdbc:mysql://127.0.0.1:3306/DbName?characterEncoding=UTF-8","root","root");
/* Режим JavaBean, автоматически получаем имя таблицы,
* первичный ключ, атрибут автоинкремента, имя поля и значение
*/
User user = new User();
user.setAge(10);
user.setName("Hello");
user.setSex(true);
// Вставляем данные
long id=D.M(user).add();
// Запрашиваем данные
user=D.M(User.class).find(id);
// Обновляем данные
user.setSex(false);
D.M(user).field("sex").save();
// По умолчанию обновляем все ненулевые поля JavaBean, если не указано конкретное поле
// Удаляем данные
D.M(user).delete();
// D.M(User.class).delete(id);
// Режим таблицы, указываем имя таблицы, первичный ключ, атрибут автоинкремента, имя поля и значение
// Вставляем данные
long id=D.M("user").field("name,weight").data("Tom",60).add();
// Обновляем данные
D.M("user").field("name,weight").data("Tom",100).where("id=?",id).save();
// Запрашиваем данные
user=D.M(User.class).find(id);
// Удаляем данные
D.M("user").delete(id);
Добавьте основную библиотеку ThinkJDBC-x.x.x.jar и следующую зависимость:
или вы можете предпочесть работать с maven.
<dependency>
<groupId>com.llqqww</groupId>
<artifactId>thinkjdbc</artifactId>
<version>1.4.2_16</version>
</dependency>
Не забудьте добавить зависимость от используемой вами базы данных, такой как
mysql-connector-java
,ojdbc
,sqljdbc
и т. д.
Существует три способа подключения к базе данных с помощью ThinkJD. Вы можете настроить имя пользователя и пароль (файловый способ или код) или использовать пулы соединений JDBC, такие как Hikari, C3P0 и т.д.
Во-первых, вы должны определить способ подключения к базе данных:
Добавьте файл в корневой каталог проекта (например, формат файла конфигурации Hikari). ThinkJD будет автоматически загружать файл конфигурации при первом запуске. Он проигнорирует его, если файл не существует.
thinkjdbc.properties
jdbcUrl = jdbc:mysql://127.0.0.1:3306/thinkjdbc?useUnicode=true&characterEncoding=UTF-8
dataSource.user = root
dataSource.password = root
D.setDbConfig("jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=UTF-8","root","root");
Пример для Hikari:
HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource dataSource = new HikariDataSource(config);
D.setDataSource(dataSource);
Обратите внимание, что если вы определили пул JDBC, предпочтительнее использовать его.
Вы можете настроить префикс таблицы (не Необходимый).
D.setTablePrefix("jd_");
// D.M('user') D.M(User.class) будет работать с таблицей `jd_user`
Примечание:
D.M('user').prefix('jd_')
для временной установки префикса таблицы.
Операция | Параметр | Пример | Примечание |
---|---|---|---|
table |
table(String table) | table("user") | |
pk |
pk(String key) | pk("id") | |
autoInc |
autoInc(boolean isPkAutoInc) | autoInc(false) | |
join |
join(String join) | join("left 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) |
① где («id = 1111 и username = 'Leytton'») ② где («id=? и 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) |
① лимит (10) ② лимит (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) |
Операция | Параметр | Примечание |
---|---|---|
select | ① List select() ② List select(String key, Object value) |
|
find | ① T find() ② T find(Object value) ③ 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) |
// find
// select id,name from jd_user where id > 4 order by id asc limit 0,1
User res = D.M(User.class).field("id,name").where("id > ?", 4).order("id asc").find();
// find by id
// select * from jd_user where id = 3 limit 0,1
User user = D.M(User.class).find(3);
// find by field
// select * from jd_user where name = 'Tom' limit 0,1
User user = D.M(User.class).fetchSql(true).find("name", "Bob");
// query with where, field, etc.
// select id, name, weight from jd_user where id > 3
List<User> res = D.M(User.class).field("id, name,weight").where("id > 3").select();
// query with group
// select sex, sum(weight) as weight, avg(age) as age, count(id) as num from jd_user where id > 5 group by sex order by sex desc limit 0, 10
res = D.M(User.class).field("sex,sum(weight) as weight,avg(age) as age,count(id) as num")
.where("id > ?", 5).group("sex").order("sex desc").page(1, 10).select();
// query with join
// select jd_user.id, name, weight, sum(gold) as num from jd_user left join jd_gold on user_id = jd_user.id where jd_user.id > 3 group by jd_user.id
res = D.M(User.class).field("jd_user.id, name, weight, sum(gold) as num")
.join("left join jd_gold on user_id = jd_user.id").where("jd_user.id > 3").group("jd_user.id").select();
// query with union
// (select id, name from jd_user where id = 4 ) union all (select id, name from jd_user where id < 3) union (select id, name from jd_user where id = 3)
res = D.M(User.class).field("id, name").where("id = 4").union("select id, name from jd_user where id < 3", true)
.union("select id, name from jd_user where id = 3", false).select();
// statistical query
long num = new M(User.class).where("id > 3").count();
num = D.M(User.class).fetchSql(true).where("id > 3").count("id");
num = (long) D.M(User.class).fetchSql(false).where("id < 0").max("id");
num = (long) D.M(User.class).where("id < 3").max("id");
num = (long) D.M(User.class).min("id");
num = (long) D.M(User.class).where("id > 3").min("id");
num = (long) D.M(User.class).fetchSql(false).where("id > 3").avg("id");
double avg = D.M(User.class).fetchSql(false).where("id > 3").avg("id");
num = (long) D.M(User.class).where("id > 13441").sum("age");
Вызов метода
fetchSql(true)
позволяет получить SQL-операторThinkJD
, который генерируется (исключительный способ), при этом не будет SQL-запроса. Операция для базы данных
Таблица полей пользовательской таблицы:
Поле | Тип данных | Примечание |
---|---|---|
id | int | Первичный ключ, автоинкремент |
name | varchar | |
age | tinyint | |
weight | float | |
sex | tinyint | 0: женщины / 1: мужчины |
time | int |
Возвращаемое значение select()
и find()
будет сохранено в JavaBean, например:
//@Table(name="user") //tabble name=class name by default,you can annotate to redefine
public class User {
//@Column(isKey=true) //key=id,isAutoInc=true by default,you can annotate to redefine
private Long id;
private Integer age;
//@Column(name="user_name") //column name=attribute name by default,you can annotate to redefine
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;
}
}
Операция | Параметр | Примечание |
---|---|---|
add | long add() | data() должен быть вызван в режиме Table; возвращает идентификатор, который является первичным ключом с автоинкрементом |
//вставляем указанные поля
long id = D.M(User.class).field("name,weight").data("Tom", 60).add();
/*
*вставляем поля без указания. Вставляем данные по порядку полей
*/
id = D.M("user").data(null, "Tom", 60, ...).add();
/*Полуавтоматический режим. Указываем данные и автоматически получаем имя таблицы, первичный ключ, атрибут автоинкремента, имя поля. Вставляем данные в порядке атрибутов javaBean
*insert into jd_user (age, name, weight, sex, time) values(?, ?, ?, ..., ?)
*/
id = D.M(User.class).data("Tom", 60, ..., ...).add();
/*Режим JavaBean. Автоматически получаем имя таблицы,
*первичный ключ, атрибут автоинкремента, имя и значение поля
*/
User user = new User();
user.setId(5);
user.setAge(10);
user.setName("Hello");
//insert into jd_user (age,name) values(?,?) Params[10,Hello]
num = D.M(user).add();
//insert into jd_user (name) values(?) Params[Hello]
num = D.M(user).field("name").add();
//insert into jd_user (id,age,name) values(?,?,?) Params[5,10,Hello]
num = D.M(user).autoInc(false).add();
Операция | Параметр | Примечание |
---|---|---|
save | long save() | data(), where() должны быть вызваны в режиме Table; возвращает количество затронутых строк |
long num = D.M("user").field("name, weight").data("Mike", 100).where("id=?", 1234).save();
User user = new User();
user.setId(5);
user.setAge(10);
user.setName("Hello");
//update jd_user set age=?, name=? where id=?; Params[10, Hello, 5]
num = D.M(user).save();
//update jd_user set name=? where id=?; Params[Hello, 5]
num = D.M(user).field("name").save();
//update jd_user set id=?, age=?, name=? where id=?; Params[5, 10, Hello, 4]
id = D.M(user).autoInc(false).fetchSql(true).where("id=?", user.getId() - 1).save();
Операция | Параметр | Примечание |
---|---|---|
delete | long delete() | where() должен быть вызван в режиме Table; возвращает количество затронутых строк |
Чтобы избежать случайного удаления, условия [where] не должны быть нулевыми |
long num = D.M("user").delete(5);//default-> id=?
num = D.M("user").delete("time", 1523681398);//time=?
num = D.M(User.class).where("id>=?", 13421).delete();
//JavaBean Mode
User user=new User();
user.setId(10L);
long ## Выполнение метода
| Операция | Параметр | Примечание |
| -------- | -------- | -------- |
| выполнение | void execute(String... sqls) | прямое выполнение инструкций |
D.M().execute(sql1 [sql2, sql3...]);
## Транзакция
Для поддержки транзакций необходим движок БД InnoDB.
Пример:
Connection conn=null; try { //получаем соединение, которое запустило транзакцию conn = D.M().startTrans(); //работаем с БД через транзакционное соединение long id=new M("gold").trans(conn).field("user_id,gold,type,time").data(3,5,0,System.currentTimeMillis()/1000).add(); System.out.println(id); if(id>0) { throw new SQLException("Transaction Rollback Test"); } id=new M("gold").trans(conn).field("user_id,gold,type,time").data(3,5,0,System.currentTimeMillis()/1000).add(); System.out.println(id); //фиксируем D.M().commit(conn); } catch (SQLException e) { e.printStackTrace(); try { //откатываем D.M().rollback(conn); } catch (SQLException e1) { e1.printStackTrace(); } }
Если вам нравится этот проект, поставьте ему звезду, чтобы дать мне знать :) . Прежде чем найти более удобную библиотеку JDBC, я буду постоянно обновлять её.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )