1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Leytton-ThinkJD

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README_EN.md

1 Введение

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);

Страница проекта ### https://github.com/Leytton/ThinkJD https://gitee.com/Leytton/ThinkJD

Демо-версия теста ### https://github.com/Leytton/ThinkJD_Demo

Блог-страница ### https://blog.csdn.net/Leytton

2 Начало работы

0x01 Добавление зависимостей

Библиотека Jar

Добавьте основную библиотеку ThinkJDBC-x.x.x.jar и следующую зависимость:

  • commons-dbutils-1.6.jar

или вы можете предпочесть работать с maven.

Maven

<dependency>
    <groupId>com.llqqww</groupId>
    <artifactId>thinkjdbc</artifactId>
    <version>1.4.2_16</version>
</dependency>

Не забудьте добавить зависимость от используемой вами базы данных, такой как mysql-connector-java, ojdbc, sqljdbc и т. д.

0x02 Настройка базы данных

Существует три способа подключения к базе данных с помощью ThinkJD. Вы можете настроить имя пользователя и пароль (файловый способ или код) или использовать пулы соединений JDBC, такие как Hikari, C3P0 и т.д.

Во-первых, вы должны определить способ подключения к базе данных:

(1) Файловый способ

Добавьте файл в корневой каталог проекта (например, формат файла конфигурации Hikari). ThinkJD будет автоматически загружать файл конфигурации при первом запуске. Он проигнорирует его, если файл не существует. thinkjdbc.properties

jdbcUrl = jdbc:mysql://127.0.0.1:3306/thinkjdbc?useUnicode=true&characterEncoding=UTF-8
dataSource.user = root
dataSource.password = root

(2) Использование имени пользователя и пароля

D.setDbConfig("jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=UTF-8","root","root");

(3) Использование пула JDBC

Пример для Hikari:

HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource dataSource = new HikariDataSource(config);
D.setDataSource(dataSource);

Обратите внимание, что если вы определили пул JDBC, предпочтительнее использовать его.

(3) Конфигурация префикса таблицы

Вы можете настроить префикс таблицы (не Необходимый).

D.setTablePrefix("jd_");
// D.M('user') D.M(User.class) будет работать с таблицей `jd_user`

Примечание: D.M('user').prefix('jd_') для временной установки префикса таблицы.

0x03 Цепной метод

Операция Параметр Пример Примечание
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)

0x04 Метод Select

Операция Параметр Примечание
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;
    }
}

0x05 Метод добавления

Операция Параметр Примечание
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();

0x06 Метод обновления

Операция Параметр Примечание
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();

0x07 Метод удаления

Операция Параметр Примечание
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(); } }

3 Лицензия

Apache License 2.0

4 О проекте

Если вам нравится этот проект, поставьте ему звезду, чтобы дать мне знать :) . Прежде чем найти более удобную библиотеку JDBC, я буду постоянно обновлять её.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

ThinkJD, также известный как ThinkJDBC, — это мощная открытая библиотека для работы с JDBC/ORM, которая позволяет максимально упростить операции с базой данных, используя всего одну строку кода. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/Leytton-ThinkJD.git
git@api.gitlife.ru:oschina-mirror/Leytton-ThinkJD.git
oschina-mirror
Leytton-ThinkJD
Leytton-ThinkJD
master