Mybatis-Plus так прост в использовании (благословение деревенской любви)

Spring Boot
Mybatis-Plus так прост в использовании (благословение деревенской любви)

乡村爱情


написать впереди

Схем улучшения для MyBatis действительно много, и даже есть ощущение, что если вы используете сейчас только «голый MyBatis», вам будет неловко, если у вас не будет каких-то плагинов для улучшения. Этого нет, в предыдущей статье«Проект Spring Boot использует MyBatis Generator для автоматического создания кода уровня данных»Попробуйте генератор MyBatis в формате . На этот раз давайте перейдем к более продвинутому Mybatis-Plus, вам не нужно писать операторы SQL, и листание страниц также выполняется автоматически.Ну, это вкусно!

МожетНажмитеилисканированиеследующеебудь остороженподписаться на официальный аккаунт автораCodeSheep, получить большеПрагматичный, понятный, воспроизводимыйИсходный текст ↓↓↓

CodeSheep · 程序羊


Подготовка базы данных

CREATE TABLE tbl_user
(
	user_id BIGINT(20) NOT NULL COMMENT '主键ID',
	user_name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	user_age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	PRIMARY KEY (user_id)
) charset = utf8;

Благословение MyBatis-Plus

  • Инженерное сооружение(не буду вдаваться в подробности)

  • импорт зависимостей

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.1.0</version>
</dependency>

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.9</version>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
	<version>8.0.12</version>
</dependency>

В основном Mybatis Plus, Ломбок (не знаю, что делает Ломбок?можно посмотреть здесь), пул соединений Druid и другие зависимости.

  • Конфигурация MyBatis Plus

Конфигурация проекта

mybatis-plus:
  mapper-locations: classpath:/mapper/*Mapper.xml

Добавлен класс конфигурации MyBatis Plus.

@Configuration
@MapperScan("cn.codesheep.springbtmybatisplus.mapper")
public class MyBatisConfig {
}

Смотрите, практически нулевая конфигурация, ниже можно написать бизнес-логику


деловое письмо

  • класс сущности
@Data
@TableName("tbl_user")
public class User {
    @TableId(value = "user_id")
    private Long userId;
    private String userName;
    private Integer userAge;
}
  • Класс картографа
public interface UserMapper extends BaseMapper<User> {
}

Никаких интерфейсных методов тут писать не надо, можно добавлять, удалять, изменять и проверять!

  • Класс обслуживания

Интерфейс сервиса:

public interface UserService extends IService<User> {
    int insertUser( User user );
    int updateUser( User user );
    int deleteUser( User user );
    User findUserByName( String userName );
    IPage getUserPage( Page page, User user );
}

Реализация услуги:

@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    // 增
    @Override
    public int insertUser(User user) {
        return baseMapper.insert( user );
    }

    // 改
    @Override
    public int updateUser(User user) {
        return baseMapper.updateById( user );
    }

    // 删
    @Override
    public int deleteUser(User user) {
        return baseMapper.deleteById( user.getUserId() );
    }

    // 查
    @Override
    public User findUserByName( String userName ) {
        return baseMapper.getUserByName( userName );
    }
}
  • Класс контроллера
@RestController
@RequestMapping("/user")
public class UserContorller {

    @Autowired
    private UserService userService;

    // 增
    @PostMapping( value = "/insert")
    public Object insert( @RequestBody User user ) {
        return userService.insertUser( user );
    }

    // 改
    @PostMapping( value = "/update")
    public Object update( @RequestBody User user ) {
        return userService.updateUser( user );
    }

    // 删
    @PostMapping( value = "/delete")
    public Object delete( @RequestBody User user ) {
        return userService.deleteUser( user );
    }

    // 查
    @GetMapping( value = "/getUserByName")
    public Object getUserByName( @RequestParam String userName ) {
        return userService.findUserByName( userName );
    }
}

Благодаря вышеуказанным простым шагам мы реализуем.tbl_userДля добавления, удаления и изменения таблиц вам не нужно писать какие-либо традиционные XML-файлы MyBatis!


Практический эксперимент [Благословение «Родной любви»]

  • Стартовый проект

Появится очень крутой логотип

Mybatis Plus Logo

Далее отправить запрос на добавление, удаление, изменение и проверку через Postman

  • вставить запись

Вставьте несколько записей наугад через PostmanPOST localhost:8089/user/insert

{"userId":3,"userName":"刘能","userAge":"58"}
{"userId":4,"userName":"赵四","userAge":"58"}
{"userId":5,"userName":"谢广坤","userAge":"58"}
{"userId":6,"userName":"刘大脑袋","userAge":"58"}

发送插入请求

插入结果

  • Изменить записи

При модификации записи нужно привести ID пользователя, например модифицируем赵四Имя этой записи赵四(Zhao Four)

发送修改请求

修改结果

  • Удалить запись

Идентификатор пользователя также требуется при изменении записи, например при удалении записи с идентификатором = 6.刘大脑袋запись о

image.png

  • Поиск записи(Обычный запрос, пейджинговый запрос описан ниже)

Например, для запроса по имени:GET localhost:8089/user/getUserByName?userName=刘能


Самая актуальная проблема пейджинга

  • Сначала соберите плагин подкачки
@Bean
public PaginationInterceptor paginationInterceptor() {
	return new PaginationInterceptor();
}
  • Класс картографа
public interface UserMapper extends BaseMapper<User> {

    // 普通查询
    User getUserByName( String userName );

    // 分页查询
    IPage<List<User>> getUsersPage( Page page, @Param("query") User user );
}
  • Класс обслуживания
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    // 查:普通查
    @Override
    public User findUserByName( String userName ) {
        return baseMapper.getUserByName( userName );
    }

    // 分页查
    @Override
    public IPage getUserPage(Page page, User user) {
        return baseMapper.getUsersPage( page, user );
    }
}
  • Класс контроллера
@GetMapping( value = "/page")
public Object getUserPage( Page page, User user ) {
	return userService.getUserPage( page, user );
}

Фактический эксперимент, мы подкачиваем запрос年龄 = 58Несколько записей:

分页查询结果

Видно, что в результирующих данных помимо данных о текущей странице возвращается еще и общее количество записей, общее количество страниц и т.д., что очень элегантно!


напиши в конце

Из-за ограниченных возможностей, если есть ошибки или неуместность, пожалуйста, критикуйте и исправьте их, учитесь и обменивайтесь мнениями вместе!