@Mapper的作用

添加了@Mapper注解之后这个接口在编译时会生成相应的实现类 .对应的xxxMapper.xml就是来实现这个Mapper . 然后再server层使用@Autowired注解引用进来,

@Mapper 和 @Resouce的区别
https://juejin.im/post/6844903958985736205

这里的@Mapper也是可以去掉的,但是要在启动类上加上

  1. @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
image.png

Mybatis generator的使用

https://mybatis.org/generator/quickstart.html
mybatis generator支持四种生成方式,推荐使用MyBatis3DynamicSql的方式,特点(1)无需繁琐的xml(2)采用Lamba表达式很方便进行 动态查询,无需拼接各种condition的xml定义
image.png

mvn方式运行方法

https://mybatis.org/generator/running/runningWithMaven.html
1、定义generator.xml,可以指定不同业务定义不同的context,运行时指定context进行执行
2、修改主pom文件,加入plugin

  1. <plugin>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-maven-plugin</artifactId>
  4. <version>1.4.0</version>
  5. <executions>
  6. <execution>
  7. <id>Generate MyBatis Artifacts</id>
  8. <goals>
  9. <goal>generate</goal>
  10. </goals>
  11. </execution>
  12. </executions>
  13. <configuration>
  14. <configurationFile>src/main/resources/generator/mybatis-generator-dynamic-sql.xml</configurationFile>
  15. <verbose>true</verbose>
  16. <overwrite>true</overwrite> -- 覆盖原有的文件
  17. <includeCompileDependencies>true</includeCompileDependencies>
  18. <includeAllDependencies>true</includeAllDependencies>
  19. <contexts>dsp</contexts> -- 这里指定只生成特定context
  20. </configuration>
  21. <dependencies>
  22. <dependency>
  23. <groupId>com.softwareloop</groupId>
  24. <artifactId>mybatis-generator-lombok-plugin</artifactId>
  25. <version>1.0</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>mysql</groupId>
  29. <artifactId>mysql-connector-java</artifactId>
  30. <version>5.1.18</version>
  31. </dependency>
  32. </dependencies>
  33. </plugin>

3、执行mvn 插件
image.png

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
image.png

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

    1. <table tableName="dps_physical_field" domainObjectName="DpsPhysicalFieldDO"
    2. enableInsert="true"
    3. enableUpdateByPrimaryKey="true">
    4. <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
    5. <columnRenamingRule searchString="^is_" replaceString=""/>
    6. <columnOverride column="is_need" javaType="Boolean"/>
    7. <columnOverride column="is_index" javaType="Boolean"/>
    8. </table>

    为什么 使用selectOne会报异常:cannot cast to Optional

    mybatis版本问题,升级到3.5.3解决

    1. <dependency>
    2. <groupId>org.mybatis</groupId>
    3. <artifactId>mybatis</artifactId>
    4. <version>3.5.3</version>
    5. </dependency>

    排查过程:

  • 哥伦布可用,生意参谋不可用。对比两个pom文件版本,org.mybatis.spring.boot版本相同,均为 2.1.1

  • 再看maven dependency。发现引入的org.mybatis.spring.boot所依赖的包 版本不一致,image.pngimage.png
  • 分析: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

mybatis执行原理

https://juejin.cn/post/6958787862204514317#heading-13