Spring Boot整合MyBatis操作过程

发布时间 - 2026-01-11 00:48:43    点击率:

1.加入mybatis-spring-boot-stater的Maven依赖

  <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.1.1</version>
    </dependency>

2.配置数据源

在src/main/resource中,application.properties配置文件中,这里面添加了一些数据库连接的信息

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3.代码注入数据源

package com.example;

import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.DispatcherServlet;
import com.alibaba.druid.pool.DruidDataSource;
import com.example.Listener.IndexListener;
import com.example.filter.IndexFilter;
import com.example.servlet.MyServlet;
@SpringBootApplication
public class SpringBootSimpleApplication {
  @Autowired
  private Environment env;
  @Bean
  public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl(env.getProperty("spring.datasource.url"));
    dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名
    dataSource.setPassword(env.getProperty("spring.datasource.password"));//密码
    dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
    dataSource.setInitialSize(2);
    dataSource.setMaxActive(20);
    dataSource.setMinIdle(0);
    dataSource.setMaxWait(60000);
    dataSource.setValidationQuery("SELECT 1");
    dataSource.setTestOnBorrow(false);
    dataSource.setTestWhileIdle(true);
    dataSource.setPoolPreparedStatements(false);
    return dataSource;
  }
  public static void main(String[] args) {
    SpringApplication.run(SpringBootSimpleApplication.class, args);
  }
}

4.增加MyBatis的配置

MyBatisConfig.java类:

package com.example.mybatis;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
@Configuration
//加上这个注解,使得支持事务
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {
  @Autowired
  private DataSource dataSource;
  @Override
  public PlatformTransactionManager annotationDrivenTransactionManager() {
    return new DataSourceTransactionManager(dataSource);
  }
  @Bean(name = "sqlSessionFactory")
  public SqlSessionFactory sqlSessionFactoryBean() {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    try {
      return bean.getObject();
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }
  @Bean
  public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

MyBatisMapperScannerConfig.java类:

package com.example.mybatis;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * 扫描mybatis的接口
 */
@Configuration
// 因为这个对象的扫描,需要在MyBatisConfig的后面注入,所以加上下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {
  @Bean
  public MapperScannerConfigurer mapperScannerConfigurer() {
    MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
    //获取之前注入的beanName为sqlSessionFactory的对象
    mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
    //指定xml配置文件的路径
    mapperScannerConfigurer.setBasePackage("com.example.mybatis.mapper");
    return mapperScannerConfigurer;
  }
}

5.mybatis接口配置,这里使用student表作为示例

使用@Mapper注解来标识一个接口为MyBatis的接口,MyBatis会自动寻找这个接口

package com.example.mybatis.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface StudentMapper {
  @Select("select * from student;")
  public List<Map<String,Object>> find();
  @Insert("insert into student(id,name,age,score_sum,score_avg) "+
      "values(#{id},'Jim',33,200,100)")
  public int insert(@Param("id")int id);
}

6.service业务层调用接口

package com.example.mybatis;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.mybatis.mapper.StudentMapper;
@Service
public class StuMybatisService {
  @Autowired
  private StudentMapper studentMapper;
  public List<Map<String,Object>> find(){
    return studentMapper.find();
  }
  public int insert(int id){
    return studentMapper.insert(id);
  }
}

7.controller控制层调用service业务层

package com.example.mybatis;
import java.util.List;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/stumybatis")
public class StuMybatisController {
  private static Logger logger = LogManager.getLogger(StuMybatisController.class);
  @Autowired
  private StuMybatisService stuMybatisService;
  @RequestMapping("/list")
  public List<Map<String,Object>> getStus(){
    logger.info("从数据库读取Student集合");
    return stuMybatisService.find();
  }
  @RequestMapping("/add")
  public void addStus(){
    logger.info("student表中入数据");
    stuMybatisService.insert(2);
  }
}

最终启动程序,进行访问:

http://localhost:8080/stumybatis/list

返回结果:

[{"score_sum":180.0,"name":"张三","id":1,"age":25,"score_avg":90.0},{"score_sum":200.0,"name":"Jim","id":2,"age":33,"score_avg":100.0}]

以上所述是小编给大家介绍的Spring Boot整合MyBatis的操作过程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# spring boot 整合mybatis  # spring boot mybatis  # 小编  # 配置文件  # 在此  # 给大家  # 这里面  # 所述  # 给我留言  # 感谢大家  # 操作过程  # 疑问请  # 有任何  # druid  # pool  # Environment  # DispatcherServlet  # alibaba  # filter  # IndexFilter  # ServletListenerRegistrationBean  # DruidDataSource 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在云主机上快速搭建多站点网站?  Laravel Session怎么存储_Laravel Session驱动配置详解  如何快速打造个性化非模板自助建站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  HTML 中动态设置元素 name 属性的正确语法详解  使用C语言编写圣诞表白程序  原生JS实现图片轮播切换效果  如何快速搭建个人网站并优化SEO?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  高端网站建设与定制开发一站式解决方案 中企动力  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  网站建设保证美观性,需要考虑的几点问题!  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何在IIS7上新建站点并设置安全权限?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何在Windows服务器上快速搭建网站?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何自定义分页视图?(Pagination示例)  如何在宝塔面板创建新站点?  如何在IIS服务器上快速部署高效网站?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  零服务器AI建站解决方案:快速部署与云端平台低成本实践  教你用AI将一段旋律扩展成一首完整的曲子  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel安装步骤详细教程_Laravel环境搭建指南  zabbix利用python脚本发送报警邮件的方法  如何用腾讯建站主机快速创建免费网站?  IOS倒计时设置UIButton标题title的抖动问题  如何在服务器上配置二级域名建站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Swift开发中switch语句值绑定模式  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  如何在IIS中新建站点并配置端口与物理路径?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  微信小程序 五星评分(包括半颗星评分)实例代码  如何在VPS电脑上快速搭建网站?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  详解阿里云nginx服务器多站点的配置  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何利用DOS批处理实现定时关机操作详解