@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