Spring利用注解整合Mybatis的方法详解

目录
  • 一、环境准备
    • 步骤1:数据库相关
    • 步骤2:导入jar包
    • 步骤3:创建模型类
    • 步骤4:创建Dao接口和实现类
    • 步骤5:创建Service接口和实现类
    • 步骤6:添加jdbc.properties文件
    • 步骤7:添加Mybatis核心配置文件
    • 步骤8:编写测试程序
  • 二、整合思路分析
  • 三、整合步骤
    • 步骤1:导入整合jar包
    • 步骤2:创建数据源配置类
    • 步骤3:创建Mybatis配置类
    • 步骤4:创建Spring主配置类
    • 步骤5:编写运行程序

一、环境准备

步骤1:数据库相关

建库建表

创建spring_db数据库,tb_user表

create database spring_db character set utf8;
use spring_db;
create table tb_user(
    id int primary key auto_increment,
    name varchar(35),
    age int
);

插入数据

添加几条实验数据

INSERT INTO spring_db.tb_user (name, age) VALUES ('bighorn', 18);
INSERT INTO spring_db.tb_user (name, age) VALUES ('大角牛', 20);
INSERT INTO spring_db.tb_user (name, age) VALUES ('倔强的牛角', 100);

步骤2:导入jar包

创建Maven工程,在pom.xml文件导入相关依赖

    <dependencies>
        <dependency>
            <!--springframework框架-->
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <!--JDK9 以后需要导的注解依赖-->
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--Mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <!--Druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

步骤3:创建模型类

根据tb_user表字段,创建User模型类

public class User {
    private Integer id;
    private String name;
    private Integer age;
   //省略setter和getter方法
}

步骤4:创建Dao接口和实现类

创建简单的UserDao接口UserDaoImpl实现类,里面就一个查询方法。

/*UserDao接口*/
public interface UserDao {
    @Select("select * from tb_user where id = #{id} ")
    User findById(Integer id);
}
/*UserDaoImpl实现类*/
@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public User findById(Integer id) {
        return null;
    }
}

步骤5:创建Service接口和实现类

创建简单的UserService接口UserServiceImpl实现类

/*UserService接口*/
public interface UserService {
    void findById(Integer id);
}
/*UserServiceImpl实现类*/
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public void findById(Integer id) {
        User user = userDao.findById(id);
        System.out.println("id为" + id + "的用户姓名:" + user.getName());
        System.out.println("id为" + id + "的用户年龄:" + user.getAge());
    }
}

步骤6:添加jdbc.properties文件

resources目录下添加jdbc.properties文件,用于配置数据库连接四要素

# 注册驱动,可以缺省,会根据url自动识别
jdbc.driver=com.mysql.cj.jdbc.Driver
# 数据库连接地址
jdbc.url=jdbc:mysql://localhost:3306/spring_db
# 数据库管理员名称
jdbc.username=root
# 数据库密码
jdbc.password=123456

步骤7:添加Mybatis核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--读取properties配置文件-->
    <properties resource="jdbc.properties"/>
    <!--别名扫描的包路径-->
    <typeAliases>
        <package name="com.bighorn.pojo"/>
    </typeAliases>
    <!--配置数据源-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射文件扫描包路径-->
    <mappers>
        <package name="com.bighorn.dao"/>
    </mappers>
</configuration>

步骤8:编写测试程序

public static void main(String[] args) throws IOException {
    //1.加载mybatis的核心配置文件
    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    //2.获取 SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //3. 获取SqlSession对象,用它来执行sql
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //4.获取userMapper接口的代理对象
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    //5.执行查询,获取结果User
    User user = userDao.findById(1);
    System.out.println(user);
    //6. 释放资源
    sqlSession.close();
}

运行结果截图

说明环境配置没有问题

二、整合思路分析

以上流程可以全部移交给Spring来处理

其中有两个重要的整合

  • Spring要管理MyBatis中的SqlSessionFactory
  • Spring要管理Mapper接口的扫描

注解整合 MyBatis 的开发步骤

  • 修改 mybatis 外部配置文件格式为注解格式;
  • 业务类使用 @Component 或其衍生注解声明 bean,使用 @Autowired 注入对象;
  • 建立配置文件 DataSourceConfig与 MyBatisConfig 类,并将其导入到核心配置类 SpringConfig;
  • 开启注解扫描;
  • 使用 AnnotationConfigApplicationContext 对象加载配置项。

三、整合步骤

步骤1:导入整合jar包

mybatis-spring是Mybatis提供的Spring与Mybatis整合的jar包

<dependency>
    <!--Spring操作数据库需要该jar包-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>
<dependency>
    <!--
  Mybatis提供的Spring与Mybatis整合的jar包
 -->
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
</dependency>

步骤2:创建数据源配置类

创建DataSourceConfig类,完成Druid数据源的创建

/*数据源配置类*/
// 加载jdbc.properties配置文件
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
    //用SpEl表达式将属性注入
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    // 将方法的返回值放置Spring容器中
    @Bean("druidDataSource")
    public DruidDataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

步骤3:创建Mybatis配置类

主要是让Spring管理两个第三方BeanSqlSessionFactoryBeanMapperScannerConfigurer

说明:

SqlSessionFactoryBean是FactoryBean的一个子类,也是mybatis-spring整合jar包中的类,该类将SqlSessionFactory的创建进行了封装,简化对象的创建,

MapperScannerConfigurer也是MyBatis提供的整合jar包中的类,用来处理原始mapper映射文件相关配置,加载数据层的Mapper(Dao)接口类。核心属性basePackage,就是用来设置所扫描的包路径

/*Mybatis配置类*/
public class MybatisConfig {
    //定义bean:SqlSessionFactoryBean,用于产生SqlSessionFactory对象
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(@Autowired DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        //设置模型类的别名扫描
        ssfb.setTypeAliasesPackage("com.bighorn.pojo");
        //设置数据源
        ssfb.setDataSource(dataSource);
        return ssfb;
    }
    //定义bean,返回MapperScannerConfigurer对象
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.bighorn.dao");
        return msc;
    }
}

步骤4:创建Spring主配置类

创建SpringConfig类,开启注解扫描、引入外部配置类(数据源配置类和Mybatis配置类)

/*Spring核心配置类*/
//配置类注解
@Configuration
//开启注解扫描功能
@ComponentScan("com.bighorn")
//引入数据源配置类和Mybatis配置类
@Import({DataSourceConfig.class,MybatisConfig.class})
public class SpringConfig {

}

步骤5:编写运行程序

在运行类中,从IoC容器中获取UserService对象,调用其方法

public static void main(String[] args) throws SQLException {
    //获取配置类初始化容器
    ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    //从容器中获取UserService对象
    UserService userService = context.getBean(UserService.class);
    //调用service的方法
    userService.findById(3);
}

运行结果如下

说明Spring整合Mybatis成功辣!

以上就是Spring利用注解整合Mybatis的方法详解的详细内容,更多关于Spring注解整合Mybatis的资料请关注我们其它相关文章!

(0)

相关推荐

  • Spring整合Mybatis实操分享

    目录 Mybatis的基本工作原理 分析需要解决的问题 Spring中Bean的产生过程 解决问题 总结 在介绍Spring整合Mybatis原理之前,我们得先来稍微介绍Mybatis的工作原理. Mybatis的基本工作原理 在Mybatis中,我们可以使用一个接口去定义要执行sql,简化代码如下: 定义一个接口,@Select表示要执行查询sql语句. public interface UserMapper { @Select("select * from user where id = #

  • SpringBoot MyBatis保姆级整合教程

    目录 Spring Boot整合MyBatis 数据准备 创建项目引入相应的启动器 编写与数据库表 编写配置文件 注解方式整合Mybatis 配置文件的方式整合MyBatis 创建接口类 创建XML映射文件 配置XML映射文件路径 编写单元测试进行接口方法测试 Spring Boot整合MyBatis MyBatis 是一款优秀的持久层框架,Spring Boot官方虽然没有对MyBatis进行整合,但是MyBatis团队自行适配了对应的启动器,进一步简化了使用MyBatis进行数据的操作 基础

  • SpringBoot整合Mybatis-plus的具体过程使用

    目录 1.MyBatisX插件 2.引入依赖 3.编写配置 4.编写接口 5.运行测试 6.完整代码 1.MyBatisX插件 在使用mybatis或者mybatis-plus时,我们可以安装IDEA的MyBatis的插件 - MyBatisX, 这样我们就可以实现点击接口跳转到sql文件, 点击sql文件可以跳转到接口的功能, 很方便.这个插件的功能还有很多, 可以查看MyBatis-Plus官网 安装方法:打开 IDEA,进入 File -> Settings -> Plugins -&g

  • Spring和Mybatis整合的原理详解

    目录 前言 简单猜想 案例搭建 通过扫描接口 正式开始 setBeanName setApplicationContext afterProperties postProcessBeanDefinitionRegistry 总结 前言 最近读完了Spring的IOC部分的源码,受益匪浅,这篇文章讲解一下MyBatis是如何做到与Spring整合的.MyBatis是如何做到干扰Spring的生命周期,把Mapper一个个的注册到Spring容器中的将在这里揭秘. 简单猜想 因为阅读过Spring源

  • Mybatis插件扩展及与Spring整合原理分析

    前言 前面几篇文章分析了Mybatis的核心原理,但模块较多,没有一一分析,更多的需要读者自己下来研究.不过Mybatis的插件扩展机制还是非常重要的,像PageHelper就是一个扩展插件,熟悉其扩展原理,才能更好的针对我们的业务作出更合适的扩展.另外,现在Mybatis都是和Spring/SpringBoot一起使用,那么Mybatis又是如何与它们进行整合的呢?一切答案尽在本文之中. 正文 插件扩展 1. Interceptor核心实现原理 熟悉Mybatis配置的都知道,在xml配置中我

  • SpringBoot整合MyBatis-Plus乐观锁不生效的问题及解决方法

    目录 SpringBoot整合Myabtis-Plus 1.依赖导入 2.数据库插入 3.SpringBoot各个层次的操作 3.1.实体类 3.2.configuration 3.2.1.TableField的insert与update 3.2.2.乐观锁配置 3.3.mapper层 3.4.service层 4.控制层测试 4.1.查询所有 4.2.根据id修改信息 SpringBoot整合Myabtis-Plus 在与官网配置一致的情况下依旧无法生效,如下整合mybatis-plus 1.

  • springboot整合mybatis的超详细过程(配置模式+注解模式)

    目录 一.简单介绍 二具体配置 2.1.配置相关的依赖. 2.2 写.mapper.controller.service 2.2.1mapper文件 2.2.2service文件 2.2.2controller文件 2.3配置相关文件 三.结果截图 四.可能遇到的报错 一.简单介绍 1.配置相关的依赖2.配置模式3写.mapper.controller.service4.配置yaml文件 配置mybatis全局配置文件(这里我使用的是配置模式+注解模式所以需要配置全局文件) 二具体配置 2.1.

  • Springboot整合mybatis开启二级缓存的实现示例

    目录 前言 mybatis 一级缓存和二级缓存的概念 pom引入依赖 application.properties 文件配置 mapper.xml 文件配置 cache-ref 完整示例代码 踩坑 参考资料 前言 下面大部分内容来源于网上的相关帖子和官网,自己简单写了个demo体验了下,个人感觉mybatis的缓存并不是很合适 查询做缓存时,遇到更新操作就会刷新缓存,尤其是多表查询时,就会很难控制.对于那些需要缓存的热数据应该抽出来放到redis上做. mybatis 一级缓存和二级缓存的概念

  • Spring利用注解整合Mybatis的方法详解

    目录 一.环境准备 步骤1:数据库相关 步骤2:导入jar包 步骤3:创建模型类 步骤4:创建Dao接口和实现类 步骤5:创建Service接口和实现类 步骤6:添加jdbc.properties文件 步骤7:添加Mybatis核心配置文件 步骤8:编写测试程序 二.整合思路分析 三.整合步骤 步骤1:导入整合jar包 步骤2:创建数据源配置类 步骤3:创建Mybatis配置类 步骤4:创建Spring主配置类 步骤5:编写运行程序 一.环境准备 步骤1:数据库相关 建库建表 创建spring_

  • SpringBoot整合mybatis的方法详解

    目录 1依赖配置 2使用 2.1SpringBoot配置整合mybatis: 2.2SpringBoot注解整合mybatis: 2.3在配置类上增加@MapperScan注解,扫描某个包下的全部Mapper文件: 总结 1 依赖配置 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> &l

  • springBoot整合rabbitMQ的方法详解

    引入pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0

  • SpringBoot实现整合微信支付方法详解

    目录 1.准备工作 1.1 数据库表 1.2 实体类 1.3 导入依赖 1.4 配置文件 1.5 创建读取微信支付相关信息的工具类 1.6 其他工具类 2.生成订单 2.1 远程调用用户模块和课程模块 2.2 远程调用方法的实现 2.3 根据课程id和用户id生成订单 3.查询订单信息 3.1 controller层 3.2 service层 4.生成微信支付的二维码 4.1 controller层 4.2 service层 5.查询订单支付状态 5.1 controller层 5.2 serv

  • Spring Bean注册与注入实现方法详解

    目录 1. 逻辑上的 Bean 注册 2. XML 注册 Bean 到自建的库中 2.1 工厂方法 2.2 使用工厂方法和实例化工厂注册 Bean 3. XML 配合注解进行 Bean 注册 4. 使用注解注册 Bean 4.1 注解方式注册的必要条件 4.2 用到的注解 4.3 @Component注解注入 4.4 使用 @Bean 注解注册 5. 通过注解注入 Bean 6. 注入时的一个坑点 7. 获取 库中的对象 上接[Spring]spring核心思想——IOC和DI 上篇文章结尾简单

  • Spring boot注解@Async线程池实例详解

    这篇文章主要介绍了Spring boot注解@Async线程池实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从Spring3开始提供了@Async注解,该注解可以被标注在方法上,以便异步地调用该方法.调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行. 1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent

  • Spring实现声明式事务的方法详解

    1.回顾事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎! 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性. 事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. 事务四个属性ACID 原子性(atomicity) 事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用. 一致性(consistency) 一旦所有事务动作完成,事务就要被提交.数据和资源处于一种满足业务规则的一致性状态中.

  • Spring Boot 控制层之参数传递方法详解

    当然,您自己创建一个项目也是可以的. bean包下的Student.java package com.example.demo.bean; public class Student { private Integer id; //学号 private String name; //姓名 public Student() { } public Student(Integer id, String name) { this.id = id; this.name = name; } public In

  • SpringBoot整合Shiro的方法详解

    目录 1.Shito简介 1.1 什么是shiro 1.2 有哪些功能 2.QuickStart 3.SpringBoot中集成 1.导入shiro相关依赖 2.自定义UserRealm 3.定义shiroConfig 4.新建页面进行测试 1.Shito简介 1.1 什么是shiro Apache Shiro是一个java安全(权限)框架 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在javase环境,也可以用在javaee环境 shiro可以完成,认证,授权,加密,会话管理,we

  • Spring Security动态权限的实现方法详解

    目录 1. 动态管理权限规则 1.1 数据库设计 1.2 实战 2. 测试 最近在做 TienChin 项目,用的是 RuoYi-Vue 脚手架,在这个脚手架中,访问某个接口需要什么权限,这个是在代码中硬编码的,具体怎么实现的,松哥下篇文章来和大家分析,有的小伙伴可能希望能让这个东西像 vhr 一样,可以在数据库中动态配置,因此这篇文章和小伙伴们简单介绍下 Spring Security 中的动态权限方案,以便于小伙伴们更好的理解 TienChin 项目中的权限方案. 1. 动态管理权限规则 通

随机推荐