之前搭建了@Select标签来做SringBoot+Mybatis的集成。这次使用@SelectProvider标签的方式搭建一次。

一、搭建SpringBoot的项目

  https://start.spring.io/自己配置SpringBoot的项目,点击“Generate Project”按钮就可以下载下来一个配置好的SpringBoot项目。

  

二、项目结构

  

三、项目代码

  demo代码实现的是对表数据的一个简单查询。

  1、pom中的mave配置

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

   2、Controller

package com.example.demo.Controller;import com.example.demo.Service.TeacherService;
import com.example.demo.entity.Teacher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TeacherController {@Autowired(required = false)TeacherService userService;@RequestMapping("selectUser")public Teacher getUserOne(String id){Teacher tea = new Teacher();tea.setId(id);Teacher teacher1 = userService.findTeacherById(tea);return teacher1;}@RequestMapping("selectUserByName")public Teacher getUserOne(String id,String name){Teacher tea=new Teacher();tea.setId(id);tea.setName(name);Teacher teacher=userService.findTeacherByName(tea);return teacher;}
}

  

  3、Service

  一个interface接口,一个Impl实现

package com.example.demo.Service;
import com.example.demo.entity.Teacher;public interface TeacherService {Teacher findTeacherById(Teacher user);Teacher findTeacherByName(Teacher user);
}

  接口实现:

package com.example.demo.ServiceImpl;import com.example.demo.Mapper.TeacherMapper;
import com.example.demo.Service.TeacherService;
import com.example.demo.entity.Teacher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;@Service
public class TeacherServiceImpl implements TeacherService {@Autowired(required = false)TeacherMapper userMapper;@Overridepublic Teacher findTeacherById(Teacher teacher) {return userMapper.findUserById(teacher);}@Overridepublic Teacher findTeacherByName(Teacher teacher) {Map<String,Object> maps=new HashMap<>();maps.put("id",teacher.getId());maps.put("name",teacher.getName());return userMapper.findUserByName(maps);}
}

   4、Mapper代码

package com.example.demo.Mapper;import com.example.demo.entity.Teacher;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.jdbc.SQL;
import java.util.Map;/*** The interface Teacher mapper.*/
@Mapper
public interface TeacherMapper {/*** The constant returnSql.*/String returnSql="id,name";/*** Find user by id teacher.** @param user the user* @return the teacher*/@SelectProvider(type = UserDaoProvider.class, method = "findTeacherById")Teacher findUserById(Teacher user);/*** Find user by name teacher.** @param map the map* @return the teacher*/@SelectProvider(type = UserDaoProvider.class, method = "findTeacherByName")Teacher findUserByName(Map<String, Object> map);/*** The type User dao provider.*/class UserDaoProvider {/*** Find teacher by id string.** @param teacher the teacher* @return the string*/public String findTeacherById(Teacher teacher) {String sql = "SELECT "+returnSql+" FROM Teacher";if(teacher.getId()!=null){sql += " where id = #{id}";}return sql;}/*** Find teacher by name string.** @param map the map* @return the string*/public String findTeacherByName(Map<String, Object> map) {String name = (String) map.get("name");return new SQL() {{SELECT(returnSql);FROM("Teacher");WHERE("name="+ name);}}.toString();}}
}

    在程序启动时,会扫描Mapper文件,所以需要在Mapper文件里添加@Mapper注解。

    还可以在main文件中添加@MapperScan()注解:

package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.example.demo.Mapper")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

   5、实体类

package com.example.demo.entity;public class Teacher {private String id;private String name;public String getId() { return id; }public void setId(String id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }
}

  

转载于:https://www.cnblogs.com/Lyh1997/p/10195183.html

SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建相关推荐

  1. SpringBoot+Mybatis 框架之 @Select注解方式搭建

    最近两天在帮同学搭建SpringBoot框架,我以往使用的是xml映射文件的方式,这次我的同学要我使用@Select注解的方式搭建的一次.感觉挺有意思的,分享给大家. 1.创建SpringBoot项目 ...

  2. mysql selectprovider_SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建

    之前搭建了@Select标签来做SringBoot+Mybatis的集成.这次使用@SelectProvider标签的方式搭建一次. 一.搭建SpringBoot的项目 https://start.s ...

  3. Springboot+Mybatis+Druid+Maven多模块项目搭建遇到的各种吭

    Springboot+Mybatis+Druid+Maven多模块项目搭建 这里记录一下搭建多模块遇到的吭 首先建立一个父级空项目,在pox里修改下配置 2,建立DaoMapper层和ModelEnt ...

  4. JAVA配置注解方式搭建简单的SpringMVC前后台交互系统

    前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...

  5. mybatis框架使用generator的快速搭建

    mybatis框架使用generator的快速搭建 首先建立一个maven项目,在idea中直接使用下图建立 然后按照以下步骤 使用generator工具快速生成,dao层,bean层,mapper层 ...

  6. mysql+xml+注释,springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)...

    一.注解方式 pom org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0 mysql mysql-connector-java org. ...

  7. 基于SpringBoot+Mybatis框架的商城秒杀项目总结

    最近做了一个以SpringBoot+Mybaits为框架前后端分离的商城秒杀项目,主要使用的工具是Idea和Maven,SpringBoot是一个功能十分强大的框架集合,里面包含了很多的框架. 工程的 ...

  8. SPringBoot+mybatis 框架搭建例子

    2019独角兽企业重金招聘Python工程师标准>>> https://blog.csdn.net/qq_33768099/article/details/79787215 转载于: ...

  9. MyBatis多参数传递之注解方式示例--转

    原文地址:http://legend2011.blog.51cto.com/3018495/1015003 若映射器中的方法只有一个参数,则在对应的SQL语句中,可以采用#{参数名}的方式来引用此参数 ...

最新文章

  1. ArcGIS API for Silverlight 入门学习笔记(三):基础地图实例
  2. html元素做3d变换,CSS 3D变换
  3. Android --- build.gradle(Module:app)中各版本号讲解,例如targetSdkVersion
  4. USACO 1.4 牛奶
  5. LeetCode Shell 192. 统计词频
  6. 如何关闭苹果手机自动扣费_教你关闭苹果手机系统的自动更新功能,旧手机还能再用几年!...
  7. archive for required library...
  8. 马斯克揭晓谜底!SpaceX大火箭将送日本富豪环月七日游
  9. 大数据分析是如何工作
  10. 【感悟】放开那条大腿,让我来!
  11. JAVA链表中的回文链表结构
  12. 实对称矩阵一定可以相似对角化
  13. STM32F103RCT6芯片架构
  14. python中msg是什么意思_MSG是什么意思?
  15. IT行业的工作内容是什么?
  16. 利用vue+高德地图API 实现用户的运动轨迹
  17. iPhone6 iPhone6 Plus 屏幕分辨率、尺寸的问题
  18. Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释
  19. DC1+2: Tcl与Design Compiler (一二)——前言+DC综合与Tcl语法结构概述+DCT/DCG+wireloadmodel+Comments
  20. 学习OpenCV——grabcut

热门文章

  1. 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)
  2. 安卓APP_ Fragment(5)—— Fragment + ViewPager2 模拟微信首页 (2)两者联动翻页
  3. 全国计算机等级考试题库二级C操作题100套(第19套)
  4. linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤
  5. 数据挖掘相关知识介绍
  6. Linux中Shell的命令替换用法笔记
  7. csv文件 内容转义_CSV文件如何同时转义逗号和双引号?
  8. JDK 8 新特性 之 Strams简单使用
  9. Java(ArrayList和LinkedList)、(HashTable与HashMap)、(HashMap、Hashtable、LinkedHashMap和TreeMap比较)
  10. 苹果复兴_类型复兴的故事:来自Type West的经验教训