添加表¶
加入员工 员工工作经历这两张表

业务基础架构¶
新的结构:
注意:有多少表,就有多少Mapper层.
但是由于员工工作经历是依附于员工的,因此Service只需要有一个.
分页查询¶
原始方式¶
这里面,每页展示的记录数是用户选择的(前端)总数据数是从数据库获得的(后端),这样,前端计算总共的页数.
封装一下:
注意,这里需要用long.实际上我们经常这么做.
在Java的JDBC或ORM框架(如MyBatis, Hibernate/JPA)中,数据库的 BIGINT 类型天然对应Java的 Long 类型。
另外这里的顺序是不能变的,因为这是和前端接口约定好的,也就是说这个对象最后会被json化之后返回给前端的,不能动.
处理¶
如果http请求的请求头里并没有某几个参数,怎么处理?看文档,一般会约定一些默认值.
注意这个注解.另外,里面的数字要填字符串.
此时的代码提交:github提交
PageHelper分页插件(主流解决方案)¶
只需要把页码,每一页的记录数,告诉pageHelper即可.
就是一条普通的查询语句,不需要考虑分页.
看一下Page类:
里面有很多有关的信息.
也就是说,实际上Mapper层返回的就是Page<Emp>对象了.
如何完成的¶
如何组装的:
第一句:
出于性能,它把我们的排序语句删掉了.
第二句:
加一个limit.
然后把所有结果封装到List<Emp>中.
也就是:

注意事项:¶
1.我们自己的sql语句不能加分号:
否则像这样拼接的时候会报错.
2.
第二次调用的时候不会帮我们处理sql语句:

条件分页查询¶
这样姓名之中都包含阮这个关键字
格式:
需要注解来处理时间的格式,这样才能帮我们把字符串转化成时间
另外,如果我们想要把传入的参数模糊匹配,需要这样:
但是,引号当中的#{name}被替换成?后
这样在字符串之中,这个问号会被当作普通的问号,从而不会被视为占位符.
使用sql自带的concat字符串拼接函数:
这样的话,#{name}并不在引号之内,因此就没有上面的问题.
优化¶
传参优化¶
考虑到这里传递的参数过多,并不利于维护.因此:
我们可以看到,这样实际上还有助于默认参数的设置
在服务层:
然后在mapper层:
这样,sql语句中那些占位符会自动被同名的成员所取代.
初始值问题¶
按照刚才的写法当中,如果前端没有传递参数,那么会导致sql语句的三个搜索条件写死了
这种拼接肯定是有问题的.比如上面name为null,那么拼出来的sql语句是有语法错误的.因此:

插入员工数据¶
批量插入 insertBatch¶
编写动态sql:
这其实也就是帮我们拼接.
主键返回:¶
这样,我们就能传insertBatch之前补全员工经历对应的员工是谁了

导入项目文档到apifox:¶
可以查看mysql - 事务了