zoukankan      html  css  js  c++  java
  • 聊聊、Mybatis集成Spring XML方式

    导航:  

    聊聊、Mybatis API  

    聊聊、Mybatis XML 

    聊聊、Mybatis集成Spring 注解方式

    聊聊、手写Mybatis XML配置方式 

    聊聊、手写Mybatis 注解配置方式 

    聊聊、手写Mybatis SpringBoot Starter

    这篇文章聊聊 Mybatis 怎么集成 Spring,也就是怎么样把 Mybatis 交给 Spring 来管理。要将 Mybatis 交给 Spring,肯定要生成 Bean,因为 Spring 就是一个 Bean 工厂,它负责对 Bean 的管理。下面看看 Mybatis 有哪些 Bean 呢?

    版本


     依赖


    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.4</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
    </dependency>
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.31</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.5</version>
    </dependency>

     项目结构 


     XML 方式管理 Bean 


    1.SqlSessionFactoryBean

    spring.xml

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true"/>
      <property name="username" value="root"/>
      <property name="password" value="root"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"/>
      <property name="mapperLocations" value="classpath*:mappers/**/*.xml" />
    </bean> 

    AccountService.java

    package org.rockcode.services;

    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.rockcode.mappers.AccountMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import java.util.List;

    @Component
    public class AccountService {

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    public void queryAll() {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      List<Object> list = sqlSession.selectList("accountMapper.queryAll");
      System.out.println(list);
    }

    }

    AccountMapper.xml

    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="accountMapper">
      <select id="queryAll" resultType="java.util.Map">
           select * from account
      </select>
    </mapper>

    上面用 SqlSessionFactoryBean 来实现,实质上是通过 mapperLocations 属性,找到所有的 xml 文件,跟第二篇文章 《聊聊、Mybatis XML 》 里面聊得 mappers 中用 resource 是一样的。这里还是用到了 mybatis 底层的 API,sqlSession.selectList("accountMapper.queryAll")。通过 SqlSessionFactory 得到 SqlSession ,然后执行后面相关操作。

    为了简化上面的操作,我们还可以用一些帮助类来实现。

    例如:SqlSessionTemplate 模板类、SqlSessionDaoSupport 帮助类。具体的实现就不一一写了。

    spring.xml 新增 SqlSessionTemplate 

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

    AccountService.java   

    @Component
    public class AccountService {

    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

    public void queryAll() {
    List<Object> list = sqlSessionTemplate.selectList("accountMapper.queryAll");
    System.out.println(list);
    }

    } 

    继承 SqlSessionDaoSupport  

    @Component
    public class AccountService  extends SqlSessionDaoSupport {

    @Autowired
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
    super.setSqlSessionTemplate(sqlSessionTemplate);
    }

    @Autowired
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
    super.setSqlSessionFactory(sqlSessionFactory);
    }

    public void queryAll() {
      
      List<Object> list = getSqlSession().selectList("accountMapper.queryAll");
      System.out.println(list);
    }

    }

    上面 setSqlSessionTemplate 和 setSqlSessionFactory,二选一。

    2.MapperFactoryBean

    spring.xml

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true"/>
      <property name="username" value="root"/>
      <property name="password" value="root"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"/>
    </bean> 

    <bean id="accountMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="org.rockcode.mappers.AccountMapper"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

    AccountService.java   

    @Component
    public class AccountService {

    @Autowired
    private AccountMapper accountMapper;

    public void queryAll() {
    List<Map<String, Object>> list = accountMapper.queryAll();
    System.out.println(list);
    }

    }

    AccountMapper.java

    public interface AccountMapper {
    @Select("select * from account")
    public List<Map<String,Object>> queryAll();
    }

    这种配置有一个缺点,每次只能配置一个 mapperInterface,如果有多个那就要配置多个 MapperFactoryBean。Mybatis 提供了几种扫描器,可以扫描包下面的多个 mapperInterface。

    <mybatis:scan base-package="org.rockcode.mappers" />

    就这个配置,可以省略上面的 MapperFactoryBean,是不是很简单。

    或者

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="org.rockcode.mappers" />
    </bean>

    这两种配置方式都可以,效果都一样。

    下一篇聊聊 Mybatis 集成 Spring 注解方式。

  • 相关阅读:
    六、使用media实现响应式布局
    五、块全屏居中
    四、圆角长方形的设计
    三、常用行内元素与块元素
    二、“…”显示超出文本
    一、CSS实现横列布局的方法总结
    window如何一键关闭所有进程程序
    纯css竟可以做出边框这样长宽度的过渡效果
    改变网页的兼容性模式
    bootstrap知识笔记
  • 原文地址:https://www.cnblogs.com/xums/p/10331365.html
Copyright © 2011-2022 走看看