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文件中加一个空格或者空行然后保存 一般来说到此就可以排除错误了
参考文献
- 杨开振. 深入浅出MyBatis[M]. 北京:电子工业出版社, 2016.
- linux学习:CentOS、Mac上SSH的设置以及SceureCRT中的文件上传下载
- 中关村成为北京“高精尖”产业发展主阵地
- jquery-barcode:js实现的条码打印
- 页面json 格式化+颜色高亮
- Python 里 and、or 的计算规则
- Python中赋值、浅拷贝与深拷贝
- git 简易使用说明
- 开发篇-MySQL分区(一)
- Establishing SSL connection without server's identity verification is not recommended. According to
- Django-认证系统
- javascript:双链表-插入排序
- javascript:二叉搜索树 实现
- 自然语言处理 语言模型介绍
- 口水先擦干!从大数据看外卖如何拯救“忙”与“宅”
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- AkShare-债券数据-国债期货可交割券相关指标
- Linux From Scratch
- 介绍一款 API 敏捷开发工具
- java线程池(五):ForkJoinPool源码分析之一(外部提交及worker执行过程)
- JavaScript中的匿名函数、闭包和BOM
- 【Vue.js】Vue.js中的事件处理、过滤器、过渡和动画、组件的生命周期及组件之间的通信
- 树莓派基础实验18:声音传感器实验
- 树莓派基础实验19:光敏传感器实验
- 逻辑式编程还有用吗?--“三维度”逻辑编程语言的设计(2)
- git 报错解决Validate branches Cannot Create: This merge request already exists
- 树莓派基础实验20:火焰报警传感器实验
- (译)SDL编程入门(8)几何图形渲染
- Java8 dubbo 调用 Collectors.toMap代码片发生的异常(IllegalStateException: Duplicate key)
- 树莓派基础实验21:烟雾报警传感器实验
- 树莓派基础实验22:红外遥控传感器实验