Mybatis或Mybatis-plus配置报错原因

1.添加mybatis或者plus相关的依赖
2.检查xml文件中的配置namespace是否为Mapper全接口名
3.检查Mapper接口中的方法名与xml文件中的id值是否对应
4.检查xml文件的参数parameterType是方法参数类型的全类名,resultType是返回值类型的全类名,并且必须跟mapper接口方法的返回值类型一致
5.在主启动类上加注解@MapperScan(“Mapper层的全路径”),配置文件指定mybatis-plus.mapper-locations:xml文件位置(可忽略)
6.Mapper接口名跟xml文件名必须一致
7.如果xml文件不在Resources目录,会导致xml无法编译,需要pom文件加build配置,在Resources目录下则不用管,但是注意不要将xml放在static和templates目录下了,系统扫描不到!!!
8.检查xml文件是否有中文注释,删除掉
9.检查xml文件所在package名称是否和Mapper接口所在的包名一一对应
10.检查target目录下classes文件夹,是否正确编译了mapper层代码和xml文件
11.如果接口方法返回的是List集合,那么xml文件的返回值类型得是resultMap才行
12.检查mapper.xml配置文件的目录位置是否正确
关于dao层代理对象创建的方式:

第一种场景:当mapper文件和接口同目录下,在接口上使用@Mapper即可,缺点是接口多的时候使用不方便!
第二种场景:当mapper文件和接口同目录下,取消在接口上使用的@Mapper,在主启动类上加注解@MapperScan,属性basePackages指定接口包路径,框架会创建包下所有接口的代理对象
第三种场景:开发最常用,将mapper文件跟dao层接口分开管理,在resource目录下创建目录,比如mappers,用来管理所有的mapper文件,需要在properties配置文件配置mapper文件的位置,然后再pom文件指定将resource目录中的文件编译到目标目录,在主启动类上加注解@MapperScan,属性basePackages指定接口包路径,框架会创建包下所有接口的代理对象

第一种场景:@Mapper的使用

在dao层接口上,告诉mybatis这是dao接口,创建接口的代理对象

@Mapper
public interface UserDao {User selectUser(@Param("id") Integer id);
}

第二种场景:@MapperScan的使用
在主启动类上,扫描包下所有接口,并创建接口的代理对象

步骤1:去掉接口上的Mapper注解

public interface UserDao {User selectUser(@Param("id") Integer id);
}

步骤2:在主启动类上加注解@MapperScan,属性basePackages=dao层接口所在的包路径,路径是数组,可以有多个!

@SpringBootApplication
@MapperScan(basePackages = "com.alibaba.springboot.dao")
public class SpringbootApplication {public static void main(String[] args) {SpringApplication.run(SpringbootApplication.class, args);}
}

第三种场景:

1.将所有mapper文件放在resource目录下的子目录

2.在properties配置文件,配置mapper文件所在的位置(根据版本的不同,有些会自动扫描resource目录下的文件,无需配置)

#指定mapper文件所在位置,默认以resource目录为根
mybatis.mapper-locations=classpath:mapper/*.xml
#指定mybatis的日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

3.在pom文件指定将resource目录中的文件,编译到指定目录中(根据版本的不同,有些会自动扫描resource目录下的文件,无需配置)

<build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource></resources>
</build>

4.在主启动类上加注解MapperScan

@SpringBootApplication
@MapperScan(basePackages = "com.alibaba.springboot.dao")
public class SpringbootApplication {public static void main(String[] args) {SpringApplication.run(SpringbootApplication.class, args);}
}

Mybatis

mybatis是持久层框架,封装了JDBC,它的核心功能是动态代理和动态SQL,动态代理就是dao层接口的实现类交给mybatis创建,然后交给spring容器管理,动态SQL就是通过标签去动态的拼接SQL语句,比如where标签,if标签,foreach标签等

#{} 和 ${}的区别:

#{}:使用PrepareStatement作为对象执行SQL语句,效率高,可以防止SQL注入,会自动加单字符串,#{}常作为列值使用,拼接的是?
-------------------------------------------------------------------------
${}:使用Statement作为对象执行SQL语句,效率低,有SQL注入风险,不会自动加单字符串,${}常用作列名或表名,拼接的是单词

resultMap结果映射:

列名和属性名不对应的情况下使用,相同也能使用
用法:
1.在mapper文件定义resultMap标签,指定列名和属性名称的对应关系
2.在select标签使用属性resultMap = “resultMap标签的ID值”

<mapper namespace="com.alibaba.dao.UserDao"><!--type:写全类名,id:取个别名--><resultMap id="user" type="com.alibaba.pojo.User"><!--id标签指定主键的映射关系--><id column="id" property="id"></id><!--result标签指定非主键映射关系--><result column="loginName" property="loginName"></result></resultMap><!--查询SQL,resultMap:对应标签取的别名--><select id="selectUserById" resultMap="user">select id, loginName, loginPwd, realNamefrom t_userwhere id = #{id};</select>
</mapper>

mybatis框架的常用注解

动态SQL常用标签:

多个条件查询数据时可以使用动态SQL,掌握if,where,foreach,sql

foreach:

例子1:循环简单类型list
第二种方式:
sql:

Mybatis-Plus

mybatisl-plus框架的常用注解

简化mybatis,操作流程:

添加mybatis-plus依赖
做mybatis-plus的yml文件配置
创建pojo实体类,创建dao层接口,继承BaseMapper<实体类名>类,创建service层(或者不继承)继承Iservice,创建serviceImp层(或者Repository)继承SerivceImpl
在主启动类上加@MapperScan(“dao层目录所在的绝对路径”)注解,或者在Mapper类上加@Mapper,一个的群,一个的单

配置yml文件

# 配置Mybatis-plus
mybatis-plus:configuration:# sql打印log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 开启查询数据为空就返回null给前端,避免空指针异常call-setters-on-nulls: true# 指定mapper.xml文件的位置(可省略)mapper-locations: classpath:mapper/*Mapper.xml# 逻辑删除,方式一global-config:db-config:logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)logic-delete-field: isDeleted # 全局逻辑删除的实体字段名

配置逻辑删除,实际是更新操作
方式一:直接在yml文件配置
方式二:在实体类字段isDelete上加注解@TableLogic就行了
需要注意的是,如果是MP生成的SQL会自动加条件is_deleted = 0,但是自定义的SQL,比如在mapper.xml文件写的SQL,需要在最后自己加条件is_deleted = 0才行!!!

@TableName:数据库表名

@TableName("sys_user")
public class UserDO {}

@TableId:自增id

@TableName("sys_user")
public class User {@TableId(type = IdType.AUTO)private Long id;
}

@TableField:

@TableName("sys_user")
public class User {@TableId(type = IdType.AUTO)private Long id;// 默认是开启了驼峰命名的,如果没有开启驼峰命名,实体类的属性是nickName,在数据库中没有该字段,就可以用@TableField映射数据库                                                     的字段nick_name@TableField("nick_name")private String nickName;// 表示数据库中不存在该字段@TableField(exist=false)private String remark;
}

方法详解
条件构造器:Wrappers支持lombda表达式,不加s不支持
** Wrapper<\WaitMaterialDO> wrapper = Wrappers.<\WaitMaterialDO>lambdaQuery()
.eq()
.gt()
.lt()
.like()
.last()
.orderByDesc()
.select()
.groupBy();**

getOne(wrapper)
获取一整条数据,传入wapper条件,返回DO对象

getById()
根据id查询整条数据,传入id,返回DO对象

save()
添加一条数据,传入DO对象,返回boolean

saveBatch()
批量添加数据,传入Collection<\DO>,返回boolean

removeById()
根据id删除整条数据,传入id,返回boolean

updateById()
根据id修改整条数据,传入DO对象,返回boolean

updateBatchById()
批量修改数据

list()
根据条件构造器查询全部数据(list列表),不传条件或者传入条件构造器,返回List<DO对象>

page(pageIndex,pageSize,wrapper)
分页查询XXX列表

Mybatis丶Mybatis-Plus相关推荐

  1. (Mybatis)Mybatis简介和初步使用

    1. Mybatis简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参 ...

  2. MyBatis(三)MyBatis缓存和工作原理

    MyBatis缓存 MyBatis提供了一级缓存和二级缓存,并且预留了集成第三方缓存的接口. 从上面MyBatis的包结构可以很容易看出跟缓存相关的类都在cache的package里,其底层是一个Ca ...

  3. MyBatis(一)MyBatis介绍和配置详解

    在Java程序里面去操作数据库,最原始的办法是使用JDBC的API.需要分为六步: 注册驱动 通过DriverManager获取一个Connection 通过Connection创建一个Stateme ...

  4. MyBatis(二)MyBatis基本流程源码分析

    MyBatis体系结构 MyBatis的工作流程 在MyBatis启动的时候我们要去解析配置文件,包括全局配置文件和映射器配置文件,我们会把它们解析成一个Configuration对象,里面会包含各种 ...

  5. 【MyBatis】MyBatis初体验

    文章目录 框架 软件开发三层结构 MyBatis概念 MyBatis由来 ORM框架与MyBatis的区别 MyBatis编码流程 框架 是一个可以重复使用的设计构件,我们在做开发的时候框架是直接调来 ...

  6. MyBatis】MyBatis一级缓存和二级缓存

    转载自  MyBatis]MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存.一级缓存的作用域默认是一个SqlSe ...

  7. mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理

    原文:https://juejin.im/post/5abcbd946fb9a028d1412efc 本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记. 上一篇介绍了反射和动态代理基 ...

  8. mybatis支持驼峰自动转换sql吗_SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换...

    一.简述 mybatis驼峰式命名规则自动转换: 使用前提:数据库表设计按照规范"字段名中各单词使用下划线"_"划分": 使用好处:省去mapper.xml文件 ...

  9. MyBatis系列-Mybatis入门精讲

    导语   在之前的分享中没有做过关于Mybatis内容相关的分享,这段时间深入的学习了关于Mybatis的相关知识,这里首先来对Mybatis的相关基础知识做一个介绍,这个系列的分享博主会做到有始有终 ...

  10. About MyBatis——有关Mybatis,自问自答系列

    目录 1. Mybatis为什么只调用接口就可以运行SQL? 2. Mybatis中的批处理 3. Mybatis中的二级缓存 4. Spring + Mybatis 1. Mybatis为什么只调用 ...

最新文章

  1. 维度变换--首先将矩阵倒过来
  2. linux 磁盘扩容_当LINUX服务器磁盘空间不够时如何进行磁盘扩容?
  3. DOM之城市二级联动
  4. 计算机权限常用英语词汇,计算机英语-计算机常用英语词汇表讲课稿.pdf
  5. php 数组合并_PHP数组常用函数分类整理
  6. 谷歌开源的 GAN 库--TFGAN
  7. android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现
  8. linux重定向:21
  9. 云计算安全之CCSKv4.0(201910考的)
  10. Linux命令解释之head
  11. 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...
  12. 祝愿父亲节里的父亲们快乐!
  13. 为什么你的MySQL跑得很慢?
  14. 占位符是如何防止sql注入的?
  15. mysql gay锁_MySQL事务(二) - osc_gay6i4ve的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. TQ210 —— LCD
  17. Android 支付宝支付SDK接入
  18. MenuetOS-令人不可思议的64位操作系统!
  19. CSO是什么?这家年增长48%的企业级软件公司告诉你
  20. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

热门文章

  1. 运维自动化之ANSIBLE
  2. 脱离标准流(1)浮动
  3. 机器学习中的数学——距离定义(九):测地距离(Geodesic Distance)
  4. 运维真的不是夕阳产业!(不谈技术)
  5. 计算机网络双语常用词汇,计算机网络协议词汇Protocols
  6. 【UE4】TimeLine(蓝图)
  7. 2021年四川高考成绩排名查询,四川高考排名查询方法,2021年四川高考成绩位次全省排名查询...
  8. du和df的使用及区别
  9. 万众瞩目的BAISS公链将如何彻底改变区块链现状?
  10. FPGA数字信号处理(25)数字相关器设计(经典结构)