Skip to content

添加表

加入员工 员工工作经历这两张表 b3923204092839eec974697ef126484d_MD5

业务基础架构

新的结构: b57b92389bf9252135e965c38b8a389c_MD5 注意:有多少表,就有多少Mapper层. 但是由于员工工作经历是依附于员工的,因此Service只需要有一个.

分页查询

原始方式

bc48bb292dcbafb1072b50983b9db0ad_MD5 这里面,每页展示的记录数是用户选择的(前端)总数据数是从数据库获得的(后端),这样,前端计算总共的页数. fb69d180ca698170c09c38db1769014f_MD5 dbf9f121447394ecaa306e90252b4047_MD5 封装一下: 83db707afc5806638ff52d287b54b53e_MD5 注意,这里需要用long.实际上我们经常这么做.

在Java的JDBC或ORM框架(如MyBatis, Hibernate/JPA)中,数据库的 BIGINT 类型天然对应Java的 Long 类型。

另外这里的顺序是不能变的,因为这是和前端接口约定好的,也就是说这个对象最后会被json化之后返回给前端的,不能动.

处理

bfd1b7afe41bd72537f03bee2e76b0e7_MD5 如果http请求的请求头里并没有某几个参数,怎么处理?看文档,一般会约定一些默认值. cc41cffddef9dd21f80867ff34649eba_MD5 注意这个注解.另外,里面的数字要填字符串. 此时的代码提交:github提交

PageHelper分页插件(主流解决方案)

c86d2e40c483ba67e27ff27f567f86c0_MD5 91af43081518fa079ed44c62ca2e315f_MD5 只需要把页码,每一页的记录数,告诉pageHelper即可. b438d964cd774f60c4984e009f896e61_MD5 就是一条普通的查询语句,不需要考虑分页. 0e8cb13a0d45203a75ef317e2285565f_MD5 看一下Page类: 8730caf0b1bda13ac58c4613507ffbf6_MD5 里面有很多有关的信息. 1bdccc40852c2779eddfe75821f1e678_MD5 也就是说,实际上Mapper层返回的就是Page<Emp>对象了.

如何完成的

8305a58d041c08b1ded2bfdf567f2950_MD5 如何组装的: 第一句: 2e23bad1963d42f194820384e0c96ce6_MD5 出于性能,它把我们的排序语句删掉了. 第二句: 8074d74e751e2ab3c11ddcfc92fd69e3_MD5 加一个limit. 然后把所有结果封装到List<Emp>中. 也就是: 1d2619e18d7defd3580b094cf5ed1ddd_MD5

注意事项:

1.我们自己的sql语句不能加分号: a191ee89ff01776bd17e8d714abaee32_MD5 否则像这样拼接的时候会报错. 2.37e7ccf3d2b953aecd6136a180aa95e2_MD5 ff99773a7bba8746afde884da0ebdade_MD5 第二次调用的时候不会帮我们处理sql语句: 7e89b1a652da2ea80c1808065ae1eb08_MD5

条件分页查询

07feb3ea992562edf2c454dc17657eca_MD5 这样姓名之中都包含阮这个关键字 119ab272a9749199b556eb65a9343d17_MD5 格式: 89f90409cd2541aaccba9b2be6db2ad0_MD5 26421795274229040b077b5a924dd83b_MD5 需要注解来处理时间的格式,这样才能帮我们把字符串转化成时间 另外,如果我们想要把传入的参数模糊匹配,需要这样: 78791f4597293b8a5094321f1dc78be7_MD5 但是,引号当中的#{name}被替换成?后 505b945f724129421de7e14cc5acbfd7_MD5 这样在字符串之中,这个问号会被当作普通的问号,从而不会被视为占位符. 使用sql自带的concat字符串拼接函数: d32ab1df8d62a5fdaedf6bf59bf990b6_MD5 这样的话,#{name}并不在引号之内,因此就没有上面的问题.

优化

传参优化

209e04349d558e762ff81527f8a3638a_MD5 考虑到这里传递的参数过多,并不利于维护.因此: 50a8c01d72c018930b663b1e4f97eb8f_MD5 我们可以看到,这样实际上还有助于默认参数的设置 在服务层: dc2e96e70e0a4f17abd5cdbd12d694b2_MD5 然后在mapper层: ee1a1530bbede17792ae0760e4912423_MD5 这样,sql语句中那些占位符会自动被同名的成员所取代.

初始值问题

按照刚才的写法当中,如果前端没有传递参数,那么会导致sql语句的三个搜索条件写死了 26faee304c3154230ff7ecc7053f4e65_MD5 b51edf8506777d40e117ba45221a1435_MD5 这种拼接肯定是有问题的.比如上面name为null,那么拼出来的sql语句是有语法错误的.因此: 31d2a1882c15fba55d586818050a0976_MD5 c788a3cde0cb549e329157654bcfcddd_MD5

插入员工数据

批量插入 insertBatch

112375722aee19362be24b1afe8ffdd5_MD5 编写动态sql: fabed097160a74bf5d2c06fe1ee95bc4_MD5 这其实也就是帮我们拼接.

主键返回:

ed0423512b5c36234afbcba0d2419376_MD5 这样,我们就能传insertBatch之前补全员工经历对应的员工是谁了 28de1cc8aa704767e475e30ec2e3ff2b_MD5

导入项目文档到apifox:

69471a14925a2086cab2ce4ecb1977cb_MD5 0cb1546c1acbee373e8ee93aa8082aba_MD5 eb836a3617faa5037669ba873095b34e_MD5 475df61d07ab4cc9765e65c3619dc127_MD5可以查看mysql - 事务了