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

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

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

[外链图片转存中…(img-OwRj50jh-1713323632411)]

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

[外链图片转存中…(img-JwciRLfe-1713323632412)]

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

[外链图片转存中…(img-ZYOfkKLU-1713323632412)]

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

[外链图片转存中…(img-hp58Rgjp-1713323632412)]

JAVA核心知识点+1000道 互联网Java工程师面试题

[外链图片转存中…(img-nlpGEcNv-1713323632412)]

[外链图片转存中…(img-rNElzWCP-1713323632412)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

[外链图片转存中…(img-GXxUGiuP-1713323632412)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值