• Spring集成MyBatis(自定义类和xml配置文件两种形式)


    将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合,实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理.


    spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。

    我们需要spring创建以下对象
    1.独立的连接池对象
    2.SqlSessionFactory对象
    3.创建出dao对象
    上面三个对象的创建,使用xml的bean标签

    1.Maven配置

    1. <dependency>
    2. <groupId>org.mybatisgroupId>
    3. <artifactId>mybatisartifactId>
    4. <version>3.5.0version>
    5. dependency>
    6. <dependency>
    7. <groupId>org.mybatisgroupId>
    8. <artifactId>mybatis-springartifactId>
    9. <version>2.0.0version>
    10. dependency>
    将mybatis集成到spring之后,就可以被spring的ioc容器托管,再也不用自己创建SqlSessionFactory 、打开SqlSession等操作。其中最重要的配置就是定义好SqlSessionFactoryBean。
    
    mybatis通过SqlSessionFactoryBean将SqlSessionFactory对象集成到spring中,它实现了InitializingBean接口,在SqlSessionFactoryBean初始化时解析配置并创建DefaultSqlSessionFactory对象。它还实现了FactoryBean,在getObject时返回我们创建好的DefaultSqlSessionFactory,使得DefaultSqlSessionFactory也被spring管理起来。
    很多框架集成到spring的方法基本都是靠InitializingBean和FactoryBean这两个接口来实现的,很好的设计
    
    

    2.集成到spring中

    有两种方式

    第一种方式:自定义类

    1. /**
    2. * Mybatis会话工厂
    3. * Mybatis Session Factory
    4. * 声明mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory
    5. */
    6. @Bean
    7. public SqlSessionFactoryBean mybatisSqlSessionFactoryBean(DataSource dataSource) throws IOException {
    8. //dataSource
    9. SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    10. bean.setDataSource(dataSource);
    11. //resolver
    12. PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    13. bean.setMapperLocations(resolver.getResources("classpath*:mapper/**/*Mapper.xml"));
    14. //configuration配置类相当于mybatis的主配置文件configuration.xml
    15. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
    16. configuration.setCacheEnabled(true);
    17. configuration.setLazyLoadingEnabled(false);//懒加载:关闭
    18. configuration.setMapUnderscoreToCamelCase(true);//mybatis驼峰映射
    19. configuration.setLogImpl(Log4jImpl.class);
    20. bean.setConfiguration(configuration);
    21. //自定义别名,mybatis会自动扫描这个包下的所有类,给所有的类生成别名,生成的别名就是这个类的简单类名(首字母可以是大写/小写)
    22. bean.setTypeAliasesPackage("org.techwebsite.domain");//自定义别名
    23. /***pagehelper分页插件*****/
    24. Interceptor interceptor = new PageInterceptor();
    25. Properties properties = new Properties();
    26. properties.setProperty("helperDialect", "mysql");//数据库
    27. properties.setProperty("offsetAsPageNum", "true");//是否将参数offset作为PageNum使用
    28. properties.setProperty("rowBoundsWithCount", "true");//是否进行count查询
    29. properties.setProperty("reasonable", "false");//是否分页合理化
    30. interceptor.setProperties(properties);
    31. //添加插件
    32. bean.setPlugins(new Interceptor[]{interceptor});
    33. return bean;
    34. }
    35. /**
    36. * MapperScannerConfigurer:在内部调用SqlSession的getMapper()生成每个dao接口的代理对象
    37. * 或者使用注解@MapperScan(basePackages = "org.techwebsite.logic.mapper")//扫描mybatis的mapper文件
    38. */
    39. @Bean
    40. public MapperScannerConfigurer mapperScannerConfigurer(){
    41. MapperScannerConfigurer msc = new MapperScannerConfigurer();
    42. msc.setBasePackage("org.techwebsite.logic.mapper");
    43. return msc;
    44. }

    pagehelper官方:

    Releases · pagehelper/Mybatis-PageHelper (github.com)

    PageHelper分页使用详解_笔记大全_设计学院

    用的当时的最新版6.0.0

    第二种方式:xml配置文件

    mybatis主配置文件

    configuration.xml

    1. "1.0" encoding="UTF-8"?>
    2. configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    3. <configuration>
    4. <settings>
    5. <setting name="lazyLoadingEnabled" value="true"/>
    6. <setting name="aggressiveLazyLoading" value="false"/>
    7. <setting name="logImpl" value="STDOUT_LOGGING"/>
    8. settings>
    9. <typeAliases>
    10. <package name="com.example.eshop_manager.entity"/>
    11. typeAliases>
    12. configuration>

    applicationContext.xml (Spring核心配置文件)

    1. <context:component-scan base-package="com.example.eshop_manager">context:component-scan>
    2. <context:property-placeholder location="classpath:jdbc.properties">context:property-placeholder>
    3. <bean id="dbSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    4. <property name="driverClass" value="${jdbc.driver}">property>
    5. <property name="jdbcUrl" value="${jdbc.url}">property>
    6. <property name="user" value="${jdbc.username}">property>
    7. <property name="password" value="${jdbc.password}">property>
    8. bean>
    9. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    10. <property name="dataSource" ref="dbSource">property>
    11. <property name="configLocation" value="classpath:mybatis/configuration.xml" />
    12. <property name="mapperLocations" value="classpath*:com/tgq/**/mapper/*.xml"/>
    13. <property name="plugins">
    14. <array>
    15. <bean class="com.github.pagehelper.PageInterceptor">
    16. <property name="properties">
    17. <value>
    18. helperDialect=mysql
    19. value>
    20. property>
    21. bean>
    22. array>
    23. property>
    24. bean>
    25. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    26. <property name="basePackage" value="com.example.eshop_manager.dao"/>
    27. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    28. bean>

    参考:

    分页配置:org.mybatis.spring.SqlSessionFactoryBean.setPlugins()方法的使用及代码示例_其他_大数据知识库

    【MyBatis】spring整合mybatis教程(详细易懂)_无法自律的人的博客-CSDN博客

  • 相关阅读:
    javaweb
    WebSocket小案例(spring-boot-starter-websocket)
    【线性代数】三、特征值和特征向量
    服务器硬件基础知识
    论文阅读笔记 | 三维目标检测——PointNet
    day45 数据库总结
    大二Web课程设计——张家界旅游网站设计与实现(HTML+CSS+JavaScript)
    无锡哲讯与喜德金属联手推动“百城千园行”“十园千企”无锡站活动,数字化赋能活动动
    树莓派4B(Ubuntu20.04)使用LCD1602液晶屏开机自动显示IP及其他信息
    电脑重装系统后DirectX12旗舰版禁用了怎么解决?
  • 原文地址:https://blog.csdn.net/qq877507054/article/details/134316346