Я слышал, что поиск в WeChat для «Java Fish Aberdeen» станет сильнее!
Эта статья включена вgithubиgitee, который содержит мою полную серию статей по Java, вы можете прочитать его для изучения или интервью.
(Введение
Когда JDBC был впервые написан, необходимо было вручную настроить информацию о соединении и написать операторы SQL один за другим. Позже появился Mybatis, и не нужно было вручную настраивать информацию о подключении, оператор sql тоже был изолирован от кода, но писать Sql было неизбежно. Потом появился MybatisPlus, и теперь мне даже не нужно писать Sql.
(2) Что такое MybatisPlus?
Во-первых, выньте официальный адрес сайта:
Проще говоря, MybatisPlus — это усовершенствованный инструмент для Mybatis, который упрощает разработку и повышает ее эффективность. На официальном сайте он использовал такое изображение, чтобы представить отношения между MybatisPlus и Mybatis.
На картинке MybatisPlus сказал, что отношения между ним и Mybatis похожи на двух братьев в Contra.
(3) Предварительная подготовка
Прежде чем объяснять MybatisPlus, давайте подготовим пакет данных
CREATE DATABASE user;
USE user;
SET NAMES utf8mb4;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户Id',
`username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
`password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`gmt_create` datetime(3) NOT NULL COMMENT '创建时间',
`gmt_modified` datetime(3) NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
INSERT INTO `user` VALUES
(1,'a001','name1','123456',now(),now()),
(2,'a002','name2','123456',now(),now()),
(3,'a003','name3','123456',now(),now()),
(4,'a004','name4','123456',now(),now()),
(5,'a005','name5','123456',now(),now()),
(6,'a006','name6','123456',now(),now()),
(7,'a007','name7','123456',now(),now()),
(8,'a008','name8','123456',now(),now()),
(9,'a009','name9','123456',now(),now()),
(10,'a010','name10','123456',now(),now())
(4) Быстрый запуск Mybatis
1. Введите последние зависимости
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>Latest Version</version>
</dependency>
2. Настройте информацию о подключении к базе данных в центре конфигурации.
spring.datasource.url=jdbc:mysql://192.168.61.102:3306/user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3. Добавьте аннотацию MapperScan в загрузочный класс Spring.
@SpringBootApplication
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
}
}
4. Создайте маппер, ДЕЛАЙТЕ
MybatisPlus может автоматически генерировать Mapper, DO, Service, Controller, здесь в качестве руководства, создавать вручную. Первое различие между MybatisPlus и Mybatis, где аннотация @TableName используется для указания, какой таблице соответствует текущий класс сущностей.
@Data
@TableName("user")
public class UserDO {
private Long id;
private String userId;
private String username;
private String password;
private LocalDateTime gmtCreate;
private LocalDateTime gmtModified;
}
При создании класса Mapper наследуйте класс BaseMapper, который является базовым классом, предоставляемым MybatisPlus, который инкапсулирует часто используемые операции запросов.
public interface UserMapper extends BaseMapper<UserDO> {
}
5. Запросить данные
При использовании Mybatis CRUD данных необходимо записать в sql для достижения.. BaseMapper, предоставляемый MybatisPlus, предоставляет как интерфейс инкапсуляции уровня Mapper, так и интерфейс инкапсуляции уровня службы. Основываясь на предыдущем методе написания, интерфейс на уровне Mapper будет более склонен к использованию в обычной разработке. Внедрить несколько интерфейсов на уровне Mapper:
Например, если я хочу запросить объем данных пользовательской таблицы, я могу напрямую вызвать:
Integer integer = userMapper.selectCount(null);
MybatisPlus предоставляет условный конструктор Wrappers, который может создавать ряд условий с помощью Wrappers, например, запрашивать данные, чье имя пользователя name1.
List<UserDO> userDOList = userMapper.selectList(Wrappers.<UserDO>lambdaQuery()
.eq(UserDO::getUsername, "name1"));
Например, я хочу запросить данные с идентификатором больше 5.
List<UserDO> userDOList1 = userMapper.selectList(Wrappers.<UserDO>lambdaQuery()
.gt(UserDO::getId, 5));
6. Вставка данных
Нет проблем в использовании вышеуказанного метода для запроса данных.Есть несколько мест, которые можно оптимизировать при вставке данных.Мы можем установить метод автоинкремента первичного ключа через аннотацию @TableId, и установить автоматическое заполнение данных через аннотацию @TableField. Итак, измените класс UserDO:
@Data
@TableName("user")
public class UserDO {
@TableId(type = IdType.AUTO)
private Long id;
private String userId;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime gmtModified;
}
В классе сущностей задайте для идентификатора автоинкремент, задайте gmtCreate для автоматического заполнения при вставке, задайте gmtModified для автоматического заполнения при создании и изменении, а затем настройте правило автозаполнения:
@Configuration
public class MybatisObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
setFieldValByName("gmtCreate", LocalDateTime.now(),metaObject);
setFieldValByName("gmtModified", LocalDateTime.now(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
setFieldValByName("gmtModified",LocalDateTime.now(),metaObject);
}
}
Наконец, напрямую вызовите API для вставки данных.
@Test
public void test3(){
UserDO userDO=new UserDO();
userDO.setUserId("a011");
userDO.setUsername("name11");
userDO.setPassword("123456");
userMapper.insert(userDO);
}
Для получения дополнительной информации, пожалуйста, обратитесь к официальному веб-сайту, который очень подробный. Но если ваш sql включает в себя операции соединения с несколькими таблицами, вы все равно можете написать sql самостоятельно, как MyBatis.
(5) Резюме
На этом этапе у вас должно быть общее представление о MybatisPlus.Также стоит упомянуть, что организация MybatisPlus с открытым исходным кодом является внутренней организацией, поэтому этот документ особенно удобен для местных разработчиков и может использоваться с уверенностью. Я Юзай, увидимся в следующий раз!