基于springboot和ajax的简单项目 02 代码部分实现,xml文件sql语句优化 (中)
上次说到了log/log_list.html的doGetObjects(),其中有doFindPageObjects()方法。
找到全部的日志对象,并且输出到div上。这里是后台的代码。
01.pojo对象,这里需要序列化保存。序列化的作用是保存对象到内存缓存中,或者是文件中,安全保存。
这里需要implement Serializable接口,并且在类中去添加uid。
选中选项,使用就可以自动有uid
02.写dao层代码
注意:
当DAO中方法参数多余一个时尽量使用@Param注解进行修饰并指定名字,然后再Mapper文件中便可以通过类似#{username}方式进行获取,否则只能通过#{arg0},#{arg1}或者#{param1},#{param2}等方式进行获取。
当DAO方法中的参数应用在动态SQL中时无论多少个参数,尽量使用@Param注解进行修饰并定义。
@Param的作用范围只能是被修饰的sql语句。
其中的代码是:
/*** @param username 查询条件(例如查询哪个用户的日志信息)* @return 总记录数(基于这个结果可以计算总页数)*/Long getrownum( @Param("username") String username);/*** @param username 查询条件(例如查询哪个用户的日志信息)* @param startIndex 当前页的起始位置* @param pageSize 当前页的页面大小* @return 当前页的日志记录信息* 数据库中每条日志信息封装到一个SysLog对象中*/List<sysLog> fingall( @Param("username")String username, @Param("startIndex")Long startIndex, @Param("pageSize")int pageSize);
03.mapper.xml映射文件。这里存放的是sql语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.dao.sysLogDao"><select id="getrownum" resultType="Long">select count(*) from sys_logs<where><if test="username!=null and username=!''">username like concat("%",#{username},"%")</if></where></select><select id="fingall" resultType="com.cy.pojo.sysLog">select count(*) from sys_logs<where><if test="username!=null and username=!''">username like concat("%",#{username},"%")</if></where>order by createdTime desclimit #{startIndex},#{pageSize}</select>
</mapper>
优化xml文件,sql语句中有重复的部分:
<where><if test="username!=null and username=!''">username like concat("%",#{username},"%")</if></where>
可以使用标签sql来进行修饰:
<sql id="queryWhereId">from sys_logs<where><if test="username!=null and username!=''">username like concat("%",#{username},"%")</if></where></sql>
sql标签需要用id来识别:
进一步优化sql语句:
用include标签进行插入操作
<select id="getRowCount"resultType="int">select count(*)<include refid="queryWhereId"/></select><select id="findPageObjects"resultType="com.cy.pj.sys.entity.SysLog">select *<include refid="queryWhereId"/>
order by createdTime desclimit #{startIndex},#{pageSize}
</select>