Введение
Документы переводятся с помощью программного обеспечения для перевода. Оригинал для README.md.
Project Home: https://www.dbvisitor.net
dbVisitor — это инструмент ORM для баз данных, предоставляющий сопоставление объектов, более богатую обработку типов, чем Mybatis, динамический SQL, хранимые процедуры, более 20 диалектов, вложенные транзакции, несколько источников данных, условные конструкторы, стратегии INSERT и множественные операторы/множественные результаты. Он совместим с использованием Spring и MyBatis.
Он не зависит от какого-либо другого фреймворка, поэтому его можно легко интегрировать с любым фреймворком.
Особенности
Знакомое
Поддержка транзакций
Функции
Быстрый старт
Зависимости
<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor</artifactId>
<version>5.4.1</version><!-- 查看最新版本:https://mvnrepository.com/artifact/net.hasor/dbvisitor -->
</dependency>
Драйверы базы данных, например:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
DbVisitor можно использовать без использования пулов соединений с базами данных, но наличие пула соединений является стандартом для большинства проектов. HikariCP
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
Наконец, подготовьте таблицу базы данных и инициализируйте некоторые данные ('createdB.sql' файл)
drop table if exists `test_user`;
create table `test_using` (
`id` int(11) auto_increment,
`name` varchar(255),
`age` int,
`create_time` datetime,
primary key (`id`)
);
insert into `test_user` values (1, 'mali', 26, now());
insert into `test_user` values (2, 'dative', 32, now());
insert into `test_user` values (3, 'jon wes', 41, now());
insert into `test_user` values (4, 'mary', 66, now());
insert into `test_user` values (5, 'matt', 25, now());
// создание источника данных
DataSource dataSource = DsUtils.dsMySql();
// создать объект JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// загрузить скрипт тестовых данных
jdbcTemplate.loadSQL("CreateDB.sql");
// Запрос данных и возврат их в виде карты
List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select * from test_user");
Выведите «mapList» на консоль
/--------------------------------------------\
| id | name | age | create_time |
|--------------------------------------------|
| 1 | mali | 26 | 2021-11-12 19:14:06.0 |
| 2 | dative | 32 |
``` 2021-11-12 19:14:06.0
| 3 | jon wes | 41 | 2021-11-12 19:14:06.0 |
| 4 | mary | 66 | 2021-11-12 19:14:06.0 |
| 5 | matt | 25 | 2021-11-12 19:14:06.0 |
\--------------------------------------------/
Для получения данных с помощью объекта DTO необходимо создать объект DTO.
```java
// Объявить его с аннотацией @Table
// - 'test_user' преобразует горб, чтобы получить имя класса 'TestUser'
@Table(mapUnderscoreToCamelCase = true)
public class TestUser {
private Integer id;
private String name;
private Integer age;
private Date createTime;
// геттеры и сеттеры опущены
}
Затем используйте метод queryForList
, чтобы выполнить запрос напрямую, и консоль может получить тот же результат.
List<TestUser> dtoList = jdbcTemplate.queryForList("select * from test_user", TestUser.class);
Для операций однотабличного CURD можно использовать подкласс JdbcTemplate — LambdaTemplate.
// создание источника данных
DataSource dataSource = DsUtils.dsMySql();
// создать объект LambdaTemplate
LambdaTemplate lambdaTemplate = new LambdaTemplate(dataSource);
// Запрос, все данные
List<TestUser> dtoList = lambdaTemplate.lambdaQuery(TestUser.class)
.queryForList();
// Вставить новые данные
TestUser newUser = new TestUser();
newUser.setName("new User");
newUser.setAge(33);
newUser.setCreateTime(new Date());
int result = lambdaTemplate.lambdaInsert(TestUser.class)
.applyEntity(newUser)
.executeSumResult();
// Обновить, обновить имя с Mali на mala
TestUser sample = new TestUser();
sample.setName("mala");
int result = lambdaTemplate.lambdaUpdate(TestUser.class)
.eq(TestUser::getId, 1)
.updateBySample(sample)
.doUpdate();
// Удалить данные, чей ID равен 2
int result = lambdaTemplate.lambdaUpdate(TestUser.class)
.eq(TestUser::getId, 2)
.doDelete();
Интерфейс универсального Mapper выполняет некоторые базовые операции, всё ещё используя однотабличный CRUD в качестве примера.
// Создание источника данных
DataSource dataSource = DsUtils.dsMySql();
// Создать BaseMapper
DalSession session = new DalSession(dataSource);
BaseMapper<TestUser> baseMapper = session.createBaseMapper(TestUser.class);
// Запрос, все данные
List<TestUser> dtoList = baseMapper.query().queryForList();
// Вставка новых данных
TestUser newUser = new TestUser();
newUser.setName("new User");
newUser.setAge(33);
newUser.setCreateTime(new Date());
int result = baseMapper.insert(newUser);
// Обновление, обновление имени с Mali на mala
TestUser sample = baseMapper.queryById(1);
sample.setName("mala");
int result = baseMapper.updateById(sample);
// Удаление данных, чей ID равен 2
int result = baseMapper.deleteById(2);
Как Mapper, вы можете определить свои собственные методы и выполнять SQL-запросы через аннотации.
// BaseMapper необязателен, и наследование ему эквивалентно добавлению расширенного набора однотабличных curds.
@SimpleMapper
public interface TestUserMapper extends BaseMapper<TestUser> {
@Insert("insert into `test_user` (name,age,create_time) values (#{name}, #{age}, now())")
int insertUser(@Param("name") String name, @Param("age") int age);
@Update("update `test_user` set age = #{age} where id = #{id}")
int updateAge(@Param("id") int userId, @Param("age") int newAge);
@Delete("delete from `test_user` where age > #{age}")
int deleteByAge(@Param("age") int age);
@Query(value = "select * from `test_user` where #{beginAge} < age and age < #{endAge}", resultType = TestUser.class)
List<TestUser> queryByAge(@Param("beginAge") int beginAge, @Param("endAge") int endAge);
}
// Создать сеанс
DalSession session = new DalSession(dataSource);
// Создаём интерфейс Mapper
TestUserMapper userMapper = session.createMapper(TestUserMapper.class);
Лучшее место для унифицированного управления SQL по-прежнему остаётся в файлах Mapper, а файлы dbVisitor Mapper очень хорошо совместимы с MyBatis при очень низких затратах на обучение. Текст запроса:
Associate Mapper files with interface classes (extends from BaseMapper is optional):
@RefMapper("/mapper/quick_dao3/TestUserMapper.xml")
public interface TestUserDAO extends BaseMapper<TestUser> {
int insertUser(@Param("name") String name, @Param("age") int age);
int updateAge(@Param("id") int userId, @Param("age") int newAge);
int deleteByAge(@Param("age") int age);
List<TestUser> queryByAge(@Param("beginAge") int beginAge, @Param("endAge") int endAge);
}
In order to better understand and use dbVisitor Mapper files, it is recommended to add DTD validation. In addition dbVisitor compatible with MyBatis3 DTD for most of the MyBatis project can be normally compatible.
Перевод текста запроса на русский язык:
Связывание файлов Mapper с интерфейсами классов (расширение от BaseMapper необязательно):
@RefMapper("/mapper/quick_dao3/TestUserMapper.xml")
public interface TestUserDAO расширяет BaseMapper<TestUser> {
int insertUser(имя строки @Param, возраст int @Param);
int updateAge(идентификатор пользователя int @Param, новый возраст int @Param);
int deleteByAge(возраст int @Param);
Список<Тестовый пользователь> запрос по возрасту (начальный возраст int @Param, конечный возраст int @Param);
}
В целях лучшего понимания и использования файлов Mapper dbVisitor рекомендуется добавить проверку DTD. Кроме того, dbVisitor совместим с DTD MyBatis3 для большинства проектов MyBatis, что обычно совместимо. // Вы также можете вернуть результаты постраничного поиска с информацией о разбиении на страницы
PageResult<TestUser> queryByAge2(
@Param("beginAge") int beginAge,
@Param("endAge") int endAge,
Page pageInfo);
}
### Использование транзакции
Начиная и передавая транзакцию, вы также можете последовательно включить несколько транзакций, например:
```java {4,8}
DataSource dataSource = DsUtils.dsMySql();
TransactionManager manager = DataSourceManager.getManager(dataSource);
TransactionStatus tranA = manager.begin();
...
manager.commit(tranA);
DataSource dataSource = DsUtils.dsMySql();
TransactionManager manager = DataSourceManager.getManager(dataSource);
TransactionStatus tranA = manager.begin();
TransactionStatus tranB = manager.begin();
TransactionStatus tranC = manager.begin();
...
manager.commit(tranC);
manager.commit(tranB);
manager.commit(tranA);
Параметры метода «begin» позволяют вам установить распространение и изоляцию транзакции.
TransactionStatus tranA = manager.begin(
Propagation.REQUIRES_NEW, // распространение
Isolation.READ_COMMITTED // изоляция
);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )