springboot集成mybatis详细教程同时实现自定义拦截器分页功能(1)

本文详细介绍了如何在SpringBoot项目中引入mybatis,包括配置Maven依赖、YAML文件设置、数据映射及分页查询的实现。通过创建实体类User,DAO接口,以及配置Mapper和MybatisConfig,展示了如何使用SpringBoot的mybatis-spring-boot-starter进行数据库操作。
摘要由CSDN通过智能技术生成

2.springboot引入mybatis


创建一个maven项目,引入springbootspringboot-mybatis依赖。

pom.xml

org.springframework.boot

spring-boot-starter-parent

2.0.2.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.0.1

mysql

mysql-connector-java

8.0.11

添加springboot配置文件,这里为了简单,不使用连接池。

application.yml

server:

port: 8001

spring:

application:

name: user-service

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/TEST_MS?serverTimezone=UTC

username: 用户名

password: 密码

mybatis:

typeAliasesPackage: com.feng.entity

mapperLocations: classpath:mybatis-mapper/*.xml

其中typeAliasesPackage指定用于映射数据的pojo位置,mapperLocations用于指定映射dao层的mapper文件,如果使用全注解方式开发的话可以省略。

3.编写查询映射


先创建一个用于映射数据的pojo:User.java

package com.feng.entity;

import javax.validation.constraints.NotBlank;

/**

  • Created by Feng

*/

public class User {

private Integer id;

@NotBlank(message = “用户名不能为空”)

private String userName;

@NotBlank(message = “密码不能为空”)

private String passWord;

private String uName;

private String phone;

private String email;

private String cityID;

private String cityName;

private String provienceID;

private String provienceName;

private String address;

private String organizationID;

private String roleID;

private String photo;

private String birthday;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassWord() {

return passWord;

}

public void setPassWord(String passWord) {

this.passWord = passWord;

}

public String getuName() {

return uName;

}

public void setuName(String uName) {

this.uName = uName;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getCityID() {

return cityID;

}

public void setCityID(String cityID) {

this.cityID = cityID;

}

public String getCityName() {

return cityName;

}

public void setCityName(String cityName) {

this.cityName = cityName;

}

public String getProvienceID() {

return provienceID;

}

public void setProvienceID(String provienceID) {

this.provienceID = provienceID;

}

public String getProvienceName() {

return provienceName;

}

public void setProvienceName(String provienceName) {

this.provienceName = provienceName;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getOrganizationID() {

return organizationID;

}

public void setOrganizationID(String organizationID) {

this.organizationID = organizationID;

}

public String getRoleID() {

return roleID;

}

public void setRoleID(String roleID) {

this.roleID = roleID;

}

public String getPhoto() {

return photo;

}

public void setPhoto(String photo) {

this.photo = photo;

}

public String getBirthday() {

return birthday;

}

public void setBirthday(String birthday) {

this.birthday = birthday;

}

@Override

public String toString() {

return “User{” +

“id=” + id +

“, userName='” + userName + ‘’’ +

“, passWord='” + passWord + ‘’’ +

“, uName='” + uName + ‘’’ +

“, phone='” + phone + ‘’’ +

“, email='” + email + ‘’’ +

“, cityID='” + cityID + ‘’’ +

“, cityName='” + cityName + ‘’’ +

“, provienceID='” + provienceID + ‘’’ +

“, provienceName='” + provienceName + ‘’’ +

“, address='” + address + ‘’’ +

“, organizationID='” + organizationID + ‘’’ +

“, roleID='” + roleID + ‘’’ +

“, photo='” + photo + ‘’’ +

“, birthday='” + birthday + ‘’’ +

‘}’;

}

}

创建用于查询的UserDao和用于分页的Pager

package com.feng.dao;

import com.feng.entity.User;

import database.support.Pager;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**

  • Created by Feng

*/

public interface UserDao {

List getUser(@Param(“user”) User user);

List getUser(@Param(“pager”) Pager pager, @Param(“user”) User user);

User loadUserByUserName(String userName);

int addUser(User user);

int addUsers(List userList);

}

package database.support;

import javax.validation.constraints.NotNull;

/**

  • Created by Feng

*/

public class Pager {

@NotNull

private int pageNo;

private int pageSize = 10;

private int total;

private String sortBy;

private String rank = “DESC”;

public int getPageNo() {

return pageNo;

}

public int getPageSize() {

return pageSize;

}

public int getTotal() {

return total;

}

public String getSortBy() {

return sortBy;

}

public String getRank() {

return rank;

}

public Pager setPageNo(int pageNo) throws IllegalAccessException {

if(pageNo <= 0){

throw new IllegalAccessException(“分页页码必须大于0”);

}

this.pageNo = pageNo;

return this;

}

public Pager setPageSize(int pageSize) throws IllegalAccessException {

if(pageSize <= 0){

throw new IllegalAccessException(“单页数据量必须大于0”);

}

this.pageSize = pageSize;

return this;

}

public Pager setTotal(int total) {

this.total = total;

return this;

}

public Pager setSortBy(String sortBy) {

this.sortBy = sortBy;

return this;

}

public Pager setRank(String rank) {

this.rank = rank;

return this;

}

}

我们会用到UserDao中重载过的两个getUser方法,其中一个只接受用于查询的User参数,另一个额外接受一个Pager对象用于分页。

然后在spring配置文件中指定的包内编写用于映射UserDao的mybatis映射配置文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

ID,USERNAME,U_NAME,PHONE,EMAIL,CITY_ID,CITY_NAME,PROVIENCE_ID,PROVIENCE_NAME,ADDRESS,PHOTO,BIRTHDAY,ORGANIZATION_ID,ROLE_ID

,PASSWORD

SELECT

FROM USER

WHERE USERNAME = #{userName}

SELECT

FROM USER

ID = #{id}

AND USERNAME = #{userName}

AND U_NAME LIKE #{uName}

AND PHONE = #{phone}

AND EMAIL = #{email}

AND CITY_ID = #{cityID}

AND PROVIENCE_ID = #{provienceID}

AND ADDRESS LIKE #{address}

AND ORGANIZATION_ID = #{organizationID}

AND ROLE_ID = #{roleID}

insert into USER (ID,USERNAME,PASSWORD,U_NAME,PHONE,EMAIL,CITY_ID,CITY_NAME,PROVIENCE_ID,PROVIENCE_NAME,ADDRESS,PHOTO,BIRTHDAY,ORGANIZATION_ID,ROLE_ID)

values (#{id},

#{userName},

#{passWord},

#{uName},

#{phone},

#{email},

#{cityID},

#{cityName},

#{provienceID},

#{provienceName},

#{address},

#{photo},

#{birthday},

#{organizationID},

#{roleID})

这里需要说明的是我们在UserDao中有两个getUser方法,但在配置文件中只映射了一个select标签,这是因为mybatis和dao层之间的映射只与方法名称有关,而与方法参数无关。所以在sql语句不变,只是参数增加的情况下我们可以用一个select标签映射多个方法。唯一要注意的是传入多个对象参数时要在dao层中使@Param注解为参数指定名称。

然后添加一个mybatis配置类MybatisConfig

package com.feng.config;

import database.mybatis.plug.PageInterceptor;

import org.mybatis.spring.annotation.MapperScan;

import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

  • Created by Feng

*/

@MapperScan(“com.feng.dao”)

@Configuration

public class MybatisConfig {

}

使用MapperScan用于指定dao层位置。

这个时候我们已经可以通过注入的方式使用UserDao来查询用户数据了,但为了规范,我们在dao层之上增加一个service层,编写UserService接口和实现类

package com.feng.service;

import com.feng.entity.User;

import database.support.Pager;

import java.util.List;

/**

  • Created by Feng

*/

public interface UserService {

public User getUserByID(int id);

public int removeUserByID(int id);

public User loadUserByUserName(String userName);

public List getUser(Pager pager,User user);

public List getUser(User user);

}

package com.feng.service;

import com.feng.dao.UserDao;

import com.feng.entity.User;

import database.support.Pager;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

/**

  • Created by Feng

*/

@Service

public class UserServiceImpl implements UserService {

@Resource

private UserDao userDao;

@Override

public User getUserByID(int id) {

User queryUser = new User();

queryUser.setId(id);

List users = userDao.getUser(queryUser);

if(users != null && users.size() > 0){

return users.get(0);

}

return null;

}

@Override

public int removeUserByID(int id) {

return 0;

}

@Override

public User loadUserByUserName(String userName) {

return userDao.loadUserByUserName(userName);

}

@Override

public List getUser(Pager pager, User user) {

return userDao.getUser(pager,user);

}

@Override

public List getUser(User user) {

return userDao.getUser(user);

}

}

创建启动类和junit测试类

package com.feng;

import org.springframework.boot.SpringApplication;

@SpringBootApplication

public class SpringBootWebApplication {

public static void main(String[] args){

SpringApplication.run(SpringBootWebApplication.class, args);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
tApplication

public class SpringBootWebApplication {

public static void main(String[] args){

SpringApplication.run(SpringBootWebApplication.class, args);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-Rs6JaZNM-1713414962307)]

[外链图片转存中…(img-Q9Iv81im-1713414962308)]

[外链图片转存中…(img-GfOHT77p-1713414962308)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

[外链图片转存中…(img-07Z49O2r-1713414962308)]

还有更多面试复习笔记分享如下

[外链图片转存中…(img-3PI4BXxl-1713414962308)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值