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 注解方式。

  • 相关阅读:
    phpwind管理权限泄露漏洞
    CGI Hack与Webshell研究资料整理
    深入浅出net泛型编程[转载]
    加上checkbox的treeview控件源程序
    BCB消息消息机制
    开源ZPU介绍
    带复选框可以多选的组合框控件 TCheckCombobox,非常完美
    别人用delphi写的很简单实用的多列功能的treeview treelistview
    智能DVR视频监控系统,源代码
    delphi事件参数sender的用法例程
  • 原文地址:https://www.cnblogs.com/xums/p/10331365.html
Copyright © 2011-2022 走看看