По сравнению с мибатисом сделаны только улучшения, никаких модификаций.
MyBatis-Plus — это инструмент улучшения mybatis. характеристика: Никаких вторжений: Делаются только доработки на основе мибатиса без изменений. Низкие потери: базовый творог будет впрыскиваться при запуске, с базовой потерей производительности, прямая объектно-ориентированная операция. Мощная операция Curd: встроенный Mapper и общий сервис, большинство операций Crud на одной таблице могут быть реализованы с помощью лишь небольшого количества настроек, мощный условный конструктор для удовлетворения различных потребностей. Поддерживает вызов лямбда-формы: с помощью лямбда-выражений вы можете легко писать различные условные запросы, не беспокоясь о опечатках в полях. Поддерживает автоматическое создание первичных ключей: поддерживает до четырех стратегий первичного ключа. Встроенный генератор кода: используйте код или плагин maven для быстрого создания кодов слоев картографов, моделей, сервисов и контроллеров, а также поддержки механизмов шаблонов. Встроенный подключаемый модуль разбиения на страницы. Благодаря физическому разбиению на страницы mybatis разработчикам не нужно заботиться о конкретных операциях. После настройки подключаемого модуля написание разбиения на страницы эквивалентно обычным операциям со списками. Плагин подкачки поддерживает несколько баз данных: поддерживает MySQL, Oracle, DB2, hsql и другие базы данных. и т. д. Для получения дополнительной информации перейдите на официальный сайт:
https://baomidou.com/
# Построить базу данных и таблицу
CREATE DATABASE `LBB`
USE `LBB`;
CREATE TABLE `user` (
`id` BIGINT(20) NOT NULL COMMENT «Идентификатор первичного ключа»,
`name` VARCHAR(30) DEFAULT NULL COMMENT 'Имя',
`age` INT(11) DEFAULT NULL COMMENT 'возраст',
`email` VARCHAR(50) DEFAULT NULL COMMENT 'Почта',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
# Вставить данные
INSERT INTO USER (id, NAME, age, email) VALUES
(1, 'Jone', 18, '18@qq.com'),
(2, 'Jack', 19, '19@qq.com'),
(3, 'Tom', 20, '20@qq.com'),
(4, 'Lucy', 21, '21@qq.com'),
(5, 'bob', 22, '22@qq.com');
1. Используйте инициализацию для создания и внедрения зависимостей.
<dependencies>
<!--springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring bootTest-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis -plus полагаться-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!--Lombokполагаться,Также необходимо скачатьLombokплагин-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--MySQLПодключить драйвер-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
2.Настройте файл application.yml.
spring:
# Данные конфигурации — информация
datasource:
# Тип источника данных конфигурации
type: com.zaxxer.hikari.HikariDataSource
# Информация о базе данных конфигурационного соединения
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/lbb?characterEncoding=utf-
8&useSSL=false
username: root
password: 021806
Уведомление: spring boot 2.0 (встроенный драйвер jdbc5), использование класса драйвера: имя-класса-драйвера: com.mysql.jdbc.Driver spring boot 2.1 и выше (встроенный драйвер jdbc8), класс драйвера использует: driver-class-name: com.mysql.cj.jdbc.Driver В противном случае при запуске тестового примера будет WARN информация 2. URL-адрес адреса подключения. URL-адрес версии MySQL5.7: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false URL-адрес версии MySQL8.0: jdbc:mysql://localhost:3306/mybatis_plus? serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false В противном случае при запуске тестового примера выдается следующая ошибка: java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more
1. Сканирование основного пакета настроек класса
@SpringBootApplication
@MapperScan("com.li.mptest.mapper")//Сканировать пакет картографа
public class MpTestApplication {
public static void main(String[] args) {
SpringApplication.run(MpTestApplication.class, args);
}
}
2.Установить класс сущности
@Data //lombok аннотация
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
3.Добавить картограф
public interface UserMapper extends BaseMapper<User> {
}
BaseMapper — это средство сопоставления шаблонов, предоставляемое MyBatis-Plus, которое содержит базовые методы CRUD и универсальные методы для операций. Тип объекта
@SpringBootTest
class MpTestApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
//selectList() запрашивает коллекцию списков на основе встроенного конструктора условий MP. Значение null означает отсутствие условия, то есть запросить все.
userMapper.selectList(null).forEach(System.out::println);
}
}
Для удобства просмотра базовые выполняемые операторы можно просмотреть в журнале конфигурации.
# КонфигурацияMyBatis日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Официальный базовый преобразователь инкапсулирует простые методы.
public interface BaseMapper<T> extends Mapper<T> {
/**
* вставить запись
*
* @param entity Сущность объект
*/
int insert(T entity);
/**
* в соответствии с ID удалитьудалять
*
* @param id Идентификатор первичного ключа
*/
int deleteById(Serializable id);
/**
* в соответствии с columnMap Условия удаления записи
*
* @param columnMap поля таблицы map объект
*/
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/**
* в соответствии с entity Условия удаления записи
*
* @param wrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
/**
* удалитьудалять(в соответствии сID 批量удалитьудалять) *
* @param idList Идентификатор первичного список ключей (не может быть null а также empty)
*/
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/**
* в соответствии с ID Исправлять
*
* @param entity Сущность объект
*/
int updateById(@Param(Constants.ENTITY) T entity);
/**
* в соответствии с whereEntity состояние, обновить запись
*
* @param entity Сущность объект (set Условие ценить может быть null)
* @param updateWrapper Сущность класс операции инкапсуляции объекта (может быть ноль, внутри entity используется для создания where заявление)
*/
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
/**
* в соответствии с ID Запрос
*
* @param id Идентификатор первичного ключа
*/
T selectById(Serializable id);
/**
* Запрос(в соответствии сID Массовый Запрос)
*
* @param idList Идентификатор первичного список ключей (не может быть null а также empty)
*/
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/**
* Запрос(в соответствии с columnMap состояние)
*
* @param columnMap поля таблицы map объект
*/
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/**
* в соответствии с entity состояние,Запись запроса
*
* @param queryWrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* в соответствии с Wrapper состояние,Запросить общее количество записей
*
* @param queryWrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* в соответствии с entity состояние,Все записи Запроса
*
* @param queryWrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* в соответствии с Wrapper состояние,Все записи Запроса
*
* @param queryWrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* в соответствии с Wrapper состояние,Все записи Запроса
* <p>Уведомление: 只返回第一个字段的ценить</p>
*
* @param queryWrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* в соответствии с entity состояние,Все записи Запроса(и перевернуть страницу)
*
* @param page Пагинация Запроссостояние(может быть RowBounds.DEFAULT)
* @param queryWrapper Сущность класс операции инкапсуляции объекта (может быть null)
*/
<E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* в соответствии с Wrapper состояние,Все записи Запроса(и перевернуть страницу)
*
* @param page Пагинация Запроссостояние
* @param queryWrapper Сущность объект Класс операции инкапсуляции
*/
<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}
Наблюдая за методами в BaseMapper, большинство методов имеют формальные параметры типа Wrapper. Это условный конструктор, который может быть. Установите различные условия для оператора SQL. Если условий нет, вы можете присвоить формальному параметру значение null, то есть запросить (удалить/изменить) значение. Данные есть, а статья про Wrapper будет подробно представлена позже.
CRUD общего обслуживания инкапсулирует интерфейс IService и дополнительно инкапсулирует CRUD, используя get для запроса удаления и удаления одной строки. В дополнение к разбиению страниц на страницы коллекции запросов списка, метод именования префиксов различает слой Mapper, чтобы избежать путаницы. Generic T — это любой объект сущности. Если есть возможность настроить общий метод Service, вы можете создать собственное наследование IBaseService. Базовый класс предоставлен Mybatis-Plus. Официальный адрес сайта:
https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3
В MyBatis-Plus есть интерфейс IService и класс его реализации ServiceImpl, который инкапсулирует общую логику бизнес-уровня.
О том, как использовать: простой пример:
Запросить общее количество записей
1. Создайте интерфейс службы и класс реализации.
public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements
UserService
{
}
2. Тест
@Autowired
UserService userService;
@Test
public void testGetCount(){
long count = userService.count();
System.out.println("Общее количество записей:" + count);
}
При использовании MyBatis-Plus для реализации базового CRUD нам не нужно указывать таблицу, с которой нужно работать. Нам нужно только установить общий тип (Пользователь), когда интерфейс Mapper наследует BaseMapper, который определяется универсальным типом BaseMapper. is, тип сущности и значение по умолчанию. Имя таблицы операции соответствует имени класса типа сущности. Если это противоречиво, используйте аннотацию @TableName.
@Data //lombok аннотация
@TableName("t_user") //Имя таблицы в базе данных — t_user
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
Конечно, если вы хотите удалить префиксы большого количества таблиц, вы можете установить глобальные переменные.
ybatis-plus:
configuration:
# Журнал конфигурацииMyBatis
журнал-осуществление: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# Конфигурация Префикс по умолчанию для таблиц действий MyBatis-Plus.
table-prefix: t_
Когда MyBatis-Plus реализует CRUD, он по умолчанию будет использовать id в качестве столбца первичного ключа, а при вставке данных он будет генерировать id на основе стратегии алгоритма снежинки, если первичный ключ в классе сущности и таблице не равен id. , но другие поля, такие как uid, MyBatis-Plus выдаст исключение, если не сможет его распознать. Поле «uid» не имеет значения по умолчанию, что указывает на то, что MyBatis-Plus не использует uid в качестве первичного ключа. Отметьте его как первичный ключ с помощью @TableId в атрибуте uid в классе сущности, и оператор SQL может быть успешно выполнен.
атрибут значения
@Data //lombok аннотация
@TableName("t_user") //Имя таблицы в базе данных — t_user
public class User {
@TableId("uid")
private Long uid;
private String name;
private Integer age;
private String email;
}
атрибут типа Используется для установки стратегии генерации первичного ключа. По умолчанию используется алгоритм «снежинка».
Распространенные типы
ценить | значение |
---|---|
idType.ASSIGN_ID | Стратегия, основанная на алгоритме снежинки, генерирует идентификатор данных независимо от того, установлен ли для идентификатора базы данных автоматическое приращение. |
IdType.AUTO | Используйте стратегию автоматического увеличения базы данных. Обратите внимание: для этого типа убедитесь, что в базе данных установлено автоматическое увеличение идентификатора, иначе он будет недействительным. |
Конечно, его также можно установить через глобальные переменные.
mybatis-plus:
configuration:
# Журнал конфигурацииMyBatis
журнал-осуществление: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# Конфигурация Префикс по умолчанию для таблиц действий MyBatis-Plus.
table-prefix: t_
# Конфигурация стратегии первичного ключа MyBatis-Plus
id-type: auto
Когда MyBatis-Plus выполняет инструкции SQL, он должен гарантировать, что имена атрибутов в классе сущностей совпадают с именами полей в таблице. Если имена атрибутов и имена полей в классе сущностей несовместимы, Если атрибуты в классе сущностей используют стиль именования верблюжьего регистра, а поля в таблице используют стиль именования с подчеркиванием, например имя класса сущности userName и поле user_name в таблице, MyBatis-Plus автоматически преобразует подчеркивание стиль именования в стиле именования Camel. Эквивалент настройки в MyBatis. Например, имя атрибута класса сущности и имя пользователя поля таблицы. На данный момент вам необходимо использовать @TableField("username") в атрибуте класса сущности, чтобы установить имя поля, соответствующее атрибуту.
@Data //lombok аннотация
@TableName("t_user") //Имя таблицы в базе данных — t_user
public class User {
@TableId("uid")
private Long uid;
@TableField("username")
private String name;
private Integer age;
private String email;
}
надгробие Физическое удаление: реальное удаление, соответствующие данные удаляются из базы данных, и удаленные данные не могут быть запрошены позже. Логическое удаление: Фейковое удаление, изменение статуса соответствующего поля в данных на «статус удален», а затем в базе данных. Эту запись данных все еще можно увидеть в Сценарий использования: возможно восстановление данных.
Сначала добавьте поле в таблицу базы данных, представляющее надгробие.
Протестируйте функцию удаления. На самом деле выполняется модификация. При повторном запросе логически удаленные данные не будут запрошены по умолчанию.
UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
1.>добавить в Конфигурациядобрый
@Configuration
@MapperScan("com.li.mptest.mapper") //Здесь можно переместить аннотацию в основной класс
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new
PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
2. Тест
public void testPage(){
//Установим параметры пагинации
Page<User> page = new Page<>(1, 5);
userMapper.selectPage(page, null);
//Получаем данные пагинации
List<User> list = page.getRecords();
list.forEach(System.out::println);
System.out.println("Текущая страница:"+page.getCurrent());
System.out.println("Количество элементов, отображаемых на каждой странице:"+page.getSize());
System.out.println("Общее количество записей:"+page.getTotal());
System.out.println("Общее количество страниц:"+page.getPages());
System.out.println("Есть ли предыдущая страница:"+page.hasPrevious());
System.out.println("Есть ли следующая страница:"+page.hasNext());
}
1. Введение зависимостей
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
2. Быстрое поколение
public class FastAutoGeneratorTest {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/lbb?characterEncoding=utf-8&userSSL=false","root", "021806")
.globalConfig(builder -> {
builder.author("lbb") // Установить автора
//.enableSwagger() // включать swagger модель
.fileOverride() // Перезаписать сгенерированные файлы
.outputDir("D://mybatis_plus"); // Укажите выходной каталог
})
.packageConfig(builder -> {
builder.parent("com.li") // Установить имя родительского пакета
.moduleName("mybatisplus") // Установите имя модуля родительского пакета
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://mybatis_plus"));
// Установить путь создания MapperXml
})
.strategyConfig(builder -> {
builder.addInclude("t_user") // Задайте имя таблицы, которая будет сгенерирована
.addTablePrefix("t_", "c_"); // Установить префикс таблицы фильтров
})
.templateEngine(new FreemarkerTemplateEngine()) // Используйте шаблон движка Freemarker, по умолчанию используется шаблон движка Velocity.
.execute();
}
}