MyBatis问题汇总

1,ssm配置sql语句打印

在mybatis.xml里加



      

2,resultMap映射

官方:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
工作流程,原理
1,功能:
用来描述如何从数据库结果集中来加载对象
是解决列名不匹配
2,“隐式resultMap”:
resultType使用下(不需要显式地用resultMap),MyBatis 会在幕后自动创建一个 ResultMap,再基于属性名来映射列到 JavaBean 的属性上。
如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个基本的 SQL 特性)来匹配标签。比如:


列名对应:
(1)字段名与属性名一致
(2)自动映射开启,驼峰命名法
(3)使用别名,匹配标签

3,“显式resultMap”

4,高级结果映射

3,mybatis级联删除,更新

①建立表时直接建立约束,当父表删除数据时数据库会自动去删除子表中的数据,
②通过代码实现级联删除,先删除子表数据,然后删除父表中的数据。
https://blog.csdn.net/liyantianmin/article/details/41893249
mybatis-plus级联,多表联查
和mybatis一样,框架还不支持级联配置和维护

4,select多表联查-懒加载

设置association元素中的fetchType=lazy
懒加载 减少了性能消耗,一定程度上缓解了1+n带来的性能问题
及查询n+1,1+n问题
https://blog.csdn.net/wangjun5159/article/details/52389480

5,mybatis 逆向工程插件

https://www.jianshu.com/p/c89a888a53e3
下次执行插件xml会出现重复方法实现?
生成的xml中的resultMap的生成规则(

数据表进行生成操作自己写
功能:
使用 mybatis generator 生成表格对应的pojo、dao、mapper,
以及对应的example的pojo、dao、mapper,自带对单表的增删改查方法,
官方还没多表配置

6,多表查询配置

https://blog.csdn.net/bandaotixiruiqiang/article/details/72478361

7,select模糊查询

dao接口:

public List queryAll3(Course course);

course.xml实现:


8,AND问题:

where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。

如果 where 元素没有按正常套路出牌,我们可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:


9,mybatis 传入多个参数

https://www.cnblogs.com/mingyue1818/p/3714162.html
多参数情况下,也可使用注解@Parm

10,mapper.xml映射文件里有注释!!!!!

把注释删掉,一切OK!

11,Mybatis实现@Select等注解动态组合SQL语句

https://blog.csdn.net/apicescn/article/details/79507610
@Select支持简单的查询,对动态sql支持弱
mybatis 3.x提供
@SelectProvider,于使用该接口自定义(动态)SQL的解析方式
MyBatis 3 构建在全面且强大的基于 Java 语言的配置 API 之上。这个配置 API 是基于 XML 的 MyBatis 配置的基础,也是新的基于注解配置的基础。注解提供了一种简单的方式来实现简单映射语句,而不会引入大量的开销。

@SelectProvider(type = UserSqlProvider.class)
List getUsersByName(String name);

// Implements the ProviderMethodResolver on your provider class
class UserSqlProvider implements ProviderMethodResolver {
  // In default implementation, it will resolve a method that method name is matched with mapper method
  public static String getUsersByName(final String name) {
    return new SQL(){{
      SELECT("*");
      FROM("users");
      if (name != null) {
        WHERE("name like #{value} || '%'");
      }
      ORDER_BY("id");
    }}.toString();
  }
}

使用Java API方式代替xml实现sql的生成。

12,SpringBoot 快速整合Mybatis(去XML化+注解进阶)

https://www.jianshu.com/p/828d2bd12b2f

13,@autowired与@resource的区别

及使用,注意事项
https://www.zhihu.com/question/39356740
@autowired 是spring bean的,使用前提是Springbean对象
@resource 是J2EE的

14,mybatis 使用#符号和$符号的不同

及使用,注意事项
https://www.cnblogs.com/teach/p/5685545.html
sql 注入:https://blog.csdn.net/fmwind/article/details/59110918
mybatis启动数据库预编译,使用占位符? 来解决sql注入(编译过程起作用)

15,开发中建议使用Springboot+mybatis-plus,单表用注解,多表使用xml,效率更高

你可能感兴趣的:(MyBatis,Springboot)