美文网首页
spring-boot-mybatis-plus

spring-boot-mybatis-plus

作者: Shawn_Shawn | 来源:发表于2020-08-31 00:09 被阅读0次

    Spring-boot-Mybatis-Plus

    Mybatis-Plus-Generator

    // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
    
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/spring/springboot/spring-boot-mybatis-plus/src/main/java");
        gc.setAuthor("shawn");
        gc.setOpen(false);
        gc.setServiceName("%sService");
        gc.setFileOverride(true);
        gc.setIdType(IdType.AUTO);
        gc.setDateType(DateType.ONLY_DATE);
        // gc.setSwagger2(true); 实体属性 Swagger2 注解
        mpg.setGlobalConfig(gc);
    
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(
            "jdbc:mysql://localhost:3306/spring-boot-demo?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("Gepoint");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);
    
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.shawn.spring.boot.mybatisplus");
        pc.setController("controller");
        pc.setService("service");
        pc.setEntity("entity");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);
    
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setTablePrefix("t_");
        mpg.setStrategy(strategy);
        mpg.execute();
    

    参考官方文档

    spring-boot-mybatis-plus

    1. pom.xml

      <dependencies>
          <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
          </dependency>
          <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
          </dependency>
          <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
          </dependency>
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
          </dependency>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
          </dependency>
          <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
          </dependency>
        </dependencies>
      
    2. application.yaml

      spring.datasource.url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
      spring.datasource.username: root
      spring.datasource.password: Gepoint
      spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
      
      # mybatis-plus
      mybatis-plus.mapper-locations: classpath:mapper/**/*.xml
      mybatis-plus.type-aliases-package: com.shawn.spring.boot.mybatisplus.entity
      mybatis-plus.global-config.db-config.id-type: AUTO
      mybatis-plus.global-config.db-config.table-underline: true
      mybatis-plus.global-config.db-config.logic-delete-value: 1
      mybatis-plus.global-config.db-config.logic-not-delete-value: 0
      mybatis-plus.configuration.cache-enabled: true
      mybatis-plus.configuration.map-underscore-to-camel-case: true
      
    3. entity

      @Data
      @EqualsAndHashCode(callSuper = false)
      @TableName("t_menu")
      @Builder
      @NoArgsConstructor
      @AllArgsConstructor
      public class Menu implements Serializable {
      
        private static final long serialVersionUID = 1L;
      
        @TableId(value = "menu_id", type = IdType.AUTO)
        private Long menuId;
      
        /** 父菜单ID,一级菜单为0 */
        private Long parentId;
      
        /** 菜单名称 */
        private String name;
      
        /** 菜单URL */
        private String url;
      
        /** 类型 0:目录 1:菜单 2:按钮 */
        private Integer type;
      
        /** 排序 */
        private Integer orderNum;
      
        /** 创建时间 */
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
      
        /** 修改时间 */
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
      
        /** 状态 0:禁用 1:正常 */
        @TableLogic private Integer isDeleted;
      }
      
    4. mapper

      public interface RoleMapper extends BaseMapper<Role> {
      
        @Insert({
          "insert into t_role (role_name, remark, ",
          "create_time, update_time, ",
          "is_deleted)",
          "values (#{roleName,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, ",
          "#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, ",
          "#{isDeleted,jdbcType=TINYINT})"
        })
        @SelectKey(
            statement = "SELECT LAST_INSERT_ID()",
            keyProperty = "roleId",
            before = false,
            resultType = Long.class)
        int insertReturnKey(Role record);
      }
      
    5. service

      @Service
      public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
      
        @Override
        public int saveReturnKey(Role role) {
          return getBaseMapper().insertReturnKey(role);
        }
      }
      
    6. config

      @Component
      @Slf4j
      public class MybatisPlusCommonFieldHandler implements MetaObjectHandler {
      
        @Override
        public void insertFill(MetaObject metaObject) {
          log.info("start insert fill ....");
          Date time = Calendar.getInstance().getTime();
          this.setFieldValByName("createTime", time, metaObject);
          this.setFieldValByName("updateTime", time, metaObject);
        }
      
        @Override
        public void updateFill(MetaObject metaObject) {
          log.info("start update fill ....");
          this.setFieldValByName("updateTime", Calendar.getInstance().getTime(), metaObject);
        }
      }
      
      
      @Configuration
      @EnableTransactionManagement
      @MapperScan("com.shawn.spring.boot.mybatisplus.mapper")
      public class MybatisPlusConfig {
      
        // 分页插件
        @Bean
        public PaginationInnerInterceptor paginationInterceptor() {
          PaginationInnerInterceptor interceptor = new PaginationInnerInterceptor();
          interceptor.setDbType(DbType.MYSQL);
          interceptor.setMaxLimit(500l);
          return interceptor;
        }
      
        @Bean
        public LogicDeleteByIdWithFill sqlInjector() {
          return new LogicDeleteByIdWithFill();
        }
      }
      
    7. runner

      @Component
      @Slf4j
      public class MybatisPlusRunner implements ApplicationRunner {
      
        @Autowired private UserService userService;
        @Autowired private RoleService roleService;
        @Autowired private MenuService menuService;
        @Autowired private RoleMenuService roleMenuService;
        @Autowired private UserRoleService userRoleService;
      
        @Override
        public void run(ApplicationArguments args) throws Exception {
          newMenu();
          queryMenuById();
          newRole();
          queryRoleById();
          queryByLikeName();
          queryMenuByRoleId();
          newUser();
          login();
          queryRolesByUserId();
          queryMenusByPid();
          testPageQuery();
        }
      
        public void newMenu() {
          Menu menu =
              Menu.builder()
                  .name("系统管理")
                  .orderNum(1)
                  .parentId(Long.valueOf(0))
                  .url("/")
                  .type(MenuTypeEnum.CATALOG_TYPE.getCode())
                  .isDeleted(0)
                  .build();
          menuService.save(menu);
          log.info("success create new menu");
        }
      
        public void queryMenuById() {
          Menu menu = menuService.getById(1);
          log.info("queryMenuById: {}", menu.toString());
        }
      
        public void newRole() {
          Role role = Role.builder().remark("系统管理员").roleName("系统管理员").isDeleted(0).build();
          int key = roleService.saveReturnKey(role);
          roleMenuService.save(RoleMenu.builder().menuId(1l).roleId(Long.valueOf(key)).build());
          log.info("success create new role");
        }
      
        public void queryRoleById() {
          log.info("queryRoleById: {}", roleService.getById(2));
        }
      
        public void queryByLikeName() {
          QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
          queryWrapper.like("role_name", "系统");
          roleService.list(queryWrapper);
          List<Role> roleList = roleService.list(queryWrapper);
          if (!CollectionUtils.isEmpty(roleList)) {
            roleList.forEach(role -> log.info("queryByLikeName: {}", role.toString()));
          }
        }
      
        public void queryMenuByRoleId() {
          QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>();
          queryWrapper.eq("role_id", 2);
          List<RoleMenu> menuList = roleMenuService.list(queryWrapper);
          if (!CollectionUtils.isEmpty(menuList)) {
            menuList.forEach(menu -> log.info("queryMenuByRoleId: {}", menu.toString()));
          }
        }
      
        public void newUser() {
          User shawn =
              User.builder()
                  .email("1111@qq.com")
                  .mobile("12345678901")
                  .password("123456")
                  .salt("12345")
                  .username("shawn")
                  .isDeleted(0)
                  .build();
          int i = userService.saveReturnKey(shawn);
          userRoleService.save(UserRole.builder().roleId(1l).userId(Long.valueOf(i)).build());
          log.info("success create new user");
        }
      
        public void login() {
          QueryWrapper<User> queryWrapper = new QueryWrapper<>();
          queryWrapper.eq("username", "admin").and(wrapper -> wrapper.eq("password", "123456"));
          List<User> list = userService.list(queryWrapper);
          if (CollectionUtils.isEmpty(list) || list.size() > 1) {
            log.error("login failed! username: {}, password: {}", "shawn", "123456");
          } else {
            User shawn = list.get(0);
            log.info("login success! {}", shawn.toString());
          }
        }
      
        public void queryRolesByUserId() {
          QueryWrapper<UserRole> wrapper = new QueryWrapper<>();
          wrapper.eq("user_id", 1l);
          List<UserRole> roleList = userRoleService.list(wrapper);
          if (!CollectionUtils.isEmpty(roleList)) {
            roleList.forEach(role -> log.info("queryRolesByUserId: {}", role.toString()));
          }
        }
      
        public void queryMenusByPid() {
          QueryWrapper<Menu> wrapper = new QueryWrapper<>();
          wrapper.eq("parent_id", 0);
          List<Menu> menuList = menuService.list(wrapper);
          if (!CollectionUtils.isEmpty(menuList)) {
            menuList.forEach(menu -> log.info("queryMenusByPid: {}", menu.toString()));
          }
        }
      
        public void testPageQuery() {
          Page<User> page = new Page<>(1, 3);
          userService.selectByPage(page);
          log.info("data: {}", page.getRecords());
          log.info("total: {}", page.getTotal());
        }
      }
      
    8. main class

    @SpringBootApplication
    public class MybatisPlusApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
      }
    }
    

    上述代码不全,请参考源码

    相关文章

      网友评论

          本文标题:spring-boot-mybatis-plus

          本文链接:https://www.haomeiwen.com/subject/nzmysktx.html