spring boot ----> 和mybatis。。。
环境:
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的使用
假如使用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。。。的更多相关文章
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...
- 使用intelliJ创建 spring boot + gradle + mybatis站点
Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...
- Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...
- Spring boot整合Mybatis
时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...
- 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 ...
- spring boot 实现mybatis拦截器
spring boot 实现mybatis拦截器 项目是个报表系统,服务端是简单的Java web架构,直接在请求参数里面加了个query id参数,就是mybatis mapper的query id ...
- spring boot 整合 mybatis 以及原理
同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...
- Spring Boot集成MyBatis开发Web项目
1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...
- 详解Spring Boot集成MyBatis的开发流程
MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...
- Spring Boot 整合MyBatis(1)
这篇文章介绍如何在Spring boot中整合Mybatis,其中sql语句采用注解的方式插入.后续文章将会介绍,如何使用xml方式. SSM SSH框架已经满足轻量级这个需求了,但是对于开发人员而言 ...
随机推荐
- ThreadPoolExecutor线程池
为什么使用线程池: 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率. 2.线程并发数量过多,抢占系统资源从而导致阻塞. 3.对线程进行一些简单的管理. 在java ...
- topcoder srm 701 div1 -3
1.一堆石子有$n$个,Alice,Bob轮流拿,给定每个人每次可以拿的石子的数目的集合.谁先不能拿谁输.问谁能赢? 思路:对于先手来说,输赢的局面一定是从某个数字开始呈循环状态.所以找到这个循环开始 ...
- 第一次参加acm区域赛
什么,这周天就要去参加acm焦作赛,简直不敢相信.从大一暑假七月份中旬到今天十一月23日,加入acm将近四个多月的时间,如今到了检验自己的时候了.aaaaaaaaaa.乌拉,必胜.打印个模板,在跑个步 ...
- checkbox勾选事件,JQ设置css,下拉框JQ选中
<input id="CheckMainCompany" type="checkbox"/> $(function() { $("#Che ...
- Django框架 (一) 虚拟环境配置及简单使用
虚拟环境 什么是虚拟环境 对真实的python解释器的一个拷贝版本 是事实有效的,可以独立存在运行解释python代码 可以在计算机上拷贝多个虚拟环境 为什么要使用虚拟环境 保证真实环境的纯净性 框架 ...
- POJ-1038 Bugs Integrated, Inc. (状压+滚动数组+深搜 的动态规划)
本题的题眼很明显,N (1 <= N <= 150), M (1 <= M <= 10),摆明了是想让你用状态压缩dp. 整个思路如下:由于要填2*3或者3*2的芯片,那么就要 ...
- (转) GAN论文整理
本文转自:http://www.jianshu.com/p/2acb804dd811 GAN论文整理 作者 FinlayLiu 已关注 2016.11.09 13:21 字数 1551 阅读 1263 ...
- Vue.directive自定义指令
Vue除了内部指令,我们也可以定义一些属于自己的指令,比如我们要定义一个v-diy的指令,作用就是让文字变成红色. 写好了这个功能,我们现在就自己定义一个全局的指令.我们这里使用Vue.directi ...
- InnoDB锁笔记
InnoDB主要使用行级锁(row lock),其行锁是通过在索引项上加锁而实现的,如果MySQL的执行计划没有用到索引,那么行锁也就无意义了 InnoDB的行锁是通过给索引上的索引(聚集,非聚集)添 ...
- 什么情况下用断言?assert
可以再预计正常情况下不会到达的任何位置上放置断言,断言可以用于验证传递给私有方法的参数.不俺的参数过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数.不过,既 ...