关键词

Spring整合Mybatis具体代码实现流程

下面我将介绍Spring整合Mybatis的具体代码实现流程。

第一步:导入依赖

首先,需要在项目的pom.xml文件中添加Spring和Mybatis相关的依赖。具体的依赖可以根据使用的版本和需求进行选择。

<dependencies>
    <!--Spring依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.0.6.RELEASE</version>
    </dependency>
    <!--Mybatis依赖-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.2</version>
    </dependency>
    <!--数据库驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>
</dependencies>

第二步:配置数据源

在Spring中配置数据源,可以使用Spring内置的数据源,也可以使用第三方的数据源。这里以使用Druid数据源为例进行配置。

@Configuration
public class DataSourceConfig {
    @Bean(initMethod = "init", destroyMethod = "close")
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
}

第三步:配置MyBatis

在Spring中使用Mybatis需要配置SqlSessionFactory,SqlSession等bean。这里使用Mybatis-spring提供的SqlSessionFactoryBean进行配置。

@Configuration
@MapperScan(basePackages = "com.example.mapper")
public class MybatisConfig {
    @Autowired
    private DataSource dataSource;

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath*:mapper/*.xml"));

        return sessionFactory;
    }

    @Bean
    public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

这里需要注意的是,需要指定Mapper接口所在的包路径,在本例中为com.example.mapper。同时还需要指定mapper文件的位置,这里使用通配符表示所有mapper文件都在classpath*:mapper/目录下。

第四步:配置事务

在Spring中使用事务需要配置TransactionManager和@EnableTransactionManagement注解。

@Configuration
@EnableTransactionManagement
public class TransactionConfig {
    @Autowired
    private DataSource dataSource;

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

第五步:编写Mapper接口和对应的Mapper.xml文件

在项目中编写相关的Mapper接口和对应的Mapper.xml文件,以实现对数据库的CRUD操作。这里给出一个示例。

UserMapper.java

public interface UserMapper {
    User getById(Long id);
    List<User> getAll();
    void insert(User user);
    void update(User user);
    void delete(Long id);
}

UserMapper.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.example.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.model.User">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="age" property="age" jdbcType="INTEGER"/>
    </resultMap>

    <select id="getById" resultMap="BaseResultMap">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <select id="getAll" resultMap="BaseResultMap">
        SELECT * FROM user
    </select>

    <insert id="insert">
        INSERT INTO user(name,age) VALUES (#{name},#{age})
    </insert>

    <update id="update">
        UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <delete id="delete">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

第六步:进行测试

上述配置完成后,就可以进行测试了。这里给出一个简单的测试示例。

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class UserMapperTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void getByIdTest() {
        User user = userMapper.getById(1L);
        Assert.assertNotNull(user);
        Assert.assertEquals(Long.valueOf(1L), user.getId());
        System.out.println(user);
    }

    @Test
    public void getAllTest() {
        List<User> users = userMapper.getAll();
        Assert.assertNotEquals(0, users.size());
    }

    @Test
    public void insertTest() {
        User user = new User();
        user.setName("Lucy");
        user.setAge(18);
        userMapper.insert(user);

        Assert.assertNotNull(user.getId());
    }

    @Test
    public void updateTest() {
        User user = userMapper.getById(1L);
        user.setName("Tom");
        user.setAge(20);
        userMapper.update(user);

        User updatedUser = userMapper.getById(1L);
        Assert.assertEquals(user.getName(), updatedUser.getName());
        Assert.assertEquals(user.getAge(), updatedUser.getAge());
    }

    @Test
    public void deleteTest() {
        List<User> users = userMapper.getAll();
        int count = users.size();

        userMapper.delete(1L);
        users = userMapper.getAll();
        Assert.assertEquals(count - 1, users.size());
    }
}

该测试类中使用了@Transactional注解,用于标识当前的测试方法在执行完毕后需要回滚事务。这样,就可以保证测试数据不会对数据库产生影响。

至此,Spring整合Mybatis的具体代码实现流程就完成了,您可以根据您的需求进行相应的修改和调整。

本文链接:http://task.lmcjl.com/news/7953.html

展开阅读全文