• MyBatis快速入门


    这部分内容不是很多,主要在于具体的应用,之后会针对痛点持续更新

    概念

    相对于全自动映射框架Hibernate,MyBatis是一个半自动映射框架,其需要提供的映射文件需要三部分:SQL、映射规则、POJO,对于一般的项目来说,Hibernate或Spring的SPA更加简单方便,而对于大型项目,MyBatis更为合适,因为大型项目的存续期长,对性能要求更高,简单易维护显得非常重要(快速上手),其核心组件如下所示。

    • SqlSessionFactoryBuilder:根据配置信息生成SqlSessionFactory。
    • SqlSessionFactory:依靠工厂来生成SqlSession会话。
    • SqlSession:是一个既可以发送SQL执行,也可以获取Mapper接口。
    • SQL Mapper:它由Java接口和XML(或注解)构成,需要给出对应的SQL和映射规则,负责发送SQL去执行,并返回结果。

    在Mybatis中,可以使用关键字来组装SQL:if判断语句;choose(when, otherwise)多条件分支语句;trim(where, set)辅助元素;foreach循环语句,用于in语句中。
    在当前流行的SpringBoot框架中,对MyBatis的整合那就显得更加便捷了,首先添加如下maven配置。

    	<dependency>
    		<groupId>org.mybatis.spring.boot</groupId>
    		<artifactId>mybatis-spring-boot-starter</artifactId>
    		<version>1.3.0</version>
    	</dependency>
    

    之后在application.properties文件中,添加如下配置即可

    #db
    #4 base paras
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/user?characterEncoding=UTF-8
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    #mybatis
    #mybatis.mapperLocations=classpath:mappers/*.xml
    

    Tip:
    此外,Mybatis还支持插件等功能,更加详细的资料,请参加MyBatis官网

    痛点

    • MyBatis的查询非常清晰有效,但是否提供update,insert,delete和selectByPK的通用组件?
      这部分mybatis主要通过mybatis-generator来处理,做好对应配置就好,细节上可以只选择自己需要的模板方法。
      mybatis-generator-gui: http://www.cnblogs.com/kankan1218/p/6142819.html

    • 通过查阅网上资料,最推荐的使用方法仍然是xml配置的方法,注解虽然支持但并不推荐,因为当查询复杂时,注解的可读性会严重下降。
      使用后发现,使用mybatisxml还是比较简单的帅帅哒。

    • 实践整合统一的数据库连接服务。

        @Configuration
        @EnableTransactionManagement
        @MapperScan("com.bjork.ws.dao")
        public class DataSourceConfig {
        
          @Bean
          public DataSource dataSource(DalDataSourceFactory factory) throws Exception {
            return factory.createDataSource("xx_insert_1");
          }
        
          @Bean
          public DalDataSourceFactory dataSourceFactory() {
            return new DalDataSourceFactory();
          }
        }
      

    此外,applicaiton.yml中关于mybatis的配置如下所示

    	mybatis:
    	  mapper-locations: classpath*:com/bjork/ws/dao/mapper/*.xml
    	  configuration:
    	    map-underscore-to-camel-case: true
    	    auto-mapping-unknown-column-behavior: NONE
    

    在发布时,有一个比较大的坑,maven默认不会编译源文件的中.xml代码,一定要再build中添加对应配置。

    <resources>  
        <resource>  
            <directory>src/main/java</directory>  
            <includes>  
                <include>**/*.xml</include>  
            </includes>  
            <filtering>true</filtering>  
        </resource>  
    </resources>  
    

    如果出现mybatis绑定错误:
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    一般的原因是Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上,需要比较细致的对比,我经常就是写错了一两个字母搞的很长时间找不到错误
    按以下步骤一一执行:
    1:检查xml文件所在的package名称是否和interface对应的package名称一一对应
    2:检查xml文件的namespace是否和xml文件的package名称一一对应
    3:检查函数名称能否对应上
    4:去掉xml文件中的中文注释
    5:随意在xml文件中加一个空格或者空行然后保存
    一般来说到此就可以排除错误了

    参考文献

    1. 杨开振. 深入浅出MyBatis[M]. 北京:电子工业出版社, 2016.
  • 相关阅读:
    POJ 1082 博弈推规律
    博弈论总结
    POJ 2502 Subway 关键在建图
    【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
    一位ACMer过来人的心得
    POJ1724 Dij队列优化邻接表
    Dijkstra队列优化矩阵版
    Uva247 Floyd传递闭包+map处理
    简爬新浪新闻网
    爬href链接
  • 原文地址:https://www.cnblogs.com/xiong2ge/p/mybatis_fast.html
Copyright © 2020-2023  润新知