Springboot construit rapidement le projet mybatisplus + résumé du problème

Comparé aux mybatis couramment utilisés, mybatisPlus peut nous aider à nous concentrer davantage sur le développement commercial et à réduire le codage des fichiers SQL. Utilisez maintenant SpringBoot 
+ mybatisPlus pour créer un projet. 

1. Résumé des problèmes rencontrés pendant le processus de construction

(1) Rapport d'erreur de démarrage

Ajouter une dépendance

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

En raison de la relation de référence, il est obligatoire de mettre à niveau le numéro de version de mybatis-spring-boot-starter vers 2.0.0 ou supérieur.

<dependency> 
  <groupId> org.mybatis.spring.boot </groupId> 
  <artifactId> mybatis-spring-boot-starter </artifactId> 
  <version> 2.0.1 </version> 
</dependency>
(2) Le service peut avoir une méthode d'exploitation de la base de données en héritant de IService <T>

Façons de réaliser la requête 1,

userService.getOne (Wrappers. <User> lambdaQuery (). eq (false, User :: getId, 3L) .orderByDesc (User :: getId) .last ("limit 1"));

Façons de réaliser la requête 2,

QueryWrapper <User> wrapper = new QueryWrapper <> (); 
wrapper.eq ("nom", "Save1"). ou (). eq ("phone_number", "17300000001"). orderByDesc ("id");

(3) Il existe de nombreux pièges dans la méthode mybatisPlus. Par exemple, la méthode getOne renvoie un seul modèle, mais sql n'ajoute pas de limite 1

Il doit donc être épelé dans le back.last ("limit 1"));

Par conséquent, il peut y avoir de nombreux problèmes d'utilisation, il est recommandé de regarder d'abord l'implémentation de la méthode d'IService

## spring-boot-demo-mybatis-plus 

#pom 
<? xml version = "1.0" encoding = "UTF-8"?> 
<project xmlns = "http://maven.apache.org/POM/4.0.0 "xmlns: xsi =" http://www.w3.org/2001/XMLSchema-instance " 
         xsi: schemaLocation =" http://maven.apache.org/POM/4.0.0 https: //maven.apache. org / xsd / maven-4.0.0.xsd "> 
    <modelVersion> 4.0.0 </modelVersion> 
    <parent> 
        <groupId> com.juejueguai </groupId> 
        <artifactId> spring-boot-demo </artifactId> 
        <version > 1.0-INSTANTANÉ </version> 
    </parent> 
    <groupId> com.example </groupId> 
    <artifactId> spring-boot-demo-mybatis-plus </ artifactId> / artifactId> 
    <version> 0.0.1-INSTANTANÉ </version>
    <nom> spring-boot-demo-mybatis-plus </name> 
    <description> Projet de démonstration pour Spring Boot </description> 
    <properties> 
        <java.version> 1.8 </java.version> 
    </properties> 
    <dependencies> 
        <dependency> 
            <groupId> com.baomidou </groupId> 
            <artifactId> mybatis-plus-boot-starter </artifactId> 
            <version> 3.3.1.tmp </version> 
        </dependency> 
        <dependency> 
            <groupId> org .springframework.boot </groupId> 
            <artifactId> spring-boot-starter-test </artifactId> 
            <scope>test </scope> 
        </dependency> 
        <dependency>
            <groupId> mysql </groupId> 
            </exclusions> 
            <artifactId> mysql-connector-java </artifactId>
        </dependency> 
        <dependency> 
            <groupId> org.springframework.boot </groupId> 
            <artifactId> spring-boot-starter-web </artifactId> 
        </dependency> 
        <dependency> 
            <groupId> org.springframework.boot </ groupId> 
            <artifactId> spring-boot-starter-test </artifactId> 
            <scope> test </scope> 
            <exclusions> 
                <exclusion> 
                    <groupId> org.junit.vintage </groupId> 
                    <artifactId> junit-vintage-engine </artifactId> 
                </exclusion>
        </dependency> 
    </dependencies> 
    <build>
        <plugins> 
            <plugin> 
                <groupId> org.springframework.boot </groupId> 
                <artifactId> spring-boot-maven-plugin </artifactId> 
            </plugin> 
        </plugins> 
    </build> 
</project> 

#yml 

printemps: 
  dataSource 
    url: jdbc: mysql: // localhost: 3306 / spring_boot_test useUnicode = true & CharacterEncoding = UTF-8 & usessl = false & autoreconnect = true & failOverReadOnly = false & serverTimezone = GMT% 2B8? 
    nom d' utilisateur: root 
    Mot de passe: root 
    pilote-class-name: com.mysql .jdbc.Type de pilote 
    : com.zaxxer.hikari.HikariDataSourcevrai 
    hikari:
    Mode d'initialisation HikariDataSource : toujours
    continue-on-error: true 
      minimum-idle: 5 
      connection-test-query: SELECT 1 FROM DUAL 
      maximum-pool-size: 20 
      auto-commit: true 
      idle-timeout: 30000 
      pool-name: SpringBootDemoHikariCP 
      durée de vie maximale: 60000 
      connexion -timeout: 30000 
journalisation: 
  niveau: 
    com.juejueguai: debug 
    com..juejueguai.springbootdemomybatisplus.mapper: trace 
mybatis-plus: 
  mapper-locations: classpath: mappers / *. xml #Entity 
  scan, plusieurs packages utilisent des virgules ou des points-virgules 
  Type séparéAliasesPackage : com.juejueguai.springbootdemomybatisplus.entity 
  global-config: 
    # Configuration relative à la base de données 
    db-config:
      # Type de clé primaire AUTO: "ID de base de données auto-alimenté", INPUT: "l'utilisateur entre l'ID", ID_WORKER: "ID unique global (ID unique numérique)", UUID: "ID unique global de l'UUID"; 
      type d'ID: 
      Stratégie de champ automatique # IGNORÉ: "ignorer le jugement", NOT_NULL: "jugement non-NULL"), NOT_EMPTY: "jugement non vide" 
      stratégie de champ: not_empty #Camel case 
      underline conversion 
      table-underline: true 
      # si pour 
      activer la dénomination en majuscules , non activé par défaut # capital- mode: true 
      #logic 
      delete configuration # logic-delete-value: 1 
      # logic-not-delete-value: 0 
      db-type: mysql 
    #refresh mapper debug artifact 
    refresh: true 
  # configuration de 
  configuration native : 
    map-underscore-to-camel -case: true 
    cache-enabled: true 
serveur: 
  port:9004 

# fichier sql 
/ *
Navicat MySQL Data Transfer 

Source Server: 本 机 数据库
Source Server Version: 50549 
Source Host: localhost: 3306 
Source Database: spring_boot_test 

Type de serveur cible: MYSQL 
Target Server Version: 50549 
File Encoding: 65001 

Date: 2020-07-17 16:16: 48 
* / 

SET FOREIGN_KEY_CHECKS = 0; 

- ---------------------------- 
- Structure de la table pour orm_role 
- ------------ ---------------- 
DROP TABLE IF EXISTS `orm_role`; 
CREATE TABLE `orm_role` ( 
  ` id` int (11) NOT NULL AUTO_INCREMENT COMMENT '主 键', 
  `name` varchar (32) NOT NULL COMMENT '角色 名', 
  PRIMARY KEY (` id`), 
  UNIQUE (`name`) 
) ENGINE = InnoDB AUTO_INCREMENT = 3 DEFAULT CHARSET = utf8 COMMENT = 'Spring Boot Demo Orm series example table'; 

- --------------- - ------------ 
- Enregistrements de orm_role 
- ---------------------------- 
INSERT INTO `orm_role` VALUES ('2', 'Normal user'); 
INSERT INTO `orm_role` VALUES ('1', 'Administrator'); 


/ * 
Navicat MySQL Data Transfer 

Source Server: Base de données locale 
Version du serveur source: 50549 
Hôte source: localhost: 3306 
Base de données source: spring_boot_test 

Type de serveur cible: MYSQL 
Version du serveur cible: 50549 
Codage du fichier: 65001 

Date: 2020-07-17 16:17:23 
* / 

SET FOREIGN_KEY_CHECKS = 0;

- ---------------------------- 
- Structure de la table pour orm_user 
- ------------ --- ------------- 
DROP TABLE IF EXISTS `orm_user`; 
CREATE TABLE` orm_user` ( 
  `id` int (11) NOT NULL AUTO_INCREMENT COMMENT'primary key ', 
  ` name` varchar (32) NOT NULL COMMENT'Username ', 
  `password` varchar (32) NOT NULL 
  COMMENT'Encrypted password', ` salt` varchar (32) NOT NULL 
  COMMENT'Salt utilisé pour le chiffrement ', `email` varchar (32) NOT NULL COMMENT' mailbox ', 
  `phone_number` varchar (15) NOT NULL 
  COMMENT'phone number', ` status` int (2) NOT NULL DEFAULT '1' COMMENT'status, -1: suppression logique, 0: désactivé, 1: activé ', 
  `create_time` datetime DEFAULT NULL 
  COMMENT'create time ', ` last_login_time` datetime DEFAULT NULL COMMENT'Heure de la dernière connexion ',
  `last_update_time` datetime DEFAULT NULL 
  COMMENT'Last time update ', PRIMARY KEY (` id`), 
  UNIQUE KEY `name` (` name`), 
  UNIQUE KEY `email` (` email`), 
  UNIQUE KEY `phone_number` (` phone_number`) 
) ENGINE = InnoDB AUTO_INCREMENT = 36 DEFAULT CHARSET = utf8 COMMENT = 'Spring Boot Demo Orm series example table'; 

- --------------------- - ----- 
- Enregistrements de orm_user 
- ---------------------------- 
INSÉRER DANS LES VALEURS `orm_user` ('2', 'user_2', '6c6bf02c8d5d3d128f34b1700cb1e32c', 'fcbdd0e8a9404a5585ea4e01d0e4d7a0', '[email protected]', '[email protected]', '17300000002' '1', nul, nul, nul);
INSÉRER DANS LES VALEURS `orm_user` ('3', 'MybatisPlus 修改 名字', '123456456', '456', '[email protected]', '17300000003', '1', '2020-07-17 14:52 : 15 ',' 2020-07-17 14:52:15 ',' 2020-07-17 15:05:46 '); 
INSÉRER DANS LES VALEURS `orm_user` ('4', 'testSave4', '123456456', '456', '[email protected]', '17300000004', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSÉRER DANS LES VALEURS `orm_user` ('5', 'testSave5', '123456456', '456', '[email protected]', '17300000005', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ');
INSÉRER DANS LES VALEURS `orm_user` ('7', 'testSave7', '123456456', '456', '[email protected]', '17300000007', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSÉRER DANS LES VALEURS `orm_user` ('9', 'testSave9', '123456456', '456', '[email protected]', '17300000009', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSÉRER DANS LES VALEURS `orm_user` ('10', 'testSave10', '123456456', '456', '[email protected]', '173000000010', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSÉRER DANS LES VALEURS `orm_user` ('12', 'testSave12', '123456456', '456', '[email protected]', '173000000012', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ');
INSÉRER DANS LES VALEURS `orm_user` ('24', 'testSave14', '123456456', '456', '[email protected]', '173000000014', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 '); 
INSÉRER DANS LES VALEURS `orm_user` ('25', 'testSave15', '123456456', '456', '[email protected]', '173000000015', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 '); 
INSÉRER DANS LES VALEURS `orm_user` ('27', 'testSave17', '123456456', '456', '[email protected]', '173000000017', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ');
INSÉRER DANS LES VALEURS `orm_user` ('29', 'testSave19', '123456456', '456', '[email protected]', '173000000019', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 '); 

# config 文件
@ Slf4j 
@Component 
classe publique CommonFieldHandler implémente MetaObjectHandler { 
    @Override 
    public void insertFill (MetaObject metaObject) { 
        log.info ("start insert fill ...."); 
        ce. setFieldValByName ("lastUpdateTime", nouvelle date (), metaObject); 
    }
        this.setFieldValByName ("lastUpdateTime", nouvelle date (), metaObject); 
    } 
    @Override 
    public void updateFill (MetaObject metaObject) { 
        log.info ("start update fill ....");  
@TableName ("orm_user")
} 

@Configuration 
@MapperScan (basePackages = {"com.juejueguai.springbootdemomybatisplus.mapper"}) 
@EnableTransactionManagement 
public class MybatisPlusConfig { 
    @Bean 
    public PaginationInterceptor paginationInterceptor () { 
        return new Pagination ; Interceptor () { return new Pagination ;Interceptor () 
    } 
} 
# entity 
@Data 
@NoArgsConstructor 
@AllArgsConstructor 
@Builder
public class User implements Serializable { 
    private static final long serialVersionUID = -1840831686851699943L; 
    / ** 
     * Clé primaire 
     * / 
    private Long id; 
    / ** 
     * Nom d'utilisateur 
     * / 
    Private String name; 
    / ** 
     * Mot de passe crypté 
     * / 
    Mot de passe de chaîne privé ; 
    / ** 
     * Le sel utilisé pour le chiffrement 
     * / 
    private String salt; 
    / ** 
     * Email 
     * / 
    private String email; 
    / ** 
     * Numéro de téléphone portable 
     * / 
    private String phoneNumber; 
    / ** 
     * Status, -1: logique suppression, 0: désactiver, 1: activer
     * / 
    statut d'entier privé; 
    / ** 
     * 创建 时间
     * / 
    @TableField (fill = INSERT) 
    private Date createTime; 
    / ** 
     * 上次 登录 时间
     * /  
    private Date lastLoginTime; 
    / **
     * 上次 更新 时间
     * / 
    @TableField (fill = INSERT_UPDATE) 
    privé Date lastUpdateTime; 
} 

# mapper 
@Component 
public interface UserMapper étend BaseMapper <User> { 
} 
# service 
public interface UserService étend IService <User> { 
} 

@Service 
public class UserServiceImpl étend ServiceImpl <UserMapper, User> implémente UserService { 
} 

# test

@RunWith (SpringRunner.class) 
@SpringBootTest 
classe publique SpringBootDemoMybatisPlusApplicationTests { 
    @Test 
    public void contextLoads () { 
    } 
}
        User testSave3 = User.builder (). Name ("testSave"). Password ("123456" + salt) .salt (salt) .email ("[email protected]"). PhoneNumber ("17300000003"). Status ( 1) .lastLoginTime (nouvelle date ()). Build ();
 
@ Slf4j
la classe publique UserServiceTest étend SpringBootDemoMybatisPlusApplicationTests { 
    @Autowired 
    private UserService userService; 
    / ** 
     * 测试 Mybatis-Plus 新增
     * / 
    @Test 
    public void testSave () { 
        String salt = "456";  
        List <User> userList = Lists.newArrayList (); 
        pour (int i = 14; i <20; i ++) {
        boolean save = userService.save (testSave3); 
        Assert.assertTrue (enregistrer); 
        log.debug ("【测试 id 回 显 # testSave3.getId ()】 = {}", testSave3.getId ()); 
    } 
    / ** 
     * 测试 Mybatis-Plus 批量 新增
     * / 
    @Test 
    public void testSaveList () { 
            String salt = "456"; 
            User user = User.builder (). Name ("testSave" + i) .password ("123456" + salt) .salt (salt) .email ("testSave" + i + "@ xkcoding.com"). PhoneNumber ( "1730000000" + i) .status (1) .lastLoginTime (nouvelle Date ()). Build (); 
            userList.add (utilisateur); 
        } 
        booléen batch = userService.saveBatch (userList); 
        Affirmer.
        List <Long> ids = userList.stream (). Map (User :: getId) .collect (Collectors.toList ()); 
        log.debug ("【userList # ids】 = {}", ids); 
    } 
    / ** 
     * 测试 Mybatis-Plus 删除
     * / 
    @Test 
    public void testDelete () { 
        booléen remove = userService.removeById (1L);
        User byId = userService.getById (1L); 
        Assert.assertNull (byId); 
    } 
    / ** 
     * 测试 Mybatis-Plus 修改
     * / 
    @Test 
    public void testUpdate () { 
        User user = userService.getById (3L); 
        user.setName ("MybatisPlus 修改 名字"); 
        booléen b = userService.updateById (utilisateur); 
        Assert.assertTrue (b); 
        Mise à jour de l'utilisateur = userService.getById (3L);
        Assert.assertEquals ("MybatisPlus 修改 名字", update.getName ()); 
        log.debug ("【mise à jour】 = {}", mise à jour); 
    } 
    / ** 
     * 测试 Mybatis-Plus 查询 单个
     * /
        Assert.assertTrue (! CollectionUtils.isEmpty (liste)); 
    @Test 
    public void testQueryOne () {
        User user = userService.getOne (Wrappers. <User> lambdaQuery (). Eq (false, User :: getId, 3L) .orderByDesc (User :: getId) .last ("limit 1")); 
        Assert.assertNotNull (utilisateur); 
        log.debug ("【utilisateur】 = {}", utilisateur); 
    } 
    / ** 
     * 测试 Mybatis-Plus 查询 全部
     * / 
    @Test 
    public void testQueryAll () { 
        List <User> list = userService.list (new QueryWrapper <> ()); 
        log.debug ("【liste】 = {}", liste); 
    } 
    / ** 
     * 测试 Mybatis-Plus 分页 排序 查询
     * / 
    @Test 
    public void testQueryByPageAndSort () { 
        initData (); 
        int count = userService.count (nouveau QueryWrapper <
        Page <User> userPage = nouvelle page <> (1, 5); 
        userPage.setDesc ("id"); 
        IPage <User> page = userService.page (userPage, nouveau QueryWrapper <> ()); 
        Assert.assertEquals (5, page.getSize ()); 
        Assert.assertEquals (nombre, page.getTotal ()); 
        log.debug ("【page.getRecords ()】 = {}", page.getRecords ()); 
    } 
    / ** 
     * 测试 Mybatis-Plus 自 定义 查询
     * / 
    @Test 
    public void testQueryByCondition () {
        QueryWrapper <User> wrapper = new QueryWrapper <> (); 
        wrapper.like ("nom", "Save1"). ou (). eq ("phone_number", "17300000001"). orderByDesc ("id"); 

        userService.getOne (wrapper); 
        int count = userService.count (wrapper);
        IPage <User> page = userService.page (userPage, wrapper); 
        Assert.assertEquals (3, page.getSize ()); 
        Assert.assertEquals (nombre, page.getTotal ()); 
        log.debug ("【page.getRecords ()】 = {}", page.getRecords ()); 
    } 
    / ** 
     * 初始化 数据
     * / 
    private void initData () { 
        testSaveList (); 
    }
https://github.com/juejuedog/SpringBootDemo.git

Je suppose que tu aimes

Origine blog.csdn.net/A___B___C/article/details/107412292
conseillé
Classement