首页 > 编程语言 > 详细

11.Spring整合Mybatis

时间:2020-07-16 23:20:05      阅读:72      评论:0      收藏:0      [点我收藏+]

11.Spring整合Mybatis

11.1 搭建基础环境(跟着官网走)

第一步:导入相关依赖

 <dependencies>
     <!--junit单元测试-->
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.13</version>
     </dependency>
     <!--mysql数据库-->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.20</version>
     </dependency>
     <!--mybatis-->
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.5.5</version>
     </dependency>
     <!--spring整合mybatis-->
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis-spring</artifactId>
         <version>2.0.5</version>
     </dependency>
     <!--日志-->
     <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.17</version>
     </dependency>
     <!--spring全套-->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>5.2.7.RELEASE</version>
     </dependency>
     <!--spring操作数据库-->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>5.2.7.RELEASE</version>
     </dependency>
     <!--织入(切入点表达式)-->
     <dependency>
         <groupId>org.aspectj</groupId>
         <artifactId>aspectjweaver</artifactId>
         <version>1.9.5</version>
     </dependency>
 </dependencies>

 

第二步: 将SqlSessionFactory注入到springIOC容器中

  • 由于spring要接管mybatis的SqlSessionFactory类所以需要注入到spring中

  • name属性可以指定mybatis相关配置文件的路径

 <!--可使用 SqlSessionFactoryBean来创建 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="com/xuan/mapper/UserMapper.xml"/>
     <!--起别名-->
     <property name="typeAliases" value="com.xuan.pojo.User"/>
 </bean>

 

第三步:SqlSessionFactory又关联到DataSource数据源,所以我们也需要将DataSource注入到spring中

  • 这里用的是Spring的数据源

  • 与此同时可以删除mybatis主配置文件的数据源

 <!--用spring的数据源配置mybatis的配置-->
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
     <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
     <property name="username" value="root"/>
     <property name="password" value="root"/>
 </bean>

 

第四步:有了SqlSessionFactory,我们可以用它创建功能几乎与SqlSession相等的SqlSessionTemplate

  • 由于该类没有set注入所以我们需要通过构造方法注入来创建sqlSessionTemplate对象并加入到springIOC容器中

 <!--SqlSessionTemplate等价于我们使用的SqlSession-->
 <!--由于没有set注入 所以我们使用构造方法注入-->
 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
     <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
 </bean>

 

第五步:编写UserMapper的实现类以将UserMapper实现类对象注入SpringIOC获得SqlSessionTemplate来执行方法

  • 通过set方法将SqlSessionTemplate注入进来

  • 调用SqlSessionTemplate参数执行方法

 package com.xuan.mapper;
 ?
 import com.xuan.pojo.User;
 import org.mybatis.spring.SqlSessionTemplate;
 ?
 import java.util.List;
 ?
 /**
  * xuan
  * 2020/7/16
  * 1870136088@qq.com
  **/
 public class UserMapperImpl implements UserMapper{
     private SqlSessionTemplate sqlSessionTemplate;
 ?
     public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
         this.sqlSessionTemplate = sqlSessionTemplate;
    }
 ?
     @Override
     public List<User> findAll() throws Exception {
         UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
         return mapper.findAll();
    }
 ?
     @Override
     public User findById(Integer id) throws Exception {
         return null;
    }
 }

 

第六步:将UserMapperImpl注入到springIOC容器中

 <!--编写实现类将SqlSessionTemplate注入-->
 <bean id="userMapperImpl" class="com.xuan.mapper.UserMapperImpl">
     <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
 </bean>

 

第七步:编写测试

 public class UserMapperTest2 {
 ?
     @Test
     public  void testFindAll() throws Exception {
 ?
         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
         UserMapper users = context.getBean( "userMapperImpl",UserMapperImpl.class);
         for (User user : users.findAll()) {
             System.out.println(user);
        }
    }
 ?
 }

-------------------------------测试成功----------------------------------

 

Spring整合Mybatis方法二

  • 关键类:SqlSessionDaoSupport

  • SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法

代码实现:

 package com.xuan.mapper;
 ?
 import com.xuan.pojo.User;
 import org.apache.ibatis.session.SqlSession;
 import org.mybatis.spring.SqlSessionTemplate;
 import org.mybatis.spring.support.SqlSessionDaoSupport;
 ?
 import java.util.List;
 ?
 public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
     @Override
     public List<User> findAll() throws Exception {
         UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
         return mapper.findAll();
    }
 ?
 }

关键配置:

 <bean id="userMapperImpl2" class="com.xuan.mapper.UserMapperImpl2">
     <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
 </bean>

 

 

总结:其实两个整合方式本质上都是一样的,我们可以看一下SqlSessionDaoSupport 类的源码。

  • private SqlSessionTemplate sqlSessionTemplate;同样都是注入SqlSessionTemplate

  • 并且对其是否存在做出判断不存在则创建(通过sqlSessionFactory创建)这也是为什么我们第二次设置实现类属性的时候是SqlSessionFactory

 public abstract class SqlSessionDaoSupport extends DaoSupport {
 ?
   private SqlSessionTemplate sqlSessionTemplate;
 ?
   /**
    * Set MyBatis SqlSessionFactory to be used by this DAO. Will automatically create SqlSessionTemplate for the given
    * SqlSessionFactory.
    *
    * @param sqlSessionFactory
    *         a factory of SqlSession
    */
   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
     if (this.sqlSessionTemplate == null || sqlSessionFactory != this.sqlSessionTemplate.getSqlSessionFactory()) {
       this.sqlSessionTemplate = createSqlSessionTemplate(sqlSessionFactory);
    }
   public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
       this.sqlSessionTemplate = sqlSessionTemplate;
  }
 }

 

11.Spring整合Mybatis

原文:https://www.cnblogs.com/xuan-study/p/13325400.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!