springboot---->集成mybatis开发(一)
这里面我们介绍一下springboot与mybatis的集成,主要完成了mybatis的真分页。一个成熟的人往往发觉可以责怪的人越来越少,人人都有他的难处。
springboot简单集成mytbatis
一、集成mybatis需要额外的依赖
我们使用的是mysql数据库,需要mysql的驱动,这里就不列举springboot的基础依赖了。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
在application.yml中配置mybatis的一些属性。mybatis_config.xml是mybatis的配置,sql_*.xml是sql语句。
mybatis:
mapper-locations: classpath:config/mweb/sql_*.xml
config-location: classpath:config/setting/mybatis_config.xml
type-aliases-package: com.linux.huhx.learn.mybatis.bean
这里面引入mybatis_config.xml文件,主要是为了添加分页的拦截器。这个后面再做详细介绍,至此mybatis的配置就告一段落。下面我们通过实例来体会一下项目中经常遇到的问题。
springboot配置mybatis的分页
一、mybatis的拦截器实现真分页
mybatis内置实现的分页是逻辑分页,并没有做到真正的分页。现在我们在springboot中集成一下mybatis的真分页功能。首先添加依赖pagehelper。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper-version}</version>
</dependency>
在mybatis的配置文件中,添加plugin。主体修改文件是上面的mybatis_config.xml,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
我们的实体Bean类User,位于com.linux.huhx.learn.mybatis.bean包内,也就是上述配置的type-aliases-package,这样在涉及到实体类写sql语句的时候,可以不用写包名。
public class User implements Serializable {
private String userId;
private String username;
private String password;
private int sex;
private String phoneNumber;
private String address;
private Date birthday
}
User类与数据库的puser表字段是对应开来的,这里面省略了bean类的get和set方法。后续的实体bean都会省略这些set和get的方法。
@RestController
@RequestMapping("/pageHelper")
public class PageHelperAction { @Resource
private SqlSession sqlSession; @RequestMapping("/getUser")
public ResponseBean<List<User>> getUsersByPage() {
PageHelper.startPage(2, 3);
List<User> pagelist = this.sqlSession.selectList("user.queryAllUserInfo");
return ResultUtil.success(pagelist);
}
}
我们的user.queryAllUserInfo对应的sql语句如下:
<!-- 分页查询所有的用户 -->
<select id="queryAllUserInfo" resultType="User">
SELECT
userId,
username,
password,
address,
phoneNumber,
birthday,
sex
FROM
puser
ORDER BY
userId DESC
</select>
通过请求下面的controller,get的url为:http://localhost:9998/pageHelper/getUser。通过下面的日志,我们知道实现的是真的分页。
::35.032 [http-nio--exec-] DEBUG user.queryAllUserInfo_COUNT - ==> Preparing: SELECT count() FROM puser
::35.057 [http-nio--exec-] DEBUG user.queryAllUserInfo_COUNT - ==> Parameters:
::35.071 [http-nio--exec-] DEBUG user.queryAllUserInfo_COUNT - <== Total:
::35.074 [http-nio--exec-] DEBUG user.queryAllUserInfo - ==> Preparing: SELECT userId, username, password, address, phoneNumber, birthday, sex FROM puser ORDER BY userId DESC LIMIT ?, ?
::35.074 [http-nio--exec-] DEBUG user.queryAllUserInfo - ==> Parameters: (Integer), (Integer)
::35.078 [http-nio--exec-] DEBUG user.queryAllUserInfo - <== Total:
需要注意的是在查询数目的总数的时候,没有加上order by userId desc。这样的处理确认挺好的,没有额外的查询开销。
二、使用Mapper的接口编程方式
网上用mybatis的大多都是使用mapper的接口方式,这里面我们对这种方式做一个了解。至于我为什么没有使用这种方式,由于使用了动态代理,性能是没有上述直接sqlSession.selectList等那么好,可能这个是主要的原因(使用mapper的方式确实可以避免很多问题,比如namespace的冲突、方法返回类型等问题)。
首先定义一个mapper的接口:
package com.linux.huhx.learn.mybatis.mapper; import com.linux.huhx.learn.mybatis.bean.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; @Mapper
public interface UserMapper { @Select("select * from puser where userId = #{userId}")
User queryUserById(@Param("userId") String userId);
}
在我们测试控制器中,我们测试一下Mapper的效果:
@RestController
@RequestMapping("/mapper")
public class UserMapperAction { @Resource
private UserMapper userMapper; @GetMapping("user")
public ResponseBean<User> getUserById(@RequestParam("userId") String userId) {
User user = userMapper.queryUserById(userId);
return ResultUtil.success(user);
}
}
通过get请求:http://localhost:9998/mapper/user?userId=1。我们得到以下的返回数据:
{
"returnCode": ,
"returnMessage": "成功",
"response": {
"userId": "",
"username": "huhx1",
"password": "",
"sex": ,
"phoneNumber": null,
"address": "",
"birthday": null
}
}
这种方式确实写起来比较舒服,不用额外的去维护一个写sql的xml文件。而且一个Mapper的接口就完成了整个Dao的代码。当然也可以不用类似于@Select注解,sql语句也可以定义在xml里面。
@GetMapping("user2")
public ResponseBean<User> getUserById2(@RequestParam("userId") String userId) {
User user = userMapper.queryUserByXMlId(userId);
return ResultUtil.success(user);
}
在上述的userMapper类里面添加方法queryUserByXMlId:
User queryUserByXMlId(String userId);
添加的xml文件里面,我们的sql语句如下:
<?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="com.linux.huhx.learn.mybatis.mapper.UserMapper">
<select id="queryUserByXMlId" resultType="User" parameterType="string">
SELECT
*
FROM
puser
WHERE
userId = #{userId}
</select>
</mapper>
友情链接
springboot---->集成mybatis开发(一)的更多相关文章
- 在springboot中集成mybatis开发
在springboot中利用mybatis框架进行开发需要集成mybatis才能进行开发,那么如何在springboot中集成mybatis呢?按照以下几个步骤就可以实现springboot集成myb ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- SpringBoot集成MyBatis的Bean配置方式
SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...
- 0120 springboot集成Mybatis和代码生成器
在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 ...
- SpringBoot集成MyBatis底层原理及简易实现
MyBatis是可以说是目前最主流的Spring持久层框架了,本文主要探讨SpringBoot集成MyBatis的底层原理.完整代码可移步Github. 如何使用MyBatis 一般情况下,我们在Sp ...
- SpringBoot集成MyBatis小记
SpringBoot集成MyBatis小记 参考MyBatis官网 1. 添加maven依赖 添加到pom.xml <dependency> <groupId>org.myba ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- SpringBoot 集成Mybatis 连接Mysql数据库
记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...
- SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)
SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...
- SpringBoot集成Mybatis并具有分页功能PageHelper
SpringBoot集成Mybatis并具有分页功能PageHelper 环境:IDEA编译工具 第一步:生成测试的数据库表和数据 SET FOREIGN_KEY_CHECKS=0; ...
随机推荐
- webpack打包使用
md创建文件夹 dir是遍历 如何安装node环境 首先下载安装包;安装好以后 使用cmd命令 建立一个新的文件夹(一定是英文的),然后cmd 命令中 cd 进入所安装的盘的地址. 在该文件夹下面 使 ...
- send和sendmsg性能测试【sendmsg和send的性能基本一样,并没有得到优化】
1,摘要:测试send和sendmsg的性能,影响这两个函数性能的因素主要有发送的字节大小,增加循环次数,从100到10000000(千万)减少计算误差 2,基本信息cat /proc/cpuinfo ...
- 原理分析dubbo分布式应用中使用zipkin做链路追踪
zipkin是什么 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开 ...
- AOP 如果被代理对象的方法设置了参数 而代理对象的前置方法没有设置参数 则无法拦截到
AOP 如果被代理对象的方法设置了参数 而代理对象的前置方法没有设置参数 则无法拦截到
- BZOJ 3174 拯救小矮人(贪心+DP)
题意 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚到肩 ...
- poj2828 Buy Tickets (线段树 插队问题)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 22097 Accepted: 10834 Des ...
- 安装windows 2003iso 步骤
参考:http://www.2cto.com/os/201303/192509.html u盘winpe下安装windows server 2003 一.准备和资源需求 1.U盘,内置WinPE ...
- 自学huawei之路-AC6005-8AP添加授权码
返回自学Huawei之路 自学huawei之路-AC6005-8AP添加授权码
- 进程和线程(3)-ThreadLocal
ThreadLocal 在多线程环境下,每个线程都有自己的数据.一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁. 但是局部变量也 ...
- python独立环境virtualenv(并在pycharm中指定)
上篇文章中讲到 Django 如何启动以及配置 sessions 功能.sessions 功能用是跟踪用户的状态,经常结合 Cookie 功能实现自动登录功能. 所谓的“自动登录”指的是:我们登录一些 ...