目录
一、准备工作
二、分页查询
三、条件查询
1.程序优化
2.动态SQL优化
四、编程随想
建议结合黑马程序员的AI+javaWeb学习 93集:视频链接
飞书讲义文档:接口文档
一、准备工作
明确我们要实现的功能是什么?前端给后端传什么参数?后端给前端传什么参数?
二、分页查询
思路:1.明确前端传什么数据,后端传什么数据
2.明确三层架构各自要实现的功能
三层架构代码
使用PageHelper插件进行分页查询优化
Service层三步骤:参数、查询、封装
实现机制和注意事项
自动帮我们生成了count()查询和拼接limit
三、条件查询
优化:当 SQL语句比较复杂时,我们可以配置同包同名的xml映射文件,要配置两个属性nameplace和id,获取nameplace可以点击右键该类类名,选择copy Special ->copy reference(复制特殊引用包名类名);id可以同过点击对应SQL语句的方法,按alt+回车,选gnerate statment就可以自动补全;随后添加对应的SQL语句便可
1.程序优化
当前端的请求参数比较多,或者后期需要添加请求参数,直接在程序中添加形参不便于后期的维护和管理,可以新建一个请求参数类,用一个对象去接受请求参数,会更方便
2.动态SQL优化
(1)当我们的请求参数发生变化,查询条件也会发生变化,SQL语句就不能写死,要能够动态查询;要想构建动态SQL,我们就用<if>条件判断来判断是否查询;
(2)还有一个问题,再用<if>条件判断后,SQL语句会进行拼接,会有多余的and和or造成SQL语法错误,我们就用<where>标签来根据查询条件,自动正常where关键字,和去除多余的and和or
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.mapper.EmpMapper"> <select id="list" resultType="com.itheima.pojo.Emp"> select e.*, d.name as deptName from emp e left join dept d on e.dept_id = d.id <where> <if test="name != null and name != ''"> e.name like concat('%',#{name},'%') </if> <if test="gender != null"> and e.gender = #{gender} </if> <if test="begin != null and end != null"> and e.entry_date between #{begin} and #{end} </if> </where> order by e.update_time desc </select> </mapper>四、编程随想
1.什么时候需要使用泛型?有什么用?指定将数据往哪个对象封装;泛,广泛的意思,一个集合里数据有多种数据类型,使用泛型不会报错(封装到一个对象里,一个对象有多种数据类型)
2.泛型怎么用?何时用?定义这个类的时候不知道数据类型具体是哪个类型,或者有多个数据类型,比如我们返回给result实体类中的rows数据列表
3.怎么封装返回的数据结果?为什么要新new一个PageResult对象?我们将返回的结果数据封装到一个对象里返回,SpringBoot里的一个依赖spring-boot-starter-web会通过反射获取该实体类的结构,从而获得它的getting 方法,然后得到属性拼接成json字符串返回给前端
4.怎么分析页面原型和需求文档?步骤是什么?要注意什么?分析需要实现什么功能,要用到什么?需要准备什么?数据库表,实体类,三层架构
5.怎么样优化程序才能便于后期的维护和管理?怎么判断哪些代码需要优化?复杂荣誉的代码,需要灵活变动的代码、参数或者方法这些就是需要优化的,比如说灵活变动的参数,或者后期需要更改的就可以配置在application.xml文件中
小结
1.所有增删查改返回的数据类型统一是Result类型
2.写之前想好用什么方法,用什么接受返回的数据
3.当SQL语句比较复杂的时候,可以配置一个同包同名的映射文件,要配置两个属性nameplace和id,获取nameplace可以点击右键该类类名,选择copy Special ->copy reference(复制特殊引用包名类名)
4.@DateTimeFormat 注解是将前端传递的日期格式转换成指定的日期格式,格式是yyyy-MM-dd,不是yyyy-mm-dd,MM是指定月,mm是分钟