spring-boot-mybatis-plus

2020-08-31  本文已影响0人  Shawn_Shawn

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);
  }
}

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

上一篇下一篇

猜你喜欢

热点阅读