敏捷開發框架之springboot+mybits-plus+mysql

現今的框架真的是越來越簡潔了,項目搭建起來之後只用寫個後臺https://start.spring.io/,甚至連SQL都用不到了,這次的springboot+mybits-plus+mysql框架是項目開發是剛剛用到的,搬磚賊好用,推薦給各位碼員。

#代碼生成器        

 https://mp.baomidou.com/guide/generator.html

AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,極大的提升了開發效率。

// 演示例子,執行 main 方法控制檯輸入模塊表名回車自動生成對應項目目錄中

public class CodeGenerator {  
   
    /**
     * <p>
     * 讀取控制檯內容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("請輸入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請輸入正確的" + tip + "!");
    }

    public static void main(String[] args) {
        // 代碼生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("jobob");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);
        // 數據源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("密碼");
        mpg.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模塊名"));
        pc.setParent("com.baomidou.ant");
        mpg.setPackageInfo(pc);
        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";
        // 自定義輸出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定義配置會被優先輸出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸出文件名 , 如果你 Entity 設置了前後綴、此處注意 xml 的名稱會跟着發生變化!!
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        // 配置自定義輸出模板
        //指定自定義模板路徑,注意不要帶上.ftl/.vm, 會根據使用的模板引擎自動識別
        // templateConfig.setEntity("templates/entity2.java");
        // templateConfig.setService();
        // templateConfig.setController();
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
        strategy.setInclude(scanner("表名"));
        strategy.setSuperEntityColumns("id");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

1,查看實體類,設置主鍵自動生成

@Data
@TableName("user")  
public class User(){
    
    /**
     * ID主鍵
     */
    @TableId(value = "id", type = IdType.UUID)
    private String  id;
    
    /**
     * 名稱
     */
    private String name;
    
    public static final String  USER_ID = "user_id";

    public static final String USER_NAME = "user_name";
}


   

2,Controller層註解

@RestController
@RequestMapping("/user")
@Slf4j       
public class UserController(){
    
    @Autowired
    private UserService userService;
    
    /**
     * 保存
     * @param User user;
     * /
    @PostMapping("/save")
    public Boolean save(@RequestBody User user){
        userService.save();
        return true;
    }
    
    /**
     * 分頁查詢
     * /
    @PostMapping("/list")
    public Ipage<User> list(@RequestBody UserVo userVo){
        IPage<User> userList = userService.list(userVo);
        return userList;
    }
    
    @PostMapping("/info")
    public Ipage<User> save( @RequestBody Map<String,String> map){
        User user = userService.getinfo(map.get("id"));
        return user;
    }

    @PostMapping("/update")
    public Boolean update( @RequestBody User user){
         return  userService.update(user);
    }

    @PostMapping("/delete")
    public Boolean delete( @RequestBody Map<String,String> map){
         return  userService.delete(map.get("id"));
    }

    @PostMapping("/exist")
    public Boolean exist( @RequestBody Map<String,String> map){
         return  userService.exist(map.get("name"));
    }
}

3,serivce層

public interface userService extends IService<User> {

     /**
      * 新增/編輯
      * @param User
      * @return
      */
      Boolean save(User user); 

}

@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements userService {
  
     @Autowired
     private UserMapper userMapper;
     /**
      * 新增/編輯
      */
     @Override 
     Boolean save(User user){
        return true;
     }
}

4,Dao/Mapper層

@Repository
public interface UserMapper extends BaseMapper<User> {
         
      /**
       * 搜索信息列表
       */
      List<User> all(@Param("id") List<String> id);

}

5,重點講解QueryWrapper

@Autowired
private UserService userService;

@Autowired
private UserMapper userMapper;

QueryWrapper<User> queryWrapper = new  QueryWrapper<>();
queryWrapper.eq(User.ID, Id);
List<User> List =  userService.list(queryWrapper);
List<User> List =  userMapper.list(queryWrapper);

 

service/mapper    CRUD接口以及wapper條件構造器方法

 

 

使用 Wrapper 自定義SQL

方案一 註解方式 Mapper.java

@Select("select * from mysql_data ${ew.customSqlSegment}")

List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

方案二 XML形式 Mapper.xml

<select id="getAll" resultType="MysqlData">

        SELECT * FROM mysql_data ${ew.customSqlSegment}

</select>

6.分頁的利用

@Data
public class UserVo extends BasePageRequest{

    @ApiModelProperty(name = "user", value = "成員",dataType =  "User",notes = "成員")
    private User user;

}

//組裝分頁查詢對象queryWrapper
public class UserserviceImpl extends ServiceImpl<UserMapper, User> 
    implements userService {
   
     @Autowired

     private UserMapper userMapper;

    public IPage<User> getUserPage(UserVo userVo){
        Page<User> page = new  Page<User>(userVo.getPageNo(),userVo.getLimit());
        QueryWrapper<User> queryWrapper = new  QueryWrapper<>();
        queryWrapper.eq(User.IS_DELETED,  Constant.IS_DELETE_FALSE);
        IPage<User> userList =  userMapper.selectPage(page, queryWrapper);
        return userList;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章