【Spring从入门到出家】5 - 整合MyBatis

10 mybatis-spring

mybatis-spring官网:http://mybatis.org/spring/zh/index.html
这是spring如何整合mybatis的官网,和mybatis官网有点类似

10.1 回顾Mybatis

实例
搭建数据库环境

  1. 创建数据库spring_mybatis
mysql> CREATE DATABASE spring_mybatis;
Query OK, 1 row affected (0.08 sec)
  1. 创建测试表user
mysql> USE spring_mybaits;
mysql> CREATE TABLE user(
    -> user_id INT PRIMARY KEY AUTO_INCREMENT,
    -> user_name VARCHAR(20),
    -> user_pwd VARCHAR(20)
    -> )ENGINE=InnoDB, CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.18 sec)
  1. 插入测试数据
mysql> INSERT INTO user
    -> SELECT '张三','123456';
mysql> INSERT INTO user(user_name,user_pwd)
    -> SELECT '李四','123456';

mysql> SELECT * FROM user;
+---------+-----------+----------+
| user_id | user_name | user_pwd |
+---------+-----------+----------+
|       1 | 张三      | 123456   |
|       2 | 李四      | 123456   |
+---------+-----------+----------+

先搭建一下
4. 在pom.xml中导入依赖


    <dependencies>
        <!-- spring的包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>

        <!-- AspectJ的包 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.5</version>
        </dependency>

        <!-- mybatis的包 -->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.3</version>
       </dependency>

        <!-- MySQL连接的包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

Maven可能会到处资源错误,需要在pom.xml中加入

    <!-- 在build中配置resources,来防止我们资源导出失败的问题 -->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
  1. 创建实体类User
@Data
public class User {
    private int id;
    private String name;
    private String pwd;
}
  1. 新建一个Dao层的测试接口UserMapping
public interface UserMapping {

    List<User> getAllUser();

}

7.配置核心文件mybatis-config.xml 和配置文件db.properties

<?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>
    <properties resource="db.properties" />

    <typeAliases>
        <package name="com.cap.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/cap/dao/UserMapping.xml"/>
    </mappers>

</configuration>
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/spring_mybatis?serverTimezone=UTC
username=root
password=mysql
  1. 编写映射文件UserMapping.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.cap.dao.UserMapping">
    <resultMap id="getAllUserResultMap" type="user">
        <id property="id" column="user_id" />
        <result property="name" column="user_name" />
        <result property="pwd" column="user_pwd" />
    </resultMap>

    <select id="getAllUser" resultMap="getAllUserResultMap">
        SELECT * FROM user;
    </select>

</mapper>
  1. 编写测试方法
    @Test
    public void test(){
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapping mapper = sqlSession.getMapper(UserMapping.class);
            List<User> list = mapper.getAllUser();
            for (User user : list) {
                System.out.println(user);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

测试可得

User(id=1, name=张三, pwd=123456)
User(id=2, name=李四, pwd=123456)

10.2 Spring整合MyBatis方式一

1、引入Spring配置文件beans.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"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

2、配置数据源替换mybaits的数据源

<!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
   <property name="username" value="root"/>
   <property name="password" value="123456"/>
</bean>

这里使用Spring提供的JDBC支持,需要导入依赖

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>

也可以使用Druid,需要导入依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>
    <!-- 配置数据源,这里我们使用阿里巴巴的Druid德鲁伊 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/spring_mybatis?serverTimezone=UTC" />
        <property name="username" value="root" />
        <property name="password" value="mysql" />
    </bean>

3、配置SqlSessionFactory,关联MyBatis

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

4、注册sqlSessionTemplate,关联sqlSessionFactory;

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

5、增加Dao接口的实现类;私有化sqlSessionTemplate

public class UserMappingImpl implements UserMapping {

    SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List<User> getAllUser() {
        UserMapping mapper = sqlSession.getMapper(UserMapping.class);
        return mapper.getAllUser();
    }
}

6、注册bean实现

    <bean id="UserMappingImpl" class="com.cap.dao.UserMappingImpl" >
        <property name="sqlSession" ref="sqlSession" />
    </bean>

7、测试

   @Test
   public void test2(){
       ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
       UserMapper mapper = (UserMapper) context.getBean("userDao");
       List<User> user = mapper.selectUser();
       System.out.println(user);
  }

结果成功输出!现在我们的Mybatis配置文件的状态!发现都可以被Spring整合!

<?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>

    <typeAliases>
        <package name="com.cap.pojo"/>
    </typeAliases>

</configuration>

SqlSessionTemplate
它实现了SqlSession,是 MyBatis-Spring的核心
线程安全

10.3 Spring整合MyBatis方式二

mybatis-spring1.2.3版以上的才有这个 .

官方文档截图 :

dao继承Support类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory . 比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好 . 可跟踪源码查看
在这里插入图片描述1、将我们上面写的UserDaoImpl修改一下

public class UserMappingImpl extends SqlSessionDaoSupport implements UserMapping {

    @Override
    public List<User> getAllUser() {
        UserMapping mapper = getSqlSession().getMapper(UserMapping.class);
        return mapper.getAllUser();
    }
}

2、修改bean的配置

    <bean id="UserMappingImpl" class="com.cap.dao.UserMappingImpl" >
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

3、测试

    @Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapping userMapping = context.getBean(UserMapping.class);
        List<User> list = userMapping.getAllUser();
        for (User user : list) {
            System.out.println(user);
        }
    }

结果得到:

User(id=1, name=张三, pwd=123456)
User(id=2, name=李四, pwd=123456)

猜你喜欢

转载自blog.csdn.net/Cap220590/article/details/107342690