继上一篇内容分页后,今天来讲述我们代码中最经常用到的分页条件查询,不知道怎么分页的小伙伴可以点这里进行学习☟☟☟☟☟☟☟☟☟☟☟☟。
Mybaits分页插件(PageHelper)的使用与实现https://blog.csdn.net/qq_58726929/article/details/124349395?spm=1001.2014.3001.5501首先简单描述下条件查询怎么通过mybatis实现。【会的可以直接下滑忽略】
问题:查询条件包括:进货时间范围、商品名称、采购员。要求列表按采购时间降序排列,即最新的单据最先呈现。
遇到这种问题首先要理清各个表之间的关系。
如上图这样自己理清各种表之间是一对一还是一对多,或者是对一,然后只要记清楚:
①一对一或一对多用实体类声明,如第一个在user类中声明goods的关系。因为是一对多,所以
private Goods goods;
②多对一用List<>,如在第四个purchase类声明user的关系,因为是多对一,所以
private List<User> user;
然后就是就是要弄清在xml文件中的使用。
①一对多或一对一用
<association property=" " javaType=" "> </association>
②多对一用
<collection property=" " ofType=" "> </collection>
上述任务理清关系后知道需要使用一对多的关系,所以用<association>,如下图
<resultMap id="BaseResultMap" type="purchase">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="goods_id" property="goods_id" jdbcType="INTEGER"/>
<result column="amount" property="amount" jdbcType="INTEGER"/>
<result column="price" property="price" jdbcType="DECIMAL"/>
<result column="purchase_time" property="purchase_time" jdbcType="TIMESTAMP"/>
<result column="supplier_id" property="supplier_id" jdbcType="INTEGER"/>
<result column="purchase_user_id" property="purchase_user_id" jdbcType="INTEGER"/>
<result column="serial_id" property="serial_id" jdbcType="VARCHAR"/>
<association property="goods" javaType="Goods">
<result column="goods_id" property="id"/>
<result column="goods_name" property="goodsName"/>
</association>
<association property="sysUser" javaType="SysUser">
<result column="purchase_user_id" property="id"/>
<result column="name" property="name"/>
</association>
<association property="supplier" javaType="Supplier">
<result column="supplier_id" property="id"/>
<result column="supplier_name" property="supplierName"/>
</association>
<association property="purchaseSerialnum" javaType="PurchaseSerialnum">
<result column="serialNumberId" property="serialnumberid"/>
<result column="serialNumber" property="serialcount"/>
</association>
</resultMap>
它的查询SQL语句是这样的。
<select id="selectAll" resultMap="BaseResultMap">
SELECT
p.id,
p.goods_id,
p.purchase_user_id,
p.supplier_id,
p.amount,
p.price,
p.purchase_time,
p.serial_id,
g.goods_name,
s.supplier_name,
u.name
FROM
purchase p
LEFT JOIN sys_user u ON u.id = p.purchase_user_id
LEFT JOIN goods g ON g.id = p.goods_id
LEFT JOIN supplier s ON s.id = p.supplier_id
<where>
<if test="startTime!=null and startTime.trim() neq ''">
and date_format(p.purchase_time,'%Y-%m-%d %H:%i:%s') >= date_format(#{startTime},'%Y-%m-%d %H:%i:%s')
</if>
<if test="endTime!=null and endTime.trim() neq ''">
and date_format(p.purchase_time,'%Y-%m-%d %H:%i:%s') <= date_format(#{endTime},'%Y-%m-%d %H:%i:%s')
</if>
<if test="name!=null and name!=''">
and name = #{name}
</if>
</where>
ORDER BY
purchase_time DESC
</select>
以上内容仅供目前还不会条件查询的小伙伴参考,已经实现了该功能的可以忽略。
-------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------
分页条件查询就是在原本查询和分页的基础上进行整合,达到搜索后显示的结果显示为分页的状态,话不多说,直接上代码,可以看下之间的区别和不同。
Service层
//原有的实现分页
PageInfo<Purchase> findByPage(Integer pageNum, Integer pageSize);
//原有的条件查询
List<Purchase> selectBy(String name, String goods_name,String startTime, String endTime);
//实现分页条件查询
PageInfo<Purchase> findBy(Integer pageNum, Integer pageSize,String name, String goods_name, String startTime, String endTime);
ServiceImpl层
//分页查询所有
@Override
public List<Purchase> selectAll(){
List<Purchase> purchaseList = purchaseMapper.selectAll();
return purchaseList;
}
@Override
public PageInfo<Purchase> findByPage(Integer pageNum, Integer pageSize){
if(pageNum == null){
pageNum = 1;
}
PageHelper.startPage(pageNum,pageSize);
List<Purchase> purchases = purchaseMapper.selectAll();
PageInfo<Purchase> pageInfo = new PageInfo<Purchase>(purchases);
return pageInfo;
}
//条件查询
@Override
public List<Purchase> selectBy(String name, String supplier_name, String startTime, String endTime){
List<Purchase> purchaseList = purchaseMapper.selectBy(name, supplier_name, startTime, endTime);
return purchaseList;
}
//分页条件查询
@Override
public PageInfo<Purchase> findBy(Integer pageNum, Integer pageSize,String name, String goods_name, String startTime, String endTime){
if(pageNum == null){
pageNum = 1;
}
PageHelper.startPage(pageNum,pageSize);
List<Purchase> purchases = purchaseMapper.selectBy(name, goods_name, startTime, endTime);
PageInfo<Purchase> pageInfo = new PageInfo<Purchase>(purchases);
return pageInfo;
}
Controller层
@RequestMapping("/list")
public String list(Integer pageNum, HttpServletRequest request) {
String name = request.getParameter("name");
String goods_name = request.getParameter("goods_name");
String startTime = request.getParameter("startTime");
String endTime = request.getParameter("endTime");
PageInfo<Purchase> pageInfo = purchaseService.findBy(pageNum,8,name,goods_name,startTime,endTime);
request.getSession().setAttribute("pageInfo",pageInfo);
return "/purchase/list";
}
Controller层我用的是HttpServletRequest来获取和存储内容,也可以用Model等方式替代,看个人,用Model的参数直接用注解@的方式写内容,如:
public String list(Integer pageNum, Model model,
@Param("name")String name,
@Param("name")String startTime
.........省略) {
}
运行结果
有任何问题欢迎在评论区提问,会以最快的速度回复大家😀😀😀