Spring Boot实践应用开发(7)

来源:互联网 发布:ubuntu 16.04必装软件 编辑:程序博客网 时间:2024/06/06 12:28

【使用mybatis,thymeleaf进行分页】

 

准备,下载fourth.zip并导入到eclipse,下载地址http://pan.baidu.com/s/1o6spOJS

 

1,新规UsersExtMapper.xml

 

<?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="org.com.sample.mapper.ext.UsersExtMapper"><resultMap id="BaseResultMap" type="org.com.sample.dataset.Users"><id column="USERNAME" property="username" jdbcType="VARCHAR" /><result column="PASSWORD" property="password" jdbcType="VARCHAR" /><result column="ROLE" property="role" jdbcType="VARCHAR" /></resultMap><sql id="Base_Column_Ext_List">USERNAME, PASSWORD, ROLE</sql><select id="countForPaging" parameterType="map" resultType="java.lang.Integer">select count(*) from USERS</select><select id="selectMcUserExtForPaging" resultMap="BaseResultMap"parameterType="map">select<include refid="Base_Column_Ext_List" />from (select<if test="distinct">distinct</if><include refid="Base_Column_Ext_List" />, ROWNUM linefrom USERS<where><if test="end_line != null">and ROWNUM <= #{end_line,jdbcType=DECIMAL}</if></where><if test="orderByClause != null">order by ${orderByClause}</if>)<where><if test="start_line != null">and line >= #{start_line,jdbcType=DECIMAL}</if></where></select></mapper>

 

2,新规UsersExtMapper.java

package org.com.sample.mapper.ext;import java.util.List;import java.util.Map;import org.com.sample.dataset.Users;public interface UsersExtMapper {int countForPaging(Map<String, Object> map);List<Users> selectMcUserExtForPaging(Map<String, Object> map);}

 

3,修改ApplicationConfig.java

 

 

package org.com.common.config;import java.io.File;import javax.servlet.Filter;import javax.sql.DataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.com.sample.mapper.UsersMapper;import org.com.sample.mapper.ext.UsersExtMapper;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import org.springframework.web.filter.CharacterEncodingFilter;import net.sf.log4jdbc.Log4jdbcProxyDataSource;@Configurationpublic class ApplicationConfig {@AutowiredDataSourceProperties dataSourceProperties;DataSource dataSource;@BeanDataSource realDataSource() {DataSourceBuilder factory = DataSourceBuilder.create(this.dataSourceProperties.getClassLoader()).url(this.dataSourceProperties.getUrl()).username(this.dataSourceProperties.getUsername()).password(this.dataSourceProperties.getPassword());this.dataSource = factory.build();return new Log4jdbcProxyDataSource(this.dataSource);}@Beanpublic SqlSessionFactory getSqlSessionFactory() {Resource[] resources = new Resource[] { getMapperXMLPathResource(UsersMapper.class),getMapperXMLPathResource(UsersExtMapper.class)};SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(realDataSource());factoryBean.setMapperLocations(resources);SqlSessionFactory sqlSessionFactory = null;try {sqlSessionFactory = factoryBean.getObject();} catch (Exception e) {e.printStackTrace();System.exit(0);}org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();configuration.setMapUnderscoreToCamelCase(true);return sqlSessionFactory;}public static Resource getMapperXMLPathResource(Class<?> clazz) {return new ClassPathResource(clazz.getName().replace(".", File.separator).concat(".xml"));}@Beanpublic UsersMapper getUsersMapper() {SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(getSqlSessionFactory());return sessionTemplate.getMapper(UsersMapper.class);}@Beanpublic UsersExtMapper getUsersExtMapper() {SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(getSqlSessionFactory());return sessionTemplate.getMapper(UsersExtMapper.class);}@Order(Ordered.HIGHEST_PRECEDENCE)@BeanFilter characterEncodingFilter() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("UTF-8");filter.setForceEncoding(true);return filter;}}

4,新规 UsersExtService接口

 

package org.com.sample.service.ext;import java.util.List;import java.util.Map;import org.com.sample.dataset.Users;public interface UsersExtService {int countForPaging(Map<String, Object> map);List<Users> selectMcUserExtForPaging(Map<String, Object> map);}

 

5,新规UsersExtService接口的实现类UsersExtServiceImpl.java

 

package org.com.sample.service.ext.impl;import java.util.List;import java.util.Map;import org.com.sample.dataset.Users;import org.com.sample.mapper.ext.UsersExtMapper;import org.com.sample.service.ext.UsersExtService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class UsersExtServiceImpl implements UsersExtService {@AutowiredUsersExtMapper usersExtMapper;@Overridepublic int countForPaging(Map<String, Object> map) {return usersExtMapper.countForPaging(map);}@Overridepublic List<Users> selectMcUserExtForPaging(Map<String, Object> map) {return usersExtMapper.selectMcUserExtForPaging(map);}}

 

6,修改UsersFacade.java

 

package org.com.sample.facade;import java.util.List;import java.util.Map;import org.com.sample.dataset.Users;import org.com.sample.dataset.UsersExample;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;public interface UsersFacade {List<Users> selectByExample(UsersExample example);Page<Users> selectUserListForPaging(Map<String, Object> map, Pageable pageable);}

7,修改UsersFacadeImpl.java

 

package org.com.sample.facade.impl;import java.util.List;import java.util.Map;import org.com.sample.dataset.Users;import org.com.sample.dataset.UsersExample;import org.com.sample.facade.UsersFacade;import org.com.sample.service.UsersService;import org.com.sample.service.ext.UsersExtService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageImpl;import org.springframework.data.domain.Pageable;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;@Service@Transactionalpublic class UsersFacadeImpl implements UsersFacade {@AutowiredUsersService usersService;@AutowiredUsersExtService usersExtService;@Overridepublic List<Users> selectByExample(UsersExample example) {return usersService.selectByExample(example);}@Overridepublic Page<Users> selectUserListForPaging(Map<String, Object> map, Pageable pageable) {Page page = null;int total = usersExtService.countForPaging(map);if (total > 0) {List<Users> list = usersExtService.selectMcUserExtForPaging(map);if (list != null && list.size() > 0) {page = new PageImpl<Users>(list, pageable, total);}}return page;}}


8,新规PagenationHelper.java

package org.com.common.paging;import lombok.Getter;@Getterpublic class PagenationHelper {// private final int MAX_DISP_PAGE = 5;private final int MAX_DISP_PAGE = 1;private boolean hiddenFirst;private boolean hiddenPrev;private boolean hiddenNext;private boolean hiddenLast;// private boolean hiddenPage2;// private boolean hiddenPage3;// private boolean hiddenPage4;// private boolean hiddenPage5;private boolean activePage1;// private boolean activePage2;// private boolean activePage3;// private boolean activePage4;// private boolean activePage5;private int page1PageValue;public PagenationHelper(int number, int size, int totalPages) {this.hiddenFirst = (number == 0);this.hiddenPrev = (number == 0);this.hiddenNext = ((totalPages == 0) || (number == totalPages - 1));this.hiddenLast = ((totalPages == 0) || (number == totalPages - 1));// this.hiddenPage2 = (totalPages <= 1);// this.hiddenPage3 = (totalPages <= 2);// this.hiddenPage4 = (totalPages <= 3);// this.hiddenPage5 = (totalPages <= 4);this.activePage1 = (number == 0);// this.activePage2 = ((MAX_DISP_PAGE - 3 <= totalPages) && (number + 1// == MAX_DISP_PAGE - 3));// this.activePage3 = (((totalPages == MAX_DISP_PAGE - 2) && (number + 1// == MAX_DISP_PAGE - 2)) || ((MAX_DISP_PAGE - 2 < totalPages)// && (MAX_DISP_PAGE - 2 <= number + 1) && (number + 1 < totalPages -// 1)));// this.activePage4 = ((0 < number) && (((totalPages == MAX_DISP_PAGE -// 1) && (number + 1 == MAX_DISP_PAGE - 1)) || ((MAX_DISP_PAGE - 1 <// totalPages) && (number + 1 == totalPages - 1))));// this.activePage5 = ((0 < number) && (MAX_DISP_PAGE <= totalPages) &&// (number + 1 == totalPages));if (totalPages <= MAX_DISP_PAGE) {this.page1PageValue = 0;} else {if (number + 1 <= MAX_DISP_PAGE - 2) {this.page1PageValue = 0;} else if ((MAX_DISP_PAGE - 1 <= number + 1)&& (number + 1 <= totalPages - 2)) {this.page1PageValue = number - 2;} else {this.page1PageValue = totalPages - MAX_DISP_PAGE;}}}}


 

9,修改UsersController.java

 

package org.com.sample.controller;import java.util.HashMap;import java.util.Map;import org.com.common.paging.PagenationHelper;import org.com.sample.dataset.Users;import org.com.sample.facade.UsersFacade;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.web.PageableDefault;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping("/sample/users")public class UsersController {private static final Logger logger = LoggerFactory.getLogger(UsersController.class);private static final int DEFAULT_PAGEABLE_SIZE = 10;@AutowiredUsersFacade usersFacade;@RequestMapping(value = "/show", method = { RequestMethod.GET, RequestMethod.POST })public String selectAllUser(@PageableDefault(page = 0, size = DEFAULT_PAGEABLE_SIZE) Pageable pageable,Model model) {// List<Users> userList = usersFacade.selectByExample(new// UsersExample());Map<String, Object> map = new HashMap<String, Object>();map.put("start_line", pageable.getOffset() + 1);map.put("end_line", (pageable.getPageNumber() + 1) * pageable.getPageSize());map.put("orderByClause", "username asc");Page<Users> page = usersFacade.selectUserListForPaging(map, pageable);PagenationHelper ph = new PagenationHelper(page.getNumber(), page.getSize(), page.getTotalPages());model.addAttribute("page", page);model.addAttribute("ph", ph);return "sample/users/users";}}

 

10修改users.html

 

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"><head><meta charset="UTF-8" /><title>Users</title><metacontent='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'name='viewport' /><meta th:replace="head-cssjs" /></head><body class="skin-blue"><div class="wrapper"><!-- Content Wrapper. Contains page content --><div class="content-wrapper"><!-- Content Header (Page header) --><section class="content-header"><h1>Users</h1></section><!-- Main content --><section class="content"><div class="row"><div class="col-md-12"><form id="usersInputForm" method="post" class="form-horizontal"><div id="maincontent" class="box box-primary"style="overflow-y: auto; overflow-x: hidden;"><div class="box-body"><div class="form-group"><div class="col-md-12"><div th:if="${page} != null and ${ph} != null " class="row"><div class="col-md-12"><p class="pageList">检索结果 <span th:text="${page.totalElements}"></span>件 <spanclass="prev"th:attr="style=${ph.hiddenFirst} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=0,size=${page.size})}"id="searchIdFirst"><<</a></span> <span class="prev"th:attr="style=${ph.hiddenPrev} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=${page.number - 1},size=${page.size})}"><</a></span><span th:text="${page.number + 1}"></span> / <spanth:text="${page.totalPages}"></span> 页 <span class="next"th:attr="style=${ph.hiddenNext} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=${page.number + 1},size=${page.size})}">></a></span><span class="next"th:attr="style=${ph.hiddenLast} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=${page.totalPages - 1},size=${page.size})}">>></a></span></p></div></div><div class="box box-success"th:attrappend="style=${page == null ? 'display: none;' : ''}"><div class="col-md-12" style="width: 99%;"><table id="searchResult"class="table table-condensed table-striped table-hover"><thead><tr><th class="col-md-1">No.</th><th class="col-md-1">username</th><th class="col-md-1">password</th><th class="col-md-1">role</th></tr></thead><tbody><tr th:each="content, iterStat : ${page}"><td class="col-md-1" th:id="${iterStat.index}"th:name="${iterStat.index}"th:value="${iterStat.index}"th:text="${iterStat.index} + 1"></td><td class="col-md-1"th:id="'page['+${iterStat.index}+'].username'"th:name="'page['+${iterStat.index}+'].username'"th:value="${content.username}"th:text="${content.username}"></td><td class="col-md-1"th:id="'page['+${iterStat.index}+'].password'"th:name="'page['+${iterStat.index}+'].password'"th:value="${content.password}"th:text="${content.password}"></td><td class="col-md-1"th:id="'page['+${iterStat.index}+'].role'"th:name="'page['+${iterStat.index}+'].role'"th:value="${content.role}" th:text="${content.role}"></td></tr></tbody></table></div></div><div th:if="${page} != null and ${ph} != null " class="row"><div class="col-md-12"><p class="pageList">检索结果 <span th:text="${page.totalElements}"></span>件 <spanclass="prev"th:attr="style=${ph.hiddenFirst} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=0,size=${page.size})}"id="searchIdFirst"><<</a></span> <span class="prev"th:attr="style=${ph.hiddenPrev} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=${page.number - 1},size=${page.size})}"><</a></span><span th:text="${page.number + 1}"></span> / <spanth:text="${page.totalPages}"></span> 页 <span class="next"th:attr="style=${ph.hiddenNext} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=${page.number + 1},size=${page.size})}">></a></span><span class="next"th:attr="style=${ph.hiddenLast} ? 'visibility:hidden'"><aclass="js-pagenation"th:href="@{/sample/users/show(page=${page.totalPages - 1},size=${page.size})}">>></a></span></p></div></div></div></div></div></div></form></div></div></section><!-- /.content --></div><!-- /.content-wrapper --></div><!-- ./wrapper --><div th:replace="bottom-js"></div><script th:inline="javascript">/*<![CDATA[*/$(document).ready(function() {$('.js-pagenation').each(function() {$(this).click(function() {$('#usersInputForm').attr('action', $(this).attr('href'));$(this).attr('href', '#');$('#usersInputForm').submit();});});});/*]]>*/</script></body></html>

 

11,启动项目,输入URL,http://localhost:8888/sample/users/show



 

 

 

 

 

代码下载地址

http://pan.baidu.com/s/1o6spOJS,fifth.zip

0 0
原创粉丝点击