整合Mybatis

整合Mybatis

一、整合Mybatis

步骤

  1. 导入相关jar包

    mybatis:
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    ​
    mysql:
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.23</version>
            </dependency>
    ​
    spring相关:
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.3.4</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.3.3</version>
            </dependency>
    ​
    aspectJ AOP织入器:
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.4</version>
            </dependency>
    ​
    mybatis-spring整合包:
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.6</version>
            </dependency>
  2. 配置Maven静态资源过滤问题

    <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>
  3. 编写配置文件

  4. 代码实现

1.1 Mybatis-Spring学习

要和Spring一起使用Mybatis,需要在Spring应用上下文中定义两样东西:

  • SqlSessionFactory

  • 至少一个数据映射器类

在MyBatis-Spring中,可以使用SqlSessionFactoryBean来创建SqlSessionFactory。要配置这个工厂的bean,只需要在Spring配置中加入:

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

SqlSessionFactory需要一个DataSource(数据源)。

在基础的MyBatis中是通过SQLSessionFactoryBuilder来创建SQLSessionFactory的。在MyBatis-Spring中则是用过SQLSessionBean来创建。

SqlSessionFactory中有一个唯一的必要属性:用于JDBC的DataSource。

一个常用的属性是configLocation,他用来指定MyBatis的XML配置文件路径。通常在其内配置<setting><typeAliases>

SQLSessionTemplate是MyBatis-Spring的核心。作为SqlSession的一个实现,也就是说相当于使用它代替SqlSession。可以使用SqlSessionFactory作为构造方法的参数来创建SqlSessionTemplate对象。

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>

现在就可以将这个bean注入到java类中。

public class UserMapperImpl implements UserMapper{
​
    private SqlSessionTemplate sqlSession;
​
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

接下来注入SqlSessionTemplate

<bean id="UserMapper" class="com.aishimin.dao.UserMapperImpl">
    <property name="sqlSession" ref="sqlSession"/>
</bean>

整合实现一:

  1. 引入Spring配置文件spring-dao.xml

  2. 配置数据源替换mybatis的数据源

    <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>
  3. 配置SqlSessionFactory,关联Mybatis

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"/>
        <property name="configLocation" value="mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:com/aishimin/dao/UserMapper.xml"/>
    </bean>
  4. 注册sqlSessionTemplate,关联SqlSessionFactory

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
  5. 增加Dao接口的实现类,私有化sqlSessionTemplate

    public class UserMapperImpl implements UserMapper{
    ​
        private SqlSessionTemplate sqlSession;
    ​
        public void setSqlSession(SqlSessionTemplate sqlSession) {
            this.sqlSession = sqlSession;
        }
    ​
        @Override
        public List<User> getUserList() {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            return mapper.getUserList();
        }
    }

     

  6. 注册bean实现

    <bean id="UserMapper" class="com.aishimin.dao.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>
  7. 测试

    public class MyTest {
        @Test
        public void test() {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserMapper mapper = context.getBean("UserMapper", UserMapper.class);
            for(User user:mapper.getUserList()){
                System.out.println(user);
            }
        }
    }

整合方式二

  1. 新建UserMapperImpl2

    public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
        @Override
        public List<User> getUserList() {
            UserMapper userMapper = getSqlSession().getMapper(UserMapper.class);
            return userMapper.getUserList();
        }
    }
  1. 修改bean配置

    <bean id="UserMapper2" class="com.aishimin.dao.UserMapperImpl2">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
  2. 测试

    public class MyTest {
        @Test
        public void test() {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserMapper mapper = context.getBean("UserMapper2", UserMapper.class);
            for(User user:mapper.getUserList()){
                System.out.println(user);
            }
        }
    }
posted @ 2021-02-28 21:21  aishimin  阅读(61)  评论(0)    收藏  举报