SSM实现分页模糊查询

it2022-05-05  105

SSM实现分页模糊查询

一、准备工作

1、pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!--逆向生成带分页的--> <dependency> <groupId>com.itfsw</groupId> <artifactId>mybatis-generator-plugin</artifactId> <version>1.0.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.3.2</version> <scope>compile</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.7.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!--MyBatis整合spring--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!--pojo转换成 json--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.3</version> </dependency> </dependencies>

2、web.xml

<!--配置全局通过监听器加载spring配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--解决post方法中request请求的乱码--> <filter> <filter-name>ce</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--是否支持异步--> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>ce</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置mvc-servlet--> <servlet> <servlet-name>ds</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:mvc/SpringMvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ds</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

3、srping.xml

<!--1、开启Spring注解驱动--> <context:component-scan base-package="com.k9503.service"/> <!--2、加载db.properties配置文件--> <context:property-placeholder location="classpath:mybatis/properties/db.properties"/> <!--3、配置c3p0连接池--> <bean id="dateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--4、配置事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dateSource"/> </bean> <!--5、开启事务管理注解驱动--> <tx:annotation-driven transaction-manager="transactionManager"/> <!--6、管理MyBatis核心配置文件--> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dateSource"/> <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/> <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/> </bean> <!--7、管理MyBatis中的映射文件和接口的关系--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.k9503.mapper"/> <property name="sqlSessionFactoryBeanName" value="factory"/> </bean>

4、springMvc.xml

<!--开启controller层的注解--> <context:component-scan base-package="com.k9503.controller"/> <!--开启mvc特有的注解--> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="utf-8"/> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven> <!--配置默认的servlet--> <mvc:default-servlet-handler/> <!--处理jsp页面的后缀--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>

5、MyBatis逆向生成/gener.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!-- 生成配置文件 --> <generatorConfiguration> <context id="DB2Tables" targetRuntime="MyBatis3"> <!--分页插件--> <plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"/> <commentGenerator> <!-- 是否去除注释,true表示是,false否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 1.连接数据库信息 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/k9503?characterEncoding=UTF-8" userId="root" password="171009"> </jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 2.pojo类的生成配置 targetPackage表示目标文件夹 targetProject表示当前目标文件夹所放置的目标地址 --> <javaModelGenerator targetPackage="com.k9503.pojo" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 3.sql映射文件生成配置 --> <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources\mybatis"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 4.mapper接口配置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.k9503.mapper" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 5.数据库表和实体类映射 --> <table tableName="emp" domainObjectName="Emp"> </table> <table tableName="dept" domainObjectName="Dept"> </table> </context> </generatorConfiguration>

6、mybatis.xml

<configuration> <settings> <!-- 可以在控制台输出日志信息:sql语句和参数 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!-- 2.表示类型别名 --> <typeAliases> <!-- 2.1每一个类型的别名 type属性表示别名对应的类型地址 alias表示起的别名--> <typeAlias type="java.util.List" alias="list"/> <!-- package表示包,利用包的形式进行扫描包之下的所有的类,别名就是当前类名 --> <package name="com.k9503.pojo"/> </typeAliases> </configuration>

二、展示页面

1.1、展示
<!--条件查询--> <form action="/emp/show" method="post" id="fm" style="text-align: center"> <h2 style="text-align: center">员工管理</h2> 姓名:<input type="text" name="name" value="${page.name}"/> 生日:<input type="date" name="startBirth" value="<fmt:formatDate value='${page.startBirth}' pattern='yyyy-MM-dd'/>" >- <input type="date" name="endBirth" value="<fmt:formatDate value='${page.endBirth}' pattern='yyyy-MM-dd'/>" > 部门:<select name="deptId"> <option value="0">--请选择--</option> <c:forEach var="dept" items="${depts}"> <option value="${dept.id}"<c:if test="${dept.id==page.deptId}"> selected=true</c:if>>${dept.dname}</option> </c:forEach> </select> <input type="hidden" id="curr" name="currPage" value="1" > <input type="submit" value="搜索"> </form> <!--展示--> <table align="center" cellpadding="15" cellspacing="0" border="1" bgcolor="#add8e6"> <tr> <td>编号</td> <td>姓名</td> <td>年龄</td> <td>性别</td> <td>工资</td> <td>津贴</td> <td>生日</td> <td>入职时间</td> <td>上级</td> <td>部门</td> <td>操作| <input type="button" onclick="location.href='/emp/add'" value="新增"></td> </tr> <c:if test="${not empty list}"> <c:forEach var="emp" items="${list}" varStatus="vs"> <tr <c:if test="${vs.count%2==1}"> bgcolor="#7fffd4" </c:if>> <td>${emp.id}</td> <td>${emp.name}</td> <td>${emp.age}</td> <td>${emp.sex}</td> <td>${emp.salary}</td> <td>${emp.bonus}</td> <td><fmt:formatDate value="${emp.birth}" pattern="yyyy-MM-dd"/></td> <td><fmt:formatDate value="${emp.hiredate}" pattern="yyyy-MM-dd"/></td> <td>${emp.leader}</td> <td>${emp.dept.dname}</td> <td> <a onclick="return confirm('确认删除吗?')" href="/emp/deleteById/${emp.id}" id="del">删除</a>| <a href="/emp/selectById/${emp.id}">修改</a></td> </tr> </c:forEach> </c:if> </table> <!--分页--> <table align="center" cellpadding="10" cellspacing="10"> <tr> <td><a href="javascript:toPage(1)">首页</a></td> <td><a href="javascript:toPage(${page.currPage-1})">上一页</a></td> <c:forEach var="i" begin="1" end="${page.totalPage}"> <td><a href="javascript:toPage(${i})">${i}</a></td> </c:forEach> <td><a href="javascript:toPage(${page.currPage+1})">下一页</a></td> <td><a href="javascript:goPage()">跳转</a>到第<input size="2" type="text" value="${page.currPage}" id="go">页</td> <td><a href="javascript:toPage(${page.totalPage})">尾页</a></td> </tr> </table>

1.2、service层

//查询所有 @Override public List<Emp> selectAll(PageBean page) { EmpExample example = new EmpExample(); EmpExample.Criteria criteria = example.createCriteria(); if (page.getName()!=null&&!page.getName().trim().equals("")){ criteria.andNameLike("%"+page.getName()+"%"); } if (page.getStartBirth()!=null){ criteria.andBirthGreaterThanOrEqualTo(page.getStartBirth()); } if (page.getEndBirth()!=null){ criteria.andBirthLessThanOrEqualTo(page.getEndBirth()); } if (page.getDeptId()!=null&&page.getDeptId()!=0){ criteria.andDeptidEqualTo(page.getDeptId()); } //查询总记录数 int count = (int) empMapper.countByExample(example); int size=page.getSize(); int totalPage=(count%size==0)?(count/size):(count/size+1); page.setCount(count); page.setTotalPage(totalPage); //分页 int startRow=(page.getCurrPage()-1)*size; example.limit(startRow,size); List<Emp> list = empMapper.selectByExample(example); for (Emp emp:list){ Dept dept = deptMapper.selectByPrimaryKey(emp.getDeptid()); emp.setDept(dept); } return list; }

1.3、controller层

@Autowired private IEmpService service; @RequestMapping("/show") public ModelAndView show(PageBean page, ModelAndView mav){ List<Emp> list=service.selectAll(page); List<Dept> depts=service.selectDepts(); mav.addObject("list",list); mav.addObject("depts",depts); mav.addObject("page",page); mav.setViewName("show"); return mav; }

三、新增

1.1、新增页面
<form action="/emp/addEmp" method="post" style="text-align: center" id="add"> <h2 style="text-align: center">添加信息</h2> <input type="hidden" name="id" value=""> 姓名:<input type="text" name="name" value=""/><br><br> 年龄:<input type="text" name="age" value=""/><br><br> 性别:     <input type="radio" name="sex" value=""/>男 <input type="radio" name="sex" value=""/>女<br><br> 工资:<input type="text" name="salary" value=""/><br><br> 津贴:<input type="text" name="bonus" value=""/><br><br> 生日:   <input type="date" name="birth" value="<fmt:formatDate value='${emp.birth}' pattern='yyyy-MM-dd'/>"/><br><br> 入职时间:  <input type="date" name="hiredate" value="<fmt:formatDate value='${emp.hiredate}' pattern='yyyy-MM-dd'/>"/><br><br> 上级:<input type="text" name="leader" value=""/><br><br> 部门:   <select name="deptid"> <option value="0">--请选择--</option> <c:forEach var="dept" items="${depts}"> <option value="${dept.id}" <c:if test="${dept.id==emp.deptid}" >selected='true'</c:if> > ${dept.dname} </option> </c:forEach> </select><br><br> <input type="submit" value="提交">       <input type="reset" value="取消"> </form>

1.2、service层

@Override public int addEmp(Emp emp) { return empMapper.insertSelective(emp); }

1.3、controller层

//实现新增 @RequestMapping("/addEmp") public String addEmp(Emp emp){ int i=service.addEmp(emp); return "redirect:/emp/show"; } //新增成功跳转 @RequestMapping("/add") public String add(Model model){ List<Dept> depts = service.selectDepts(); model.addAttribute("depts",depts); return "add"; }

四、修改、删除

1.1、修改页面
<form action="/emp/update" method="post" style="text-align: center"> <h2 style="text-align: center">修改信息</h2> <input type="hidden" name="id" value="${emp.id}"> 姓名:<input type="text" name="name" value="${emp.name}"/><br><br> 年龄:<input type="text" name="age" value="${emp.age}"/><br><br> 性别:     <input type="radio" name="sex" value="${emp.sex}"<c:if test="${emp.sex=='男'}">checked='true'</c:if>/>男 <input type="radio" name="sex" value="${emp.sex}"<c:if test="${emp.sex=='女'}">checked='true'</c:if>/>女<br><br> 工资:<input type="text" name="salary" value="${emp.salary}"/><br><br> 津贴:<input type="text" name="bonus" value="${emp.bonus}"/><br><br> 生日:   <input type="date" name="birth" value="<fmt:formatDate value='${emp.birth}' pattern='yyyy-MM-dd'/>" /><br><br> 入职时间:  <input type="date" name="hiredate" value="<fmt:formatDate value='${emp.hiredate}' pattern='yyyy-MM-dd'/>"/><br><br> 上级:<input type="text" name="leader" value="${emp.leader}"/><br><br> 部门:   <select name="deptid"> <option value="0">--请选择--</option> <c:forEach var="dept" items="${depts}"> <option value="${dept.id}" <c:if test="${dept.id==emp.deptid}" >selected='true'</c:if> > ${dept.dname} </option> </c:forEach> </select><br><br> <input type="submit" value="提交">       <input type="reset" value="取消"> </form>

1.2、service层

@Override//删除 public int deleteById(int id) { return empMapper.deleteByPrimaryKey(id); } @Override//查询单条 public Emp selectById(int id) { return empMapper.selectByPrimaryKey(id); } @Override//修改 public int updateById(Emp emp) { return empMapper.updateByPrimaryKeySelective(emp); }

1.3、controller层

//删除 @RequestMapping("/deleteById/{id}") public String delete(@PathVariable String id) { int i = service.deleteById(Integer.parseInt(id)); return "redirect:/emp/show"; } //执行修改 @RequestMapping("/update") public String updateById(Emp emp){ int i=service.updateById(emp); return "redirect:/emp/show"; } //查询单条 @RequestMapping("/selectById/{id}") public String selectById(@PathVariable String id, Model model){ Emp emp = service.selectById(Integer.parseInt(id)); model.addAttribute("emp",emp); List<Dept> depts = service.selectDepts(); model.addAttribute("depts",depts); return "update"; }

最新回复(0)