写点什么

【Spring 学习笔记 (十)】Spring 使用注解整合 Mybatis

作者:倔强的牛角
  • 2022 年 6 月 11 日
  • 本文字数:4285 字

    阅读完需:约 14 分钟

【Spring 学习笔记(十)】Spring 使用注解整合 Mybatis

写在前面😘

大一电子信息工程新生,请多多关照,希望能在 InfoQ 社区记录自己的学习历程!

【Spring 学习笔记】 系列教程基于 Spring 5.2.10.RELEASE讲解。

一、环境准备

步骤 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实现类*/@Repositorypublic 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实现类*/@Servicepublic 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 成功辣!


写在后面🍻

感谢观看啦✨

有什么不足,欢迎指出哦💖

发布于: 刚刚阅读数: 4
用户头像

把学问造就,还期身健行优。 2022.06.02 加入

大一在读,电子信息工程专业。 希望在InfoQ写作社区记录自己的学习历程!

评论

发布
暂无评论
【Spring 学习笔记(十)】Spring 使用注解整合 Mybatis_Java_倔强的牛角_InfoQ写作社区