【Maven配置四】配置Spring+整合MyBatis实现动态扫描开发

本文详细介绍如何使用Maven配置Spring框架,实现与MyBatis的整合,包括动态扫描mapper接口,配置c3p0连接池,以及通过JUnit测试访问数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring框架是一个开放源代码的J2EE应用程序框架,它使得我们的开发过程更简单,可以大大减少工作量,提高效率。spring具有轻量化、ioc(控制反转)、aop(面向切面编程)思想、mvc模式等特性,在企业中被广泛使用。

今天我们使用Maven完成spring的配置以及和MyBatis的整合。


动态扫描过程图

ApplicationContext
DataSource连接池
SqlSessionFactory
MapperScannerConfiurer动态扫描器
Mapper接口
Mapper配置
后续操作...

配置xml

配置pom.xml

pom.xml中加入properties,指定spring版本:

<properties>
  <spring.version>5.0.2.RELEASE</spring.version>
</properties>

<dependencies>中引入spring的全部包、mybatis以及mybatis-spring整合包、c3p0连接池、mysql数据库驱动、

<dependency>   
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency> 
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.0</version>
</dependency>

<dependency>
  <groupId>mysql</groupId> 
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.17</version>
</dependency>
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.2</version>
</dependency>

配置ApplicationContext.xml

resources目录中创建ApplicationContext.xml,引入以下内容:

mybatis-spring.jar提供了很多方便的类:

  • SqlSessionFactoryBean可以直接配置SqlSessionFactory而不需要我们提供mybatis-config.xml配置文件。
    需要参数dataSource: 提供一个连接池
  • MapperScannerConfigurer会自动扫描mapper包内的所有mapper映射文件,使得我们直接一步直接获得mapper接口
    它会自动读取ApplicationContext.xml中配置的SqlSessionFactoryBean工厂类,并自动生成所有的mapper接口
    需要参数basePackage: 指定mapper包的位置
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

  <!-- 配置c3p0连接池 -->
  <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbcUrl"
              value="jdbc:mysql://localhost:3306/hello_mysql?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
    <property name="user" value="root"/>
    <property name="password" value="123"/>
  </bean>

  <!-- 配置SqlSessionFactory -->
  <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
  </bean>

  <!-- 配置MapperScannerConfigur动态扫描 -->
  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="mapper"/>
  </bean>
</beans>

通过mybatis-spring的整合,我们就不需要再配置mybatis-config.xml了。


提供bean和mapper

要实现动态扫描开发,我们需要提供一个bean实现类,并且提供mapper接口和对应的mapper.xml配置文件。

笔者这里直接使用MyBatis Generator生成了bean(pojo)实现类和mapper配置文件以及mapper接口:

pojo/Users中生成的实现类:

package pojo;

public class Users {
  private Integer id;
  String name;
  private Integer age;

  public Users(Integer id, String name, Integer age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }

  public Users() {
    super();
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name == null ? null : name.trim();
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return id + ", " + name + ", " + age;
  }
}

mapper/UsersMapper中生成的接口文件,MyBatis Generator为我们自动生成了各种方法:

package mapper;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import pojo.Users;
import pojo.UsersExample;

public interface UsersMapper {
    long countByExample(UsersExample example);
    int deleteByExample(UsersExample example);
    int deleteByPrimaryKey(Integer id);
    int insert(Users record);
    int insertSelective(Users record);
    List<Users> selectByExample(UsersExample example);
    Users selectByPrimaryKey(Integer id);
    int updateByExampleSelective(@Param("record") Users record, @Param("example") UsersExample example);
    int updateByExample(@Param("record") Users record, @Param("example") UsersExample example);
    int updateByPrimaryKeySelective(Users record);
    int updateByPrimaryKey(Users record);
}

实现访问数据库

基于mybatis-spring下的动态扫描开发,要访问数据库非常简单,笔者此处实现了一个UsersTest类,使用junit进行测试,只需3行代码我们就可以访问数据库并返回数据了:

package test;

import mapper.UsersMapper;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pojo.Users;

public class UsersTest {
  @Test
  public void test1() {
    //读取spring配置文件
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
    //得到mapper映射接口
    UsersMapper mapper = applicationContext.getBean(UsersMapper.class);
    //执行mapper中的操作
    Users user = mapper.selectByPrimaryKey(1);
    //输出结果
    System.out.println(user);
  }
}

测试成功,控制台中正确返回了结果(此处DEBUG数据来自log4j):

DEBUG [main] - JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@410ae9a3 [wrapping: com.mysql.cj.jdbc.ConnectionImpl@319988b0]] will not be managed by Spring
DEBUG [main] - ==>  Preparing: select id, name, age from users where id = ? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7d3430a7]
DEBUG [main] - Returning JDBC Connection to DataSource
1, Adam, 13

完整目录(此处service包可忽略):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值