MyBatis Plus d'accès aux données (2) - Constructeur conditionnel wrapper

"L'offre arrive, cherchez des amis à récupérer ! Je participe à l'événement de vérification du recrutement du printemps 2022, cliquez pour voir les détails de l'événement ."

1. Introduction à l'emballage

MyBatis Plus construit des conditions de requête via Wrapper pour mettre en œuvre des opérations de lecture ou d'écriture conditionnelles.image.png

Divers paramètres conditionnels sont définis dans la sous-classe abstraite de Wrapper, AbstractWrapperimage.png

拼接SQL语句使用的是数据库字段,而不是Java实体类的属性

La signification de toutes les conditions de requête dans AbstractWrapper peut être consultée dans la documentation officielle Condition Constructor

2. Requête conditionnelle

Préparation préliminaire

Modifier la méthode d'insertion pour insérer des données dans la table t_tesla

@Test
public void insert(){
    for (int i = 4; i < 40; i++) {
        Tesla tesla = new Tesla();
        tesla.setVehicleName("Model " + i);
        tesla.setVehicleType("Compact Car");
        if (i % 2 == 0) {
            tesla.setFactory("Fremont Gigafactory");
        } else {
            tesla.setFactory("Shanghai Gigafactory");
        }
        tesla.setVehiclePrice(23000d + i * 10000);
        teslaMapper.insert(tesla);
    }
}
复制代码

Exécutez cette méthode pour insérer des données dans la base de données

Implémenter une requête conditionnelle

Méthodes selectList et selectCount dans BaseMapper

/**
 * 根据 entity 条件,查询全部记录
 *
 * @param queryWrapper 实体对象封装操作类(可以为 null)
 */
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

/**
 * 根据 Wrapper 条件,查询总记录数
 *
 * @param queryWrapper 实体对象封装操作类(可以为 null)
 */
Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
复制代码

EXIGENCES : Interrogez Tesla pour tous les modèles de voitures compactes produites à l'usine de Fremont

@Test
public void selectListWithWrapper(){
    // 构造查询条件
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("factory", "Fremont Gigafactory")
                // 添加or关键字
                .or()
                .eq("vehicle_type","Compact Car");

    List<Tesla> teslaList = teslaMapper.selectList(queryWrapper);
    System.out.println("查询到的总数为:" + teslaList.size());

}
复制代码

exécuter la méthode

image.png

Afficher le code source de la méthode ou

Implémenter la méthode de test selectCount

@Test
public void selectCountWithWrapper(){
    // 构造查询条件
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("factory", "Shanghai Gigafactory")
            .eq("vehicle_type","Compact Car");

    Long count = teslaMapper.selectCount(queryWrapper);
    System.out.println("查询到符合条件的总数为:" + count);
}
复制代码

exécuter la méthode

image.png

Implémenter une requête conditionnelle de pagination

Demande : paginer pour interroger toutes les Tesla produites dans les usines de Shanghai et vendues entre 230 000 et 3 000 000

@Test
public void selectPageWithWrapper(){
    // 构造查询条件
    QueryWrapper<Tesla> teslaWrapper = new QueryWrapper<>();
    teslaWrapper.between("price",230000,3000000)
                .eq("factory","Shanghai Gigafactory");

    // 构造分页条件
    Page<Tesla> teslaPageCondition = new Page<>(2,4);

    Page<Tesla> teslaPage = teslaMapper.selectPage(teslaPageCondition, teslaWrapper);
    System.out.println("分页条件查询的数据:" + teslaPage.getRecords());
    System.out.println("分页条件查询到的记录总数:" + teslaPage.getTotal());
}
复制代码

exécuter la méthode

image.png

3. Mise à jour de l'état

Méthode de mise à jour conditionnelle dans BaseMapper

/**
 * 根据 whereEntity 条件,更新记录
 *
 * @param entity        实体对象 (set 条件值,可以为 null)
 * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
 */
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
复制代码

Demande : ajustez le prix de toutes les Tesla dont le prix est supérieur à 113 000,00 et produites par l'usine de Shanghai à 113 000,00

@Test
public void updateWithWrapper(){
    // 构造更新条件
    UpdateWrapper<Tesla> updateWrapper = new UpdateWrapper<>();
    updateWrapper.gt("price",113000.00)
                 .eq("factory","Shanghai Gigafactory")
                 .set(true,"price",113000.00);

    int updateCount = teslaMapper.update(null, updateWrapper);
    System.out.println("更新的行数为:" + updateCount);

}
复制代码

exécuter la méthodeimage.png

La méthode de mise à jour passe dans une classe d'entité

@Test
public void updateWithWrapper(){
    // 构造更新条件
    UpdateWrapper<Tesla> updateWrapper = new UpdateWrapper<>();
    updateWrapper.gt("price",100000.00)
                 .eq("factory","Shanghai Gigafactory")
                 .set(true,"price",100000.00);

    Tesla tesla = new Tesla();
    tesla.setFactory("Shanghai Gigafactory");
    tesla.setVehiclePrice(100000.00);
    tesla.setVehicleType("Roadster");
    tesla.setVehicleName("Tesla Roadster");
    int updateCount = teslaMapper.update(tesla, updateWrapper);
    System.out.println("更新的行数为:" + updateCount);
}
复制代码

passe de mise à jour dans une classe d'entité image.pngSelon l'instruction SQL exécutée, MyBatis Plus utilise la valeur de l'attribut de la classe d'entité entrante comme valeur du champ mis à jour. Il y a deux price=? après le mot clé set dans l'instruction SQL, indiquant que la UpdateWrapper La valeur du champ de mise à jour définie par la méthode set n'est pas remplacée par le prix de la classe d'entité.

S'il y a peu de champs à mettre à jour, vous pouvez utiliser la méthode set dans QueryWrapper pour définir la valeur du champ mis à jour. S'il y a beaucoup de champs à mettre à jour, il est recommandé de créer un nouvel objet et de définir la valeur du champ à mettre à jour à la propriété correspondante de l'objet go in.

4. Suppression conditionnelle

Méthode de suppression conditionnelle dans BaseMapper

/**
 * 根据 entity 条件,删除记录
 *
 * @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
 */
int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
复制代码

Demande : Supprimer Teslas avec des prix supérieurs à 90 000 produits par l'usine de Shanghai

@Test
public void deleteWithWrapper(){
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper();

    queryWrapper.eq("factory", "Shanghai Gigafactory")
            .gt("price","90000.00");

    int deleteCount = teslaMapper.delete(queryWrapper);
    System.out.println("删除的数量为:" + deleteCount);
}
复制代码

exécuter la méthodeimage.png

5. Autres méthodes courantes de Wrapper

sorte

La condition de tri peut être une condition unique ou un ensemble

@Test
public void selectPageByWrapperAndSortByPrice(){
    // 排序条件的集合
    List<String> orderConditionList = new ArrayList<>();
    orderConditionList.add("price");
    orderConditionList.add("name");

    // 对所有弗拉蒙特工厂生产的Tesla按照价格降序排列
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("factory","Fremont Gigafactory")
                .orderByDesc(orderConditionList);

    Page<Tesla> teslaPageCondition = new Page<>(2,5);

    Page<Tesla> teslaPage = teslaMapper.selectPage(teslaPageCondition, queryWrapper);

    System.out.println("分页查询并降序排列的数据:" + teslaPage.getRecords());

}
复制代码

exécuter la méthodeimage.png

Épissage SQL

La dernière méthode peut épisser SQL à la fin de SQL

@Test
public void selectListByLastInWrapper(){
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.last("ORDER BY price");

    List<Tesla> teslaList = teslaMapper.selectList(queryWrapper);

    System.out.println("last方法拼接SQL查询到的数据:" + teslaList);

}
复制代码

exécuter la méthodeimage.png

Six, résumé de l'emballage

Les conditions peuvent être construites à l'aide de QueryWrapper pour les opérations de requête et de suppression, et les constructions UpdateWrapper pour les mises à jour.

Les requêtes de critères sont incluses dans les méthodes générées par General Mapper et MyBatis MBG, qui sont des requêtes QBC. Les conditions de requête sont construites en générant des classes d'entités XxxExaple. Pour plus de détails, veuillez vous référer à "MyBatis (VIII) - MyBatis Universal Mapper (Part B) de l'accès aux données " Generic Mapper implémente des requêtes complexes -ExampleMapper"

La différence entre les deux:

  • La différence entre la requête conditionnelle de MBG ou General Mapper est que la requête conditionnelle de MBG est utilisée XxxExample中的属性也就是实体类的属性.
  • MyBatis Plus permet de construire des conditions de requête 数据库的字段.

Acho que você gosta

Origin juejin.im/post/7079263417239863332
Recomendado
Clasificación