spring + mybatis整合(java配置方式)

2,173 阅读2分钟

一、导入spring 和 mybatis 的依赖。

1、spring核心容器的五个依赖、spring单元测试依赖(此依赖和spring核心版本最好一致。)

        <properties>
            <java.version>1.8</java.version>
            <spring.version>5.0.4.RELEASE</spring.version>
        </properties>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</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-test</artifactId>
            <version>5.0.4.RELEASE</version>
        </dependency>

2、 日志的依赖加入slf4j日志门面,和 logback实现。

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

3、加入mybatis 和Spring整合相关的依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--提供编程式和声明式事务的支持-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.4.RELEASE</version>
        </dependency>
        <!--提供jdbc访问数据库的支持-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>

二、Java配置方式,编写配置文件

@Configuration
@MapperScan(basePackages = "com.demo.sm.mapper")
@ComponentScan("com.demo.sm")
public class SmConfig {
    // 这里面要手动配置两个bean dataSource和SqlSessionFactory
    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/test-20180410?characterEncoding=utf-8&useSSL=true");
        ds.setUsername("root");
        ds.setPassword("root");
        ds.setInitialSize(5);
        return ds;
    }
    
    @Bean
    public SqlSessionFactory sqlSessionFactory () throws Exception{
        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        // 设置xml的映射文件位置
        sessionFactory.setMapperLocations(resourcePatternResolver.getResources("classpath:mappings/*.xml"));
        // 设置别名的包,可以在xml中直接使用user,
        sessionFactory.setTypeAliasesPackage("com.demo.sm.entity");
        return sessionFactory.getObject();
    }
}

三、在mapper 中编写UserMapper的接口,和在resources的mappings目录中编写UserMapper.xml。

1、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.demo.sm.UserMapper">
    <resultMap type="user" id="User">
        <result property="id" column="id" />
        <result property="name" column="name" />
        <result property="age" column="age" />
    </resultMap>

    <select id="getUser" parameterType="String" resultMap="User">
        select
        u.id,u.name,u.age from user u where name=#{name}
    </select>

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

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

    <delete id="deleteUser" parameterType="int">
        DELETE FROM user WHERE id=#{id}
    </delete>

</mapper>

2、UserMapper接口。

@Mapper
public interface UserMapper {
    User getUser(String name);
    void insertUser(User user);
    void deleteUser(int id);
    void updateUser(User user);
}

四、在数据库中就建一张表,只包含三个字段。测试成功。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SmConfig.class)
public class Test {
    @Autowired
    private UserService userService;
    
    @org.junit.Test
    public void test2() {
        User java = userService.getUser("java");
        System.out.println(java);
        Assert.assertNotNull(java);
    }
}