文章目录1.整合MyBatis1.需求分析2.数据库表设计3.数据库环境配置1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换4.Mybatis基础配置1.编写映射表的bean2.MonsterMapper.java 编写mapper接口3.MonsterMapper.xml 编写mapper.xml实现mapper接口4.application.yml 扫描mapper.xml配置文件的位置5.测试5.MyBatis高级配置1.方式一在application.yml中配置mybatis.config-location指定mybatis-config.xml配置文件的位置2.方式二直接在application.yml中配置6.继续编写Service层和Controller层1.MonsterService.java2.MonsterServiceImpl.java3.测试4.MonsterController.java5.测试6.解决时间问题7.完整文件目录2.整合MyBatis-Plus1.MyBatis-Plus基本介绍2.数据库表设计3.数据库环境配置1.创建maven项目2.pom.xml 导入依赖3.application.yml 配置数据源4.DruidDataSourceConfig.java 配置类切换druid数据源5.编写启动类Application.java测试运行4.MyBatis-Plus基础配置1.编写映射表的bean2.MonsterMapper.java 编写Mapper接口3.测试接口方法使用5.MyBatis-Plus高级配置application.yml 进行配置6.继续编写Service层和Controller层1.MonsterService.java2.MonsterServiceImpl.java3.测试4.细节说明5.MonsterController.java7.细节说明1.MapperScan 扫描包下的所有Mapper启动类配置注解2.TableName bean的类名与表名不一致时使用image-202403172009519713.MyBatis引入了哪些依赖8.MyBatisX快速开发1.安装插件2.使用方式1.挑一个带小鸟的方法2.直接alt Enter3.生成sql语句4.查看生成的方法5.点击左边的小鸟就可以直接跳转到指定方法或者xml9.完整文件目录10.MyBatis-Plus小结1.整合MyBatis1.需求分析2.数据库表设计CREATE DATABASE springboot_mybatis; use springboot_mybatis; CREATE TABLE monster ( id INT NOT NULL AUTO_INCREMENT, age INT NOT NULL, birthday DATE DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, gender char(1) DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, salary DOUBLE NOT NULL, PRIMARY KEY (id) ); SELECT * FROM monster; insert into monster values(null, 20, 2000-11-11, nmwsohu.com, 男, 牛魔王, 5000.88); insert into monster values(null, 10, 2011-11-11, bgjsohu.com, 女, 白骨精, 2000.00);3.数据库环境配置1.新建maven项目2.pom.xml 引入依赖!--导入springboot父工程-- parent artifactIdspring-boot-starter-parent/artifactId groupIdorg.springframework.boot/groupId version2.5.3/version /parent !--引入相关依赖-- dependencies !--常规依赖-- !--web场景启动器-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !--lombok-- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !--引入测试场景启动器-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !--配置处理器-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-configuration-processor/artifactId optionaltrue/optional /dependency !--数据库配置-- !--引入data-jdbc数据源-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jdbc/artifactId /dependency !--mysql依赖使用版本仲裁-- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency !-- 引入 druid 依赖 -- dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.1.17/version /dependency !--MyBatis场景启动器-- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.2.2/version /dependency /dependencies3.application.yml 配置数据源数据库名用户名密码驱动是mysql8的因为上面使用了版本仲裁server:port: 8080spring:datasource: #配置数据源url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSLfalseuseUnicodetruecharacterEncodingUTF-8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver4.Application.java 编写启动类package com.sun.springboot.mybatis; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * author 孙显圣 * version 1.0 */ SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }5.测试package com.sun.springboot.mybatis; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ SpringBootTest public class ApplicationTest { //依赖注入 Resource private JdbcTemplate jdbcTemplate; Test public void t1() { //查看目前数据源 System.out.println(jdbcTemplate.getDataSource().getClass()); } }6.配置类切换druid数据源package com.sun.springboot.mybatis.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Arrays; /** * author 孙显圣 * version 1.0 */ Configuration public class DruidDataSourceConfig { //注入一个德鲁伊数据源 ConfigurationProperties(spring.datasource) //读取yaml配置文件的参数获取数据源配置 Bean public DataSource dataSource() throws SQLException { DruidDataSource druidDataSource new DruidDataSource(); druidDataSource.setFilters(stat, wall); //开启sql监控 return druidDataSource; } //配置德鲁伊监控sql功能 Bean public ServletRegistrationBean statViewServlet() { StatViewServlet statViewServlet new StatViewServlet(); ServletRegistrationBeanStatViewServlet registrationBean new ServletRegistrationBean(statViewServlet, /druid/*); //配置登录监控页面用户名和密码 registrationBean.addInitParameter(loginUsername, root); registrationBean.addInitParameter(loginPassword, root); return registrationBean; } //配置webStatFilter Bean public FilterRegistrationBean webStatFilter() { WebStatFilter webStatFilter new WebStatFilter(); FilterRegistrationBeanWebStatFilter filterRegistrationBean new FilterRegistrationBean(webStatFilter); //默认对所有 URL 请求监控 filterRegistrationBean.setUrlPatterns(Arrays.asList(/*)); //排除 URL filterRegistrationBean.addInitParameter (exclusions, *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*); return filterRegistrationBean; } }7.测试数据源是否成功切换package com.sun.springboot.mybatis; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ SpringBootTest public class ApplicationTest { //依赖注入 Resource private JdbcTemplate jdbcTemplate; Test public void t1() { //查看目前数据源 System.out.println(jdbcTemplate.getDataSource().getClass()); } }4.Mybatis基础配置1.编写映射表的beanpackage com.sun.springboot.mybatis.bean; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; /** * author 孙显圣 * version 1.0 */ Data public class Monster { private Integer id; private Integer age; JsonFormat(patternyyyy-MM-dd HH:mm:ss,timezoneGMT8) private Date birthday; private String email; private String name; private String gender; private Double salary; }2.MonsterMapper.java 编写mapper接口使用注解注入容器package com.sun.springboot.mybatis.mapper;import com.sun.springboot.mybatis.bean.Monster;import org.apache.ibatis.annotations.Mapper;/**author 孙显圣version 1.0*/Mapper //将接口注入容器public interface MonsterMapper {public Monster getMonsterById(Integer id);}3.MonsterMapper.xml 编写mapper.xml实现mapper接口使用namespace指定要实现的接口?xml version1.0 encodingUTF-8 ? select * from monster where id #{id}4.application.yml 扫描mapper.xml配置文件的位置扫描类路径下mapper文件夹下的所有文件mybatis:#指定要扫描的mapper.xmlmapper-locations: classpath:mapper/*.xml5.测试package com.sun.springboot.mybatis; import com.sun.springboot.mybatis.bean.Monster; import com.sun.springboot.mybatis.mapper.MonsterMapper; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ SpringBootTest public class ApplicationTest { //依赖注入 Resource private JdbcTemplate jdbcTemplate; //注意这里注入的是MonsterMapper的代理对象 Resource private MonsterMapper monsterMapper; Test public void t1() { //查看目前数据源 System.out.println(jdbcTemplate.getDataSource().getClass()); } Test public void t2() { //测试mybatis Monster monsterById monsterMapper.getMonsterById(1); System.out.println(monsterById); } }5.MyBatis高级配置1.方式一在application.yml中配置mybatis.config-location指定mybatis-config.xml配置文件的位置2.方式二直接在application.yml中配置mybatis: #指定要扫描的mapper.xml mapper-locations: classpath:mapper/*.xml #配置类型别名包这样只要在这个包下的类型都可以简写 type-aliases-package: com/sun/springboot/mybatis/bean #输出日志 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl6.继续编写Service层和Controller层1.MonsterService.javapackage com.sun.springboot.mybatis.service; import com.sun.springboot.mybatis.bean.Monster; /** * author 孙显圣 * version 1.0 */ public interface MonsterService { public Monster getMonsterById(Integer id); }2.MonsterServiceImpl.javapackage com.sun.springboot.mybatis.service.Impl; import com.sun.springboot.mybatis.bean.Monster; import com.sun.springboot.mybatis.mapper.MonsterMapper; import com.sun.springboot.mybatis.service.MonsterService; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ Service public class MonsterServiceImpl implements MonsterService { Resource private MonsterMapper monsterMapper; //返回代理对象 Override public Monster getMonsterById(Integer id) { return monsterMapper.getMonsterById(id); } }3.测试package com.sun.springboot.mybatis; import com.sun.springboot.mybatis.bean.Monster; import com.sun.springboot.mybatis.mapper.MonsterMapper; import com.sun.springboot.mybatis.service.MonsterService; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ SpringBootTest public class ApplicationTest { //依赖注入 Resource private MonsterService monsterService; Test public void getMonsterById() { Monster monsterById monsterService.getMonsterById(1); System.out.println(monsterById); } }4.MonsterController.javapackage com.sun.springboot.mybatis.Controller; import com.sun.springboot.mybatis.bean.Monster; import com.sun.springboot.mybatis.service.MonsterService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ Controller public class MonsterController { Resource private MonsterService monsterService; GetMapping(/getMonster/{id}) //路径参数的请求 ResponseBody //响应一个json public Monster getMonsterById(PathVariable(id) Integer id) { Monster monsterById monsterService.getMonsterById(id); return monsterById; } }5.测试6.解决时间问题7.完整文件目录2.整合MyBatis-Plus1.MyBatis-Plus基本介绍2.数据库表设计CREATE DATABASE springboot_mybatisplus; USE springboot_mybatisplus; CREATE TABLE monster ( id INT NOT NULL AUTO_INCREMENT, age INT NOT NULL, birthday DATE DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, gender CHAR(1) DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, salary DOUBLE NOT NULL, PRIMARY KEY (id) ); SELECT * FROM monster; INSERT INTO monster VALUES(NULL, 20, 2000-11-11, xzjsohu.com, 男, 蝎 子 精 , 15000.88); INSERT INTO monster VALUES(NULL, 10, 2011-11-11, ytjsohu.com, 女, 玉 兔 精 , 18000.88);3.数据库环境配置1.创建maven项目2.pom.xml 导入依赖!--导入springboot父工程-- parent artifactIdspring-boot-starter-parent/artifactId groupIdorg.springframework.boot/groupId version2.5.3/version /parent !--引入相关依赖-- dependencies !--常规依赖-- !--web场景启动器-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !--lombok-- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !--引入测试场景启动器-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !--配置处理器-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-configuration-processor/artifactId optionaltrue/optional /dependency !--数据库配置-- !--mysql依赖使用版本仲裁-- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency !-- 引入 druid 依赖 -- dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.1.17/version /dependency !--引入MyBatis-Plus场景启动器会自动引入jdbc和MyBatis-- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.4.3/version /dependency /dependencies3.application.yml 配置数据源数据库名称用户名密码server:port: 8080spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSLfalseuseUnicodetruecharacterEncodingUTF-8username: rootpassword: root4.DruidDataSourceConfig.java 配置类切换druid数据源package com.sun.springboot.mybatisplus.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Arrays; /** * author 孙显圣 * version 1.0 */ Configuration public class DruidDataSourceConfig { //注入一个德鲁伊数据源 ConfigurationProperties(spring.datasource) //读取yaml配置文件的参数获取数据源配置 Bean public DataSource dataSource() throws SQLException { DruidDataSource druidDataSource new DruidDataSource(); druidDataSource.setFilters(stat, wall); //开启sql监控 return druidDataSource; } //配置德鲁伊监控sql功能 Bean public ServletRegistrationBean statViewServlet() { StatViewServlet statViewServlet new StatViewServlet(); ServletRegistrationBeanStatViewServlet registrationBean new ServletRegistrationBean(statViewServlet, /druid/*); //配置登录监控页面用户名和密码 registrationBean.addInitParameter(loginUsername, root); registrationBean.addInitParameter(loginPassword, root); return registrationBean; } //配置webStatFilter Bean public FilterRegistrationBean webStatFilter() { WebStatFilter webStatFilter new WebStatFilter(); FilterRegistrationBeanWebStatFilter filterRegistrationBean new FilterRegistrationBean(webStatFilter); //默认对所有 URL 请求监控 filterRegistrationBean.setUrlPatterns(Arrays.asList(/*)); //排除 URL filterRegistrationBean.addInitParameter (exclusions, *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*); return filterRegistrationBean; } }5.编写启动类Application.java测试运行package com.sun.springboot.mybatisplus; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * author 孙显圣 * version 1.0 */ SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }4.MyBatis-Plus基础配置1.编写映射表的beanpackage com.sun.springboot.mybatisplus.bean; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; /** * author 孙显圣 * version 1.0 */ Data public class Monster { private Integer id; private Integer age; JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8) private Date birthday; private String email; private String name; private String gender; private Double salary; }2.MonsterMapper.java 编写Mapper接口package com.sun.springboot.mybatisplus.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sun.springboot.mybatisplus.bean.Monster; import org.apache.ibatis.annotations.Mapper; /** * author 孙显圣 * version 1.0 */ //直接继承BaseMapper接口 Mapper //注入容器 public interface MonsterMapper extends BaseMapperMonster { //如果提供的方法不够用再自定义方法 }3.测试接口方法使用package com.sun.springboot.mybatisplus; import com.sun.springboot.mybatisplus.bean.Monster; import com.sun.springboot.mybatisplus.mapper.MonsterMapper; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ SpringBootTest public class MonsterMapperTest { //注入针对Mapper接口的代理对象 Resource private MonsterMapper monsterMapper; Test public void t1() { Monster monster monsterMapper.selectById(1); System.out.println(monster); } }5.MyBatis-Plus高级配置application.yml 进行配置#进行mybatis-plus配置 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl6.继续编写Service层和Controller层1.MonsterService.javapackage com.sun.springboot.mybatisplus.service.Impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sun.springboot.mybatisplus.bean.Monster; import com.sun.springboot.mybatisplus.mapper.MonsterMapper; import com.sun.springboot.mybatisplus.service.MonsterService; import org.springframework.stereotype.Service; /** * 这里 * author 孙显圣 * version 1.0 */ Service public class MonsterServiceImpl extends ServiceImplMonsterMapper, Monster implements MonsterService { //自定义方法实现 }2.MonsterServiceImpl.javapackage com.sun.springboot.mybatisplus.service.Impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sun.springboot.mybatisplus.bean.Monster; import com.sun.springboot.mybatisplus.mapper.MonsterMapper; import com.sun.springboot.mybatisplus.service.MonsterService; import org.springframework.stereotype.Service; /** * 这里 * author 孙显圣 * version 1.0 */ Service public class MonsterServiceImpl extends ServiceImplMonsterMapper, Monster implements MonsterService { //自定义方法实现 }3.测试package com.sun.springboot.mybatisplus; import com.sun.springboot.mybatisplus.bean.Monster; import com.sun.springboot.mybatisplus.mapper.MonsterMapper; import com.sun.springboot.mybatisplus.service.MonsterService; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ SpringBootTest public class MonsterServiceTest { Resource private MonsterService monsterService; Test public void t1() { Monster byId monsterService.getById(2); System.out.println(byId); } }4.细节说明简单来说就是MonsterServiceImpl只需要实现MonsterService接口的方法可以调用IService接口的方法,也可以调用MonsterService接口的方法5.MonsterController.javapackage com.sun.springboot.mybatisplus.controller; import com.sun.springboot.mybatisplus.bean.Monster; import com.sun.springboot.mybatisplus.service.MonsterService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; /** * author 孙显圣 * version 1.0 */ Controller public class MonsterController { Resource //注入的是MonsterServiceImpl的bean对象可以直接调用IService接口的方法 private MonsterService monsterService; GetMapping(/getMonster/{id}) ResponseBody public Monster getMonsterById(PathVariable(id) Integer id) { Monster byId monsterService.getById(id); return byId; } }7.细节说明1.MapperScan 扫描包下的所有Mapper启动类配置注解2.TableName bean的类名与表名不一致时使用3.MyBatis引入了哪些依赖8.MyBatisX快速开发1.安装插件2.使用方式1.挑一个带小鸟的方法2.直接alt Enter3.生成sql语句4.查看生成的方法5.点击左边的小鸟就可以直接跳转到指定方法或者xml9.完整文件目录10.MyBatis-Plus小结