整合Mybatis

回顾Mybatis

步骤:

  • 导入相关包

    • junit
    • mybatis
    • myssql
    • spring
    • aop
    • mybatis-spring
  • 编写配置文件

  • 测试

  • 导包

  • <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><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><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.5</version></dependency></dependencies><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>
    
  • 标准几个东西,顺便导入spring整合要用的一些包

  • mybatis-config.xml

  • <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration><typeAliases><package name="com.haoyun.POJO"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><package name="com.haoyun.mapper"/></mappers>
    </configuration>
    
  • User

  • @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {private int id;private String name;private String pwd;
    }
    
  • UserMapper

  • public interface UserMapper {List<User> selectUser();}
    
  • UserMapper.xml

  • <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.haoyun.mapper.UserMapper"><select id="selectUser" resultType="user">select * from user</select>
    </mapper>
    
  • Test

  • @Test
    public void UserMapper(){String resource  ="mybatis-config.xml";InputStream inputStream = null  ;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = build.openSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.selectUser();for (User user : users) {System.out.println(user);}sqlSession.close();
    }
    

mybatis-spring官方文档

http://mybatis.org/spring/zh/index.html

这里面涉及到mybatis-spring包的版本问题,如果spring版本和mybatis是5.0和3.5版本以上的,要使用Mybatis-spring2.0以上的包

最好就通过阅读mybatis-spring文档来学习

http://mybatis.org/spring/zh/getting-started.html

整合Mybatis方式一

spring的IoC特性,原先的Mybatis中的new对象方法都将制作为bean,进行依赖注入

  • 整体结构

  • mybatis-spring的配置将一点点代替原有的mybatis-config.xml中的配置

  • spring-dao.xml可以专门存放dao层的设置

    • mybatis都有这几个操作
    • 使用SqlSessionFactoryBean读取连接数据库配置文件
    • 产生sqlSessionFactory
    • 再产生sqlSession
    • 然后getMapper执行操作
  • 都可以一一代替

    • 配置数据源dateSource

      • <!--DateSource:使用spring的数据源替换mybatis的设置:c3p0、dbcp、druid-->
        <bean id="dateSource" 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=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="123456"/>
        </bean>
        
      • mybatis中的配置数据源操作

    • 给sqlSessionFactory注入dateSource

      • <!--sqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置数据源--><property name="dataSource" ref="dateSource" /><!--mybatis的核心配置文件,但是可以不写--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--相当于mappe package 添加mybatis.xml配置文件--><property name="mapperLocations" value="classpath:com/haoyun/mapper/UserMapper.xml"/><!--mybatis配置文件中能配置的在这都能配置-->
        </bean>
        
    • 然后是注入sqlSession

      • <!--SqlSessionTemplate:就是SqlSession-->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--只能使用构造器注入sqlSessionFactory,因为SqlSessionTemplate没有set方法--><constructor-arg index="0" ref="sqlSessionFactory"/>
        </bean>
        
      • 这里的注入方法是官网给出的,因为进入SqlSessionTemplate的源码查看,是没有set方法的所以只能通过构造函数注入

    • mybatis-config中原有的操作,在spring中都能设置,不过还是建议留一点在mybatis-config.xml中,证明有mybatis-config.xml这个文件

    • 原有的mybatis-config.xml就变成这样了

      • <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration><typeAliases><package name="com.haoyun.POJO"/></typeAliases>
        <!--    <settings>-->
        <!--        <setting name="" value=""/>-->
        <!--    </settings>--><!--一般会留下几个设置,证明使用了mybatis--><!--    <environments default="development">-->
        <!--        <environment id="development">-->
        <!--            <transactionManager type="JDBC"/>-->
        <!--            <dataSource type="POOLED">-->
        <!--                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
        <!--                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>-->
        <!--                <property name="username" value="root"/>-->
        <!--                <property name="password" value="123456"/>-->
        <!--            </dataSource>-->
        <!--        </environment>-->
        <!--    </environments>-->
        <!--    <mappers>-->
        <!--        <package name="com.haoyun.mapper"/>-->
        <!--    </mappers>-->
        </configuration>
        
    • 配置好spring-dao.xml,要多写一个实现UserMapper接口的实现类,用于注入

    • 之前是通过getMapper,然后找到对应的mapper,才能产生对应的对象

    •     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      
    • 现在要通过注入bean来产生对象,这个对象需要注入一个sqlSession才行,sqlsession就是sqlSessionTemplate,再实现类添加一个set方法注入sqlSessionTemplate,sqlSessionTemplate已将在上面注入好,id为sqlSession

    • 添加这个实体类的作用就是能注入sqlSession

    • public class UserMapperImpl implements UserMapper {private SqlSessionTemplate sqlSession;public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}public List<User> selectUser() {UserMapper mapper = sqlSession.getMapper(UserMapper.class);return mapper.selectUser();}
      }
      
    • 代理调用的是mapper.selectUser,这里又映射到UserMapper.xml的selectUser

    • <mapper namespace="com.haoyun.mapper.UserMapper"><select id="selectUser" resultType="user">select * from user</select>
      </mapper>
      
    • 有了实体类就要给他注入bean

    • 在applicationContext.xml中注册,因为spring-dao中编写的配置基本已经定形,不必更改了

    • <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><import resource="spring-dao.xml"/><bean id="userMapper" class="com.haoyun.mapper.UserMapperImpl"><property name="sqlSession" ref="sqlSession"/></bean>
      </beans>a
      
    • import spring-dao.xml配置

    • 给userMapper,注入sqlSession,使用的reference引用已经写好的sqlSession bean

    • 测试

      • @Test
        public void UserMapper(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);List<User> users = userMapper.selectUser();for (User user : users) {System.out.println(user);}
        }
        
      • 读取applicationContext配置文件后,直接getBean,就拿到了实体类对象,就可以调用里面的方法

    • 这个整合,也就是以springIoC的特性把、读取数据源、产生SqlSessionFactory,产生sqlSession的操作都进行了依赖注入化,通过第三方获取特定的对象,实现解耦

整合Mybatis方式二

  • 官方文档提供了一个抽象支持类,能提供一个sqlsession,调用getSqlSession就能得到一个SqlSessionTemplate,需要注入一个SqlSessionFactory或SqlSessionTemplate

  • 注入SqlSessionFactory,就不用产生SqlSessionTemplate,这样在制作spring-dao.xml配置文件时能少注入一个SqlSessionTemplate

  •     <!--SqlSessionTemplate:就是SqlSession-->
    <!--    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">-->
    <!--        &lt;!&ndash;只能使用构造器注入sqlSessionFactory,因为SqlSessionTemplate没有set方法&ndash;&gt;-->
    <!--        <constructor-arg index="0" ref="sqlSessionFactory"/>-->
    <!--    </bean>-->
    
  • 开始注入

  • UserMapperImpl2

  • public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{/*省去了注入的过程*/public List<User> selectUser() {return getSqlSession().getMapper(UserMapper.class).selectUser();}
    }
    
  • spring-dao.xml

  • <bean id="UserMapperImpl2" class="com.haoyun.mapper.UserMapperImpl2"><property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    
  • 注入sqlSessionFactory

  • 测试方法和之前一样

Spring-Mybatis 整合的两种方式相关推荐

  1. spring配置属性的两种方式

    spring配置属性有两种方式,第一种方式通过context命名空间中的property-placeholder标签 <context:property-placeholder location ...

  2. Spring系列教程八: Spring实现事务的两种方式

    2019独角兽企业重金招聘Python工程师标准>>> 一. Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的 ...

  3. spring 注入bean的两种方式

    我们都知道,使用spring框架时,不用再使用new来实例化对象了,直接可以通过spring容器来注入即可. 而注入bean有两种方式: 一种是通过XML来配置的,分别有属性注入.构造函数注入和工厂方 ...

  4. Spring定义Bean的两种方式:<bean>和@Bean

    前言: Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用. 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean. 今天通过S ...

  5. spring事务管理的两种方式

    一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...

  6. Spring依赖注入的两种方式(根据实例详解)

    1,Set注入    2,构造注入 Set方法注入: 原理:通过类的setter方法完成依赖关系的设置 name属性的取值依setter方法名而定,要求这个类里面这个对应的属性必须有setter方法. ...

  7. Spring : Spring定义Bean的两种方式:lt; bean gt;和@Bean

    1.美图 2.概述 Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用. 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean. ...

  8. springboot执行批量插入_springboot+Mybatis 注解\Xml两种方式批量添加数据

    1.使用注解的方式批量添加数据,在该方法中,传进来的参数是一个List集合,使用一个foreach 循环解析集合的数据,最后再批量保存到数据库,具体如下截图: 代码如下: //批量保存 @Insert ...

  9. spring aop日志(两种方式)

    第一种方式(全注解): <!-- 定义事务管理器(声明式的事务) -->       <bean id="transactionManager"         ...

  10. 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目

     1  第一种方式是:在连网的情况下,通过在helpàInstall下安装. 新的地址是:http://download.eclipse.org/technology/m2e/releases 2 ...

最新文章

  1. Java的poi的excel导入怎么判断日期格式的单元格
  2. 大数据时代,数据科学都有些啥?
  3. 锦官城思享会-成都创业与商业CXO闭门会圆满举办
  4. OpenCV3学习(4.2)——图像常用滤波方法(方框、均值、高斯、中值、双边)
  5. Python爬取B站弹幕+Gephi梳理主线剧情
  6. java 指定格式的date_指定格式的日期字符串转化成java.util.Date类型日期对象
  7. Bailian4110 圣诞老人的礼物-Santa Clau’s Gifts【背包+贪心】
  8. 用python开发windows程序 [转]
  9. linux 查看进程打开的文件和库
  10. 联想ts250进bios_联想Think TS250完美安装server 2008 R2 | 涂涂小窝
  11. Maxthon2.5.10.2576 beta苦菜花增强优化防假死正式版(1031)
  12. svn版本管理软件——创建svn私人仓库
  13. 飞桨领航团武汉长沙回顾|识别皮肤病,一秒记笔记,AI还有哪些惊喜?
  14. AD使用技巧——如何改变布线走线的角度
  15. 基于springboot vue uniapp点餐外码系统源码(毕设)
  16. java中用length求二维数组的长度
  17. 内蒙古自治区律师事务所排名情况
  18. 再读新疆系列(一)——穿越准葛尔盆地
  19. 4.人工神经网络(一些例题)
  20. 【Linux:CentOS7】查看JDK版本信息报错解决

热门文章

  1. WICC2021召开在即 商汤科技将展示AI“新能源”
  2. 【PP那些事儿】特殊采购类40
  3. 《白皮书》:身边的人脸安全事件及背后的三类攻击手段
  4. 金融农民工转行Java开发,3年时间月薪翻5倍
  5. 使用easypoi导出excel实现动态列
  6. C# FileStream和StreamWriter用法
  7. 基于大模型GPT,如何提炼出优质的Prompt
  8. java基础学习—— 六
  9. 俯卧撑和平板支撑,哪个更能塑身呢?有何依据?
  10. 一个android工程师写java后台的感受