Spring + MyBatis 基础项目整合案例

本文介绍了一个Spring与MyBatis整合的基础项目,包括使用IntelliJ IDEA创建Maven项目,配置pom.xml文件,编写Controller、Service、Dao层代码及对应的XML映射文件,展示了Druid数据源的配置,以及MyBatis的配置和Mapper映射文件的使用。

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

Spring + MyBatis 整合基础项目

此处使用 Intellij IDEA 和 Maven 进行项目的构建。

首先使用 IDEA 创建 Maven 项目:

选择 New Project 选择如下,不需要选择 Create from archetype,一路选择 Next 并填入 groupId 和 artifactId 等信息:
create with maven
创建完成后项目结构如下:
project structure
配置文件,Mapper.xml 等静态资源需要放置在 resources 文件夹下,因为 DAO 层接口对应的 Mapper 文件一般需要放在与对应接口同一个包名下,因此在 resources 文件夹下新建一个和 DAO 层包名结构相同的文件夹放置 DAO 层接口对应的 xml 映射文件。

修改 pom.xml 文件加入需要的依赖

pom.xml 内容文件如下:

<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.delicate</groupId>
    <artifactId>spring5_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13-beta-2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.13</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>
</project>
  • log4j 是答应相关报错信息需要的依赖包,对应的需要一个 log4j.properties 配置文件
编写相关 Controller, Service,Dao 代码及其需要的 xml 映射文件

HelloController.java 内容:

package com.delicate.spring5_demo.controller;

import com.delicate.spring5_demo.bean.User;
import com.delicate.spring5_demo.service.HelloService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class HelloController {
    @Autowired
    private HelloService helloServiceImpl;

    @Test
    public void test() {
        User user = helloServiceImpl.findUserById(1);
        System.out.println(user);
    }
}

这里为了最后直接在 HelloController 中编写测试代码加入了
@ContextConfiguration(locations = "classpath:applicationContext.xml")@RunWith(SpringJUnit4ClassRunner.class)是运行在此类下的 Test 时,为使其自动加载 applicationContext.xml 中 Spring 的相关配置而添加的注解。

applicationContext.xml 文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.1.xsd">

    <context:component-scan base-package="com.delicate.spring5_demo.*"/>

    <context:property-placeholder location="classpath:db.properties"/>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="yourpassword"/>

        <property name="filters" value="stat"/>

        <property name="maxActive" value="20"/>
        <property name="initialSize" value="1"/>
        <property name="maxWait" value="60000"/>
        <property name="minIdle" value="1"/>

        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <property name="minEvictableIdleTimeMillis" value="300000"/>

        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>

        <property name="poolPreparedStatements" value="true"/>
        <property name="maxOpenPreparedStatements" value="20"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!--
        mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory

        basePackage:指定sql映射文件/接口所在的包(自动扫描)
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.delicate.spring5_demo.dao"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

    <!--
        事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源
    -->
    <bean id="txManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

这里使用 Alibaba 的 Druid 作为数据源。

mybatis-config.xml 文件内容:

<?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>
    <mappers>
        <mapper resource="com/delicate/spring5_demo/dao/HelloDaoMapper.xml"/>
    </mappers>
</configuration>

mybatis-config.xml 文件是 MyBatis 需要的配置文件,其中写入 mappers 标签配置 DAO 层需要的 *Mapper.xml 文件即可。

HelloService.java 文件内容:

package com.delicate.spring5_demo.service;

import com.delicate.spring5_demo.bean.User;

public interface HelloService {
    User findUserById(int id);
}

HelloServiceImpl.java 文件内容:

package com.delicate.spring5_demo.service.impl;

import com.delicate.spring5_demo.bean.User;
import com.delicate.spring5_demo.dao.HelloDao;
import com.delicate.spring5_demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class HelloServiceImpl implements HelloService {
    @Autowired
    private HelloDao helloDao;

    public User findUserById(int id) {
        return helloDao.findUserById(id);
    }
}

HelloDao.java 文件内容:

package com.delicate.spring5_demo.dao;

import com.delicate.spring5_demo.bean.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface HelloDao {
    User findUserById(@Param("id") int id);
}

Dao 层接口使用 MyBatis 通过 Mapper 映射文件的方式自动实现,因此不再需要实现类。

HelloDao 对应映射文件 HelloDaoMapper.xml 文件内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.delicate.spring5_demo.dao.HelloDao">
    <select id="findUserById" resultType="com.delicate.spring5_demo.bean.User" parameterType="int">
        select * from user where id=#{id}
    </select>
</mapper>

*Mapper.xml 文件select 标签 id 对应 Dao 接口中的一个方法名,该方法的实现就在对应映射文件中的标签下(此处为 select 标签),resultType 即对应数据需要包装成的 bean 类的全路径,注意 User 类的成员变量需要与数据库中域和名字完全一致。

至此,运行 HelloController 下的 Junit 测试 test(), 查询数据库成功如下,完成整合:
success result
有什么我没讲清楚的地方欢迎提问呀,一起学习,O(∩_∩)O谢谢
PS:另外,需要的话,源码我放到 GitHub 上了:spring5_demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值