雾雨人偶店

My batis plus +Spring boot 初尝试开发笔记

1.结构


Common:放插件的地方,如compoent里面放每次开机启动需要缓存的数据。

Config:放外挂的地方,如本项目用到的mybatis plus(增删改查便利库)和swagger(API显示及调试等)

Controller:接口们的控制器,不同类别的接口放在不同的控制器里。(基本可以按页面分

尽量只做控制转发和参数处理,不做业务逻辑。需要注解,必须在开头全局定义要用到的service。

用例:


Dao:里面的mapper是写sql语句的地方,用了mbp之后可以直接滞空。

(一张sql表对应一个mapper)。需要注解

用例(当mbp无法处理的复杂逻辑出现时,需要手动写在这里):


Entity:存数据库格式的实体,用来查询后接收数据的类。也就是变量名和个数需要和该表内保持一致。同样是一张表对应一个实体。

Form/VO:临时的数据格式,多用来存返回体格式。

Service:连接mapper和controller的部分,用来处理业务逻辑。也就是VO和Form的结果最好在service里得到,然后在controller里面直接用service的方法得到结果。无需注解

用例:


ServiceImpl:业务逻辑具体代码。需要注解

用例:


Application:开始菜单。

Resources:存配置文件,如端口号,数据库地址等。


2.细节

a.不同功能的接口的http method不同,不能只用post和get,需要配合put来update,用delete来删除。(因此,接口命名就不需要动词了)。

改动http method时要改接口头的注解+swagger的注解



b.每个接口的第一件事就是判断参数合法性

c.判断string是否为空不能用null判断,需要用StringUtils.isEmpty()方法

d.利用循环得到一个string时(每次循环往后接相应字符),需要用到stringbuilder类和里面的append方法。

e. requestbody里面的内容在http body里面,requestparam的内容在url地址里

f. swagger注解 写在方法的头部,不要写在方法参数里边,对业务代码入侵性小一些



g. Response Content Type可以判断上传文件的类型。MultipartFile类有getcontenttype方法。

h.获取文件内容用getbytes()方法,并用正则表达式+string的split方法获取具体字段

i.一般对前端来说,插入和更新共用一个接口,用主键id存在与否判断业务类型

j.一般可使用软删除,也就是保留数据,但是设定状态为0,此时用put更好。


3.Mybatis-plus2.x版本分页

way1:该方法用于条件搜索sql语句较为单一的情况。不需要另外写方法

以map的形式作为输入。以业务实体类作为输出。注意2.x版本的倒序排序的输入是collection,初始化如下:

Collection<String> collection=new ArrayList<String>(Arrays.asList("update_time"));

3.x版本直接以string的形式输入更省心



way2:该方法用于需要自定义sql语句的复杂情况。需要在dao和service里面写明相应的方法。

直接输入int数据到方法里,需要在service里声明相应方法,并在impl中写相应的方法。同时,在mapper里写了sql语句,所以不需要后续的wrapper来搜索了。传数据到VO实体,因为返回体里包含了两个表的数据。


4.@select注解

在复杂业务逻辑的时候需要手写sql语句,为了不在map里写xml,选择@select注解也是很方便的,唯一要注意的是:https://blog.51cto.com/1385903/1971640


5.Mysql的LEFT JOIN

这里有个需求是从表a获取基本信息,但表a有个外键是表b的主键,需要获取表b的name列,以及表b的所有subid=0的列的名字,也就是要JOIN两次。不太容易说清楚,直接贴代码

"SELECT wsb_dictionary.*, //获取表a的全部列

l.`name`,//获取表b的name列

l.parent_id, //获取表b的pid列

l2.`name` as parentName " //将第二次搜索的表b的name重命名为pname

            "FROM wsb_dictionary " //主要搜索的表a

            "LEFT JOIN wsb_label l on wsb_dictionary.label_id = l.label_id " +//锁定外键的第一次join,并且重命名为l

            "LEFT JOIN wsb_label l2 on l.parent_id = l2.label_id " //将自己的id当作外键,完成第二次join,并且重命名为l2

            "WHERE wsb_dictionary.`status` = 1 AND wsb_dictionary.dict_key LIKE '%${searchKey}%'" //带变量的模糊条件查询

            "ORDER BY update_time DESC"//倒序

   




评论(1)