SpringBoot + mybtis + thymeleaf实现分页模糊查询

2 篇文章 0 订阅
1 篇文章 0 订阅

1.首先引入相关的依赖,SpringBoot是2.7.0版本的

     
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>


        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        

 

2、首先封装一下mybatis查用的sql语句,方便使用 

        2.1AbstractDao 类时封装sql语句的

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author zxh
 */
public abstract class AbstractDao extends SqlSessionDaoSupport {
    protected static final String COUNT = "count";
    protected static final String SELECT_ONE = "selectOne";
    protected static final String INSERT = "insert";
    protected static final String INSERT_LIST = "insertList";
    protected static final String UPDATE = "update";
    protected static final String UPDATE_BY_ENTITY = "updateByEntity";
    protected static final String DELETE = "delete";
    protected static final String SELECT_LIST = "selectList";

    private static String getStatement(Class<?> clazz, String methodName) {
        return clazz.getName() + "." + methodName;
    }

    private static String getStatement(String clazz, String methodName) {
        return clazz + "." + methodName;
    }

    public Integer count(Object parameter) {
        return (Integer) getSqlSession().selectOne(getStatement(parameter.getClass(), COUNT), parameter);
    }

    public Integer count(Class<?> statementClazz, String methodName, Object parameter) {
        return (Integer) getSqlSession().selectOne(getStatement(statementClazz, methodName), parameter);
    }

    public Integer count(String namespace, String methodName, Object parameter) {
        return (Integer) getSqlSession().selectOne(getStatement(namespace, methodName), parameter);
    }

    public <T> T selectOne(Object parameter) {
        return (T) getSqlSession().selectOne(getStatement(parameter.getClass(), SELECT_ONE), parameter);
    }

    public <T> T selectOne(Class<?> statementClazz, String methodName, Object parameter) {
        return (T) getSqlSession().selectOne(getStatement(statementClazz, methodName), parameter);
    }

    public <T> T selectOne(Class<?> statementClazz, String methodName) {
        return (T) getSqlSession().selectOne(getStatement(statementClazz, methodName));
    }

    public <T> T selectById(Class<?> statementClazz, Object parameter) {
        return (T) getSqlSession().selectOne(getStatement(statementClazz, "selectById"), parameter);
    }

    public int insert(Object parameter) {
        return getSqlSession().insert(getStatement(parameter.getClass(), INSERT), parameter);
    }

    public int insert(Class<?> statementClazz, String methodName, Object parameter) {
        return getSqlSession().insert(getStatement(statementClazz, methodName), parameter);
    }

    public int insert(String namespace, String methodName, Object parameter) {
        return getSqlSession().insert(getStatement(namespace, methodName), parameter);
    }

    public int insert(List<? extends Object> list) {
        return getSqlSession().insert(getStatement(list.get(0).getClass(), INSERT_LIST), list);
    }

    public int update(Object parameter) {
        return getSqlSession().update(getStatement(parameter.getClass(), UPDATE), parameter);
    }

    public int update(Class<?> statementClazz, String methodName) {
        return getSqlSession().update(getStatement(statementClazz, methodName));
    }

    public int update(String namespace, String methodName) {
        return getSqlSession().update(getStatement(namespace, methodName));
    }

    public int update(Class<?> statementClazz, String methodName, Object parameter) {
        return getSqlSession().update(getStatement(statementClazz, methodName), parameter);
    }

    public int update(String namespace, String methodName, Object parameter) {
        return getSqlSession().update(getStatement(namespace, methodName), parameter);
    }

    public int update(Object setParameter, Object whereParameter) {
        Map<String, Object> parameter = new HashMap<>();
        parameter.put("s", setParameter);
        parameter.put("w", whereParameter);
        return getSqlSession().update(getStatement(setParameter.getClass(), UPDATE_BY_ENTITY), parameter);
    }

    public int delete(Object parameter) {
        return getSqlSession().delete(getStatement(parameter.getClass(), DELETE), parameter);
    }

    public int delete(Class<?> statementClazz, String methodName, Object parameter) {
        return getSqlSession().delete(getStatement(statementClazz, methodName), parameter);
    }

    public int deleteById(Class<?> statementClazz, Object parameter) {
        return getSqlSession().delete(getStatement(statementClazz, "deleteById"), parameter);
    }

    public <E> List<E> selectList(Object parameter) {
        return getSqlSession().selectList(getStatement(parameter.getClass(), SELECT_LIST), parameter);
    }

    public <E> List<E> selectList(Class<?> statementClazz, String methodName) {
        return getSqlSession().selectList(getStatement(statementClazz, methodName));
    }

    public <E> List<E> selectList(Class<?> statementClazz, String methodName, Object parameter) {
        return getSqlSession().selectList(getStatement(statementClazz, methodName), parameter);
    }

    public <E> List<E> selectList(String namespace, String methodName, Object parameter) {
        return getSqlSession().selectList(getStatement(namespace, methodName), parameter);
    }

    public <E> List<E> selectPageList(Class<?> statementClazz, String methodName, Object parameter, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize, false);
        return getSqlSession().selectList(getStatement(statementClazz, methodName), parameter);
    }

    public <E> List<E> selectPageList(String namespace, String methodName, Object parameter, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize, false);
        return getSqlSession().selectList(getStatement(namespace, methodName), parameter);
    }

    public <T> PageInfo<T> selectPageListAndCount(Class<?> statementClazz, String methodName, Object parameter, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return new PageInfo<>(getSqlSession().selectList(getStatement(statementClazz, methodName), parameter));
    }

    public <T> PageInfo<T> selectPageListAndCount(Class<?> statementClazz, String methodName, Object parameter, int pageNum, int pageSize, String orderBy) {
        PageHelper.startPage(pageNum, pageSize);
        PageHelper.orderBy(orderBy);
        return new PageInfo<>(getSqlSession().selectList(getStatement(statementClazz, methodName), parameter));
    }

    public <E> List<E> selectList(Class<?> statementClazz, String methodName, Object parameter, String orderBy) {
        PageHelper.orderBy(orderBy);
        return selectList(statementClazz, methodName, parameter);
    }

    public <E> List<E> selectPageList(Class<?> statementClazz, String methodName, Object parameter, int pageNum, int pageSize, String orderBy) {
        PageHelper.startPage(pageNum, pageSize, false);
        PageHelper.orderBy(orderBy);
        return selectList(statementClazz, methodName, parameter);
    }
}

        2.2BaseDao是继承AbstractDao类,并且在后面会调用BaseDao类

import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

/**
 * @author zxh
 */
@Repository
public class BaseDao extends AbstractDao {
    @Override
    @Resource
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        super.setSqlSessionFactory(sqlSessionFactory);
    }
}

        2.3下面的内容我都返回的是Result类,所以把Result类也放到这里了

   

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Result<T> {
    private String message;
    private Integer code;
    private T data;

    public static <T> Result<T> success(T data) {
        Result result = new Result<>();
        result.setCode(200);
        result.setMessage("success");
        result.setData(data);
        return result;
    }

    public static <T> Result<T> error(T data) {
        Result result = new Result<>();
        result.setCode(400);
        result.setMessage("error");
        result.setData(data);
        return result;
    }

}

 

 3、先写service层

Result<PageInfo<User>> findByPage(Integer pageNum, Integer pageSize,String username);

4、写service层的实现类

    @Autowired
    private BaseDao baseDao;   

    @Override
    public  Result<PageInfo<User>> findByPage(Integer pageNum, Integer pageSize,String username) {

        PageInfo<User> selectPage = baseDao.selectPageListAndCount(UserMapper.class, "findAll", username, pageNum, pageSize);

        return Result.success(selectPage);
    }

5、去写controller层

@Controller
@RequestMapping("/html")
public class UsersController {

    @Autowired
    private UserService userService;


    @GetMapping("/selectUserByPage")
    public String list(Model model, @RequestParam(defaultValue = "1") int pageNum,             @RequestParam(defaultValue = "2") int pageSize,@RequestParam String username){

        Result<PageInfo<User>> list = userService.findByPage(pageNum, pageSize,username);
        model.addAttribute("username",username);
        model.addAttribute("list",list);

        return "user/list";

    }
}

6、去写userMapper.xml文件,我的是在resources下的mappers文件下

<select id="findAll" resultType="com.buba.po.User" parameterType="string">
    select  * from user where username like concat('%',#{username},'%') 
</select>

         6.1需要配置一下yml

mybatis:
  mapper-locations: classpath:mappers/*.xml

7、去写前端代码,我写在了templates文件下user文件里边

        7.1配置一下yml

spring:
  thymeleaf:
  #配置html默认访问路径
    prefix: classpath:/templates/

         7.2前端代码

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">

    <title>查询用户</title>

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" ></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" ></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js" ></script>

    <style>
        body{
            background: #eff3f6;
        }
        .table{
            text-align: center;
        }
        .u1{
            margin: 0 auto;
            width: 500px;
        }
        .modal{
            color: black;
            text-align: left;
        }
    </style>

</head>
<body>

    <div style="margin: 10px 0px;">
        <form class="form-inline my-2 my-lg-0 findForm" >
            <input class="form-control mr-sm-2 findUsername" type="search" name="username" placeholder="根据用户名" aria-label="Search">
            <button class="btn btn-outline-success my-2 my-sm-0 find" type="submit">查询</button>
        </form>
    </div>


    <table class="table table-dark">
        <thead>
        <tr>
            <th scope="col">用户id</th>
            <th scope="col">用户名字</th>
            <th scope="col">用户密码</th>
            <th scope="col">用户邮箱</th>
            <th scope="col">状态</th>
            <th scope="col">操作</th>
        </tr>
        </thead>
        <tbody th:each="user:${list}">
        <tr th:each="user2:${user.data.list}">
            <th scope="row" th:text="${user2.uId}" ></th>
            <td th:text="${user2.username}"></td>
            <td th:text="${user2.password}"></td>
            <td th:text="${user2.email}"></td>
            <td th:if="${user2.userStatus} == 0" style="color: green">可用</td>
            <td th:if="${user2.userStatus} == 1" style="color: red">不可用</td>
            <td>
                <a th:href="'http://localhost:7004/user-server/html/updateStatus?id='+${user2.uId}" class="btn btn-primary">修改</a>
                <a th:href="'http://localhost:7004/user-server/html/delUser?id='+${user2.uId}"  class="btn btn-danger">删除</a>

            </td>
        </tr>
        </tbody>
    </table>


    <nav aria-label="Page navigation example">
        <ul class="pagination u1" >
            <li class="page-item"  >
                <span class="page-link" th:text="'第'+${list.data.pageNum}+'页'"></span>
            </li>
            <li class="page-item"  >
                <span class="page-link" th:text="'共'+${list.data.pages}+'页'"></span>
            </li>
            <li class="page-item"  >
                <span class="page-link" th:text="'共'+${list.data.total}+'条'"></span>
            </li>
            <li class="page-item" >
                <a class="page-link" th:href="'/user-server/html/selectUserByPage?pageNum='+${list.data.navigateFirstPage}+'&pageSize='+${list.data.pageSize}+'&username='+${username}" th:text="首页" ></a>
            </li>
            <li class="page-item" th:if="${!list.data.isFirstPage}">
                <a class="page-link" th:href="'/user-server/html/selectUserByPage?pageNum='+${list.data.prePage}+'&pageSize='+${list.data.pageSize}+'&username='+${username}" th:text="上一页"></a>
            </li>
            <li class="page-item"th:if="${list.data.isFirstPage}">
                <a class="page-link"  th:text="上一页"></a>
            </li>
<!--            如果为true的话,就是最后一页了,然后反过来不让他执行-->
            <li class="page-item" th:if="${!list.data.isLastPage}" >
                <a class="page-link"  th:href="'/user-server/html/selectUserByPage?pageNum='+${list.data.nextPage}+'&pageSize='+${list.data.pageSize}+'&username='+${username}" th:text="下一页"></a>
            </li>
            <li class="page-item" th:if="${list.data.isLastPage}" >
                <a class="page-link"  th:text="下一页"></a>
            </li>
            <li class="page-item" >
                <a class="page-link" th:href="'/user-server/html/selectUserByPage?pageNum='+${list.data.navigateLastPage}+'&pageSize='+${list.data.pageSize}+'&username='+${username}" th:text="尾页"></a>
            </li>
        </ul>
    </nav>
</body>


</html>

8、最后页面显示:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值