好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

一、环境准备

步骤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 管理两个第三方Bean :SqlSessionFactoryBean、MapperScannerConfigurer

说明:

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的资料请关注其它相关文章!

原文链接:https://juejin.cn/post/7107256514745729055

查看更多关于Spring利用注解整合Mybatis的方法详解的详细内容...

  阅读:19次