环境:

centos6.8,jdk1.8.0_172,maven3.5.4,spring boot1.5.15

1、使用maven命令:mvn dependency:tree查看mybatis-spring-boot-starter的依赖情况:

关注mybatis直接相关的jar包:

mybatis-spring-boot-autoconfigure-1.3.2.jar,mybatis-3.4.6.jar,mybatis-spring-1.3.2.jar

2、基本配置

1)工程结构:mapper和sql映射 分别放置在不同位置:

 src/main/java/com/rui/mapper # mapper接口:XxxMapper.java

 src/main/resources/mapper #映射文件: XxxMapper.xml

2)配置文件:application.properties配置操作数据库key-value:

 spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 spring.datasource.username=你的用户名
 spring.datasource.password=你的密码

 mybatis.mapper-locations=classpath:mapper/*.xml # sql映射文件位置
 mybatis.type-aliases-package=com.rui.domain #实体类包名

3)注解配置:springboot启动类添加@MapperScan(basePackages="{p1,p2}")

注解在包 org.mybatis.spring.annotation 中

4)XxxMapper.xml:当在写类似于List<User> findAllUsers(); 的时候,在xml文件中,需要注意它的resultType的写法,根据官方文档的提示,这里只需要配置成User即可,即实体类类型,直接填入集合类型如List会导致错误。

5)mybatis拓展,分页和分页插件PageHelper的使用

官网:https://github.com/abel533

假如使用MySQL数据库,一般写分页需要分成两个步骤:1、根据条件查询出总记录数;2、根据条件查询分页,使用MySQL的limit offset, rowsets分页查询出记录

PageHelper的stater:

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

starter的 依赖树

application.properties配置:

 #pagehelper
 pagehelper.helperDialect=mysql
 pagehelper.reasonable=true
 4 pagehelper.supportMethodsArguments=true
 pagehelper.params=count=countSql 6

关键代码:

 import com.github.pagehelper.PageHelper;

 // ①服务实现层
 PageHelper.startPage(page, rows);

 import com.github.pagehelper.PageInfo;
  9  //②控制器层
  List<User> userList = userService.selectByUser(user, page, rows);
  result.addObject("pageInfo", new PageInfo<User>(userList));12

一个实例:场景:从数据库查询user表,把查询到的users分页。

后台代码:

控制器层

 import org.springframework.stereotype.Controller;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.rui.service.UserService;
 import com.rui.domain.User;
 import java.util.List;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.github.pagehelper.PageInfo;

 @Controller
 @RequestMapping("/find")
 public class UserController{

    @Autowired
    private UserService userService;

  @RequestMapping(value="/page")
     public ModelAndView findByPage(
                       @RequestParam(required=false,defaultValue="1") int pageNum ,
                       @RequestParam(required=false,defaultValue="3")int pageSize){
            ModelAndView mav = new ModelAndView();
            List<User> list = userService.getAllUsersByPage(pageNum,pageSize);
            PageInfo pageInfo = new PageInfo(list);
            mav.addObject("pageInfo",pageInfo);
            mav.setViewName("third");
            return mav;
      }
 }

服务实现层

 package com.rui.userService.serviceImpl;

 import java.util.List;
 import com.rui.service.UserService;
 import com.rui.domain.User;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.rui.mapper.UserMapper;
 import com.github.pagehelper.PageHelper;

 @Transactional
 @Service
 public class UserServiceImpl implements UserService{

      @Autowired
      private UserMapper userMapper;

    @Override
      public List<User> getAllUsersByPage(int pageNum, int pageSize){

           PageHelper.startPage(pageNum, pageSize);
           return userMapper.findAllUsers();
      }

 }

前台代码:

分页/分页导航页码

css:

 ul{
 ;
 ;

     }

     .first li{
       list-style:none;
       float:left;

     }

     .first .pre{
          border:1px black solid;
          border-right:0px;
          padding-left:15px;
          padding-right:15px;
     }

     .first .next{
          border:1px black solid;
          border-left:0px;
          padding-left:15px;
          padding-right:15px;
     }

     .mid .second li{
          border:1px black solid;
          padding-left:15px;
          padding-right:15px;
     }

html:(thymeleaf做前台模板)

  <table>
                 <thead>
                 <tr>
                     <th colspan="4">查询结果</th>
                 </tr>
                 <tr>
                     <th>ID</th>
                     <th>NAME</th>
                     <th>PWD</th>
                     <th>SEX</th>
                 </tr>
                 </thead>
                 <tbody>
                     <tr th:each="user : ${pageInfo.list}">
                         <td th:text="${user.uid}">1</td>
                         <td th:text="${user.name}">rr</td>
                         <td th:text="${user.pwd}">123</td>
                         <td th:text="${user.sex}">m</td>
                     </tr>
                 </tbody>
  </table>
       <br/>
       <hr/>
                 <ul class="first">
                    <li class="pre" th:if="${pageInfo.hasPreviousPage}">
                     <a th:href="@{/find/page(pageNum=${pageInfo.prePage},pageSize=${pageInfo.pageSize})}">前一页</a>
                    </li>

                       <li class="mid" th:each="nav : ${pageInfo.navigatepageNums}">
                           <ul class="second">
                             <li th:if="${nav == pageInfo.pageNum}" th:text="${nav}">nav</li>
                             <li th:if="${nav != pageInfo.pageNum}">
                                 <a th:text="${nav}" th:href="@{/find/page(pageNum=${nav},pageSize=${pageInfo.pageSize})}">nav</a>
                             </li>
                           </ul>
                      </li>

                         <li class="next" th:if="${pageInfo.hasNextPage}">
                             <a th:href="@{/find/page(pageNum=${pageInfo.nextPage},pageSize=${pageInfo.pageSize})}">下一页</a>
                         </li>
                 </ul>

效果是这样的:

1、导航页码navigatePageNums数据类型是数组,它的长度根据总页码数pages和导航页navigatePages的关系调整,navigatePages默认是8,可以自定义。导航页码显示的长度以8为界限调整。

如果需要在jsp页面显示navigatePageNums,可以这么干:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>  

<tr class="navigatePageNums">
     <th>导航页码 【navigatepageNums(defaultValue)】</th>
     <td>${fn:length(pageInfo.navigatepageNums)}</td>
 </tr>

note:

①include标签引用sql标签通过 refid=""
②application.properties配置mybatis的两个属性:
1、mapper.xm文件的位置
2、实体类的别名配置
③mapper.xml文件:namespace配置
④mapper扫描: 用@MapperScan在启动类上,指定Mapper接口的包名        ??? 使用@Mapper不起作用

spring boot ----> 和mybatis。。。的更多相关文章

  1. Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...

  2. 使用intelliJ创建 spring boot + gradle + mybatis站点

    Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...

  3. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  4. Spring boot整合Mybatis

    时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...

  5. Spring boot教程mybatis访问MySQL的尝试

    Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.page ...

  6. spring boot 实现mybatis拦截器

    spring boot 实现mybatis拦截器 项目是个报表系统,服务端是简单的Java web架构,直接在请求参数里面加了个query id参数,就是mybatis mapper的query id ...

  7. spring boot 整合 mybatis 以及原理

    同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...

  8. Spring Boot集成MyBatis开发Web项目

    1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...

  9. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  10. Spring Boot 整合MyBatis(1)

    这篇文章介绍如何在Spring boot中整合Mybatis,其中sql语句采用注解的方式插入.后续文章将会介绍,如何使用xml方式. SSM SSH框架已经满足轻量级这个需求了,但是对于开发人员而言 ...

随机推荐

  1. Bugku-CTF之web2-听说聪明的人都能找到答案

    Day1   听说聪明的人都能找到答案   http://123.206.87.240:8002/yanzhengma/  

  2. CSS的再深入(更新中···)

    在上一章我们提到了一个新的概念,叫做块级样式,讲到这里就要科普一下: 标签又分为两种: (1)块级标签 元素特征:会独占一行,无论内容多少,可以设置宽高··· (2)内敛标签(又叫做行内标签) 元素特 ...

  3. UVA 10382 Watering Grass(区间覆盖,贪心)题解

    题意:有一块草坪,这块草坪长l 米,宽 w 米,草坪有一些喷头,每个喷头在横坐标为 p 处,每个喷头的纵坐标都是(w/2) ,并且喷头的洒水范围是一个以喷头为圆心,半径为 r 米的圆.每次最少需要打开 ...

  4. 【做题】UVA-12304——平面计算集合六合一

    可真是道恶心题-- 首先翻译一下6个任务: 给出一个三角形,求它的外界圆. 给出一个三角形,求它的内接圆. 给出一个圆和一个点,求过这个点的切线的倾斜角\(\alpha \in [0,180)\).( ...

  5. 题解——loj6279 数列分块入门3 (分块)

    用set维护有序序列 或许sort也可以,但这题的前驱定义是严格小于 所以要去重 然后就是记得自己打的加法tag在query的时候一定要算上 话说这题数据有点fake啊忘了查询算上自己的标记了还有70 ...

  6. Shiro学习笔记五(Shiro标签,及通配符)

    1.首先是导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> ...

  7. powerdesigner反转数据库的设计图

    PowerDesigner导入sql文件 1:点击 2:弹出该页面,点击确定 3:弹出一下页面,点击下面按钮选择文件 4:点击确定完成 二 .表转换为中文的执行脚本及步骤 执行脚本为:Option E ...

  8. [转载]Linux中的网络接口及LO回环接口

    转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...

  9. 数据结构和算法with Python

    http://www.math.pku.edu.cn/teachers/qiuzy/ds_python/courseware/index.htm

  10. HDU 5919 Sequence II(主席树+区间不同数个数+区间第k小)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5919 题意:给出一串序列,每次给出区间,求出该区间内不同数的个数k和第一个数出现的位置(将这些位置组 ...