@Mapper的作用
添加了@Mapper注解之后这个接口在编译时会生成相应的实现类 .对应的xxxMapper.xml就是来实现这个Mapper . 然后再server层使用@Autowired注解引用进来,
@Mapper 和 @Resouce的区别
https://juejin.im/post/6844903958985736205
这里的@Mapper也是可以去掉的,但是要在启动类上加上
@MapperScan(value = {"com.bf.spring4.mapper"})
这句话的意思是扫描Mapper类。
Example类的使用
http://mybatis.org/generator/generatedobjects/exampleClassUsage.html
如何设置排序 https://www.jianshu.com/p/cc7dbb274888
https://blog.csdn.net/biandous/article/details/65630783
Mybatis generator的使用
https://mybatis.org/generator/quickstart.html
mybatis generator支持四种生成方式,推荐使用MyBatis3DynamicSql的方式,特点(1)无需繁琐的xml(2)采用Lamba表达式很方便进行 动态查询,无需拼接各种condition的xml定义
mvn方式运行方法
https://mybatis.org/generator/running/runningWithMaven.html
1、定义generator.xml,可以指定不同业务定义不同的context,运行时指定context进行执行
2、修改主pom文件,加入plugin
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.0</version><executions><execution><id>Generate MyBatis Artifacts</id><goals><goal>generate</goal></goals></execution></executions><configuration><configurationFile>src/main/resources/generator/mybatis-generator-dynamic-sql.xml</configurationFile><verbose>true</verbose><overwrite>true</overwrite> -- 覆盖原有的文件<includeCompileDependencies>true</includeCompileDependencies><includeAllDependencies>true</includeAllDependencies><contexts>dsp</contexts> -- 这里指定只生成特定context</configuration><dependencies><dependency><groupId>com.softwareloop</groupId><artifactId>mybatis-generator-lombok-plugin</artifactId><version>1.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.18</version></dependency></dependencies></plugin>
3、执行mvn 插件
DynamicSql使用方法
https://mybatis.org/generator/generatedobjects/dynamicSqlV2.html
https://mybatis.org/mybatis-dynamic-sql/docs/select.html
mapper类是如何与datasource绑定的
https://objcoding.com/2018/06/01/mybatis-mapper/ mybatis 
insert 方法返回主键ID
@Options(useGeneratedKeys=true,keyProperty=”record.id”)
DB字段想设置为boolean类型?
最佳实践:
- db字段设置为int型
- mybatis generator 生成的时候 可以将DO层属性转换为boolean类型,同时如果db中字段命名为了is_xxx,java DO boolean属性名称不想(一般也不建议,会带来各种序列化的坑)命名为is_xxx,mybatis generator也支持重命名 字段名
VO 层 对象也只需要从DO层直接copy
<table tableName="dps_physical_field" domainObjectName="DpsPhysicalFieldDO"enableInsert="true"enableUpdateByPrimaryKey="true"><generatedKey column="id" sqlStatement="JDBC" identity="true"/><columnRenamingRule searchString="^is_" replaceString=""/><columnOverride column="is_need" javaType="Boolean"/><columnOverride column="is_index" javaType="Boolean"/></table>
为什么 使用selectOne会报异常:cannot cast to Optional
mybatis版本问题,升级到3.5.3解决
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version></dependency>
排查过程:
哥伦布可用,生意参谋不可用。对比两个pom文件版本,org.mybatis.spring.boot版本相同,均为 2.1.1
- 再看maven dependency。发现引入的org.mybatis.spring.boot所依赖的包 版本不一致,


- 分析:mybatis-spring-boot-starter 应该根据本地spring-boot版本不同,引用依赖了不同的mybatis版本
- 至此,猜测是mybatis版本低导致的。主动增加高版本mybatis的依赖后解决
如何在调试阶段打印mybatis真正执行的sql
configuration.setLogImpl(StdOutImpl.class);
https://www.zhihu.com/question/20091325
但这样打印出来的还是 带 ?的,参数没有直接带进去,如果要做到最终sql,采用log4jdbc 第三方库
https://www.cnblogs.com/cnjavahome/p/8421846.html
