Spring study notes -05 integration of Mybatis

As we mentioned earlier, Spring is not only a framework, but also a shelf for an integrated environment. In Mybatis, the core class is SqlSessionFactory, and integrating Mybatis into Spring is actually to let Spring manage SqlSessionFactory instead of us. After integration, all Mapper objects will become Beans and stored in the Spring container.

Integration steps:

1. Import dependencies, configure resource filtering

    <dependencies>
        <!--引入web会将所有的spring相关依赖全部导入-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <!--引入织入相关的依赖-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--引入Spring测试环境-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
        <!--Mybatis 相关-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--数据库连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.14</version>
        </dependency>
        <!--Mybatis、Spring整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>
        <!--Spring默认的非连接池方式-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
    </dependencies>

    <!--配置资源过滤-->
    <build>
        <resources>
            <resource>
                <!--资源目录-->
                <directory>src/main/java</directory>
                <!--要求包含的文件类型-->
                <includes>
                    <include>*.xml</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

2. Write entity classes

package com.zt.Eneity;

public class User {
    private Integer id;
    private String username;
    private String password;

    public User() {
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

[Note]: The entity class corresponds to the record in the database, so the entity class object corresponding to each record is different, we should not leave them to the Spring container for management.

3. Describe the Dao interface

package com.zt.Dao;

import com.zt.Eneity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserDao {

    Integer deleteUser(@Param("id") Integer id);
    Integer updateUser(User user);
    Integer addUser(User user);
    User findUserById(@Param("id") Integer id);
    List<User> getAllUsers();

}

4. Write Mapper file

<?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.zt.Dao.UserDao">
    <insert id="addUser" parameterType="com.zt.Eneity.User">
        insert into user(id,username,password) values (#{id},{username},#{password})
    </insert>
</mapper>

5. Integrate in the Spring configuration file

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--加载数据库连接信息文件-->
    <context:property-placeholder location="jdbc.properties"/>

    <!--Mapper扫描器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--配置要扫描的包-->
        <property name="basePackage" value="com.zt.Dao"/>
    </bean>

    <!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定使用的连接池-->
        <property name="dataSource" ref="dataSource"/>
        <!--关联Mybatis-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:com/zt/Dao/*.xml"/>
    </bean>

    <!--注册sqlSessionTemplate,关联SqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--利用构造器注入-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

</beans>

6. Create database tables

use study_mybatis;
create table u_user(
    id int(8) primary key auto_increment,
    username varchar(20),
    password varchar(20)
)charset = utf8;

7. Testing

import com.zt.Dao.UserDao;
import com.zt.Eneity.User;
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;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-config.xml")
public class TestSpring {

    @Autowired
    private UserDao userDao;

    @Test
    public void springMybatisAddUser(){
        System.out.println(userDao.addUser(new User(null,"zzt","zjm")));
    }

    @Test
    public void springMybatisDeleteUserById(){
        System.out.println(userDao.deleteUserById(2));
    }

    @Test
    public void springMybatisGetAllUsers(){
        List<User> allUsers = userDao.getAllUsers();
        for (User allUser : allUsers) {
            System.out.println(allUser);
        }
    }

    @Test
    public void springMybatisQueryUserById(){
        System.out.println(userDao.queryUserById(1));
    }

    @Test
    public void springMybatisUpdateUserById(){
        System.out.println(userDao.updateUserById(new User(1, "zjm", "zzt")));
    }

}

 

 

Guess you like

Origin blog.csdn.net/qq_39304630/article/details/112568068
Recommended