Mybatis丶Mybatis-Plus
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相关推荐
- (Mybatis)Mybatis简介和初步使用
1. Mybatis简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参 ...
- MyBatis(三)MyBatis缓存和工作原理
MyBatis缓存 MyBatis提供了一级缓存和二级缓存,并且预留了集成第三方缓存的接口. 从上面MyBatis的包结构可以很容易看出跟缓存相关的类都在cache的package里,其底层是一个Ca ...
- MyBatis(一)MyBatis介绍和配置详解
在Java程序里面去操作数据库,最原始的办法是使用JDBC的API.需要分为六步: 注册驱动 通过DriverManager获取一个Connection 通过Connection创建一个Stateme ...
- MyBatis(二)MyBatis基本流程源码分析
MyBatis体系结构 MyBatis的工作流程 在MyBatis启动的时候我们要去解析配置文件,包括全局配置文件和映射器配置文件,我们会把它们解析成一个Configuration对象,里面会包含各种 ...
- 【MyBatis】MyBatis初体验
文章目录 框架 软件开发三层结构 MyBatis概念 MyBatis由来 ORM框架与MyBatis的区别 MyBatis编码流程 框架 是一个可以重复使用的设计构件,我们在做开发的时候框架是直接调来 ...
- MyBatis】MyBatis一级缓存和二级缓存
转载自 MyBatis]MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存.一级缓存的作用域默认是一个SqlSe ...
- mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理
原文:https://juejin.im/post/5abcbd946fb9a028d1412efc 本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记. 上一篇介绍了反射和动态代理基 ...
- mybatis支持驼峰自动转换sql吗_SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换...
一.简述 mybatis驼峰式命名规则自动转换: 使用前提:数据库表设计按照规范"字段名中各单词使用下划线"_"划分": 使用好处:省去mapper.xml文件 ...
- MyBatis系列-Mybatis入门精讲
导语 在之前的分享中没有做过关于Mybatis内容相关的分享,这段时间深入的学习了关于Mybatis的相关知识,这里首先来对Mybatis的相关基础知识做一个介绍,这个系列的分享博主会做到有始有终 ...
- About MyBatis——有关Mybatis,自问自答系列
目录 1. Mybatis为什么只调用接口就可以运行SQL? 2. Mybatis中的批处理 3. Mybatis中的二级缓存 4. Spring + Mybatis 1. Mybatis为什么只调用 ...
最新文章
- 维度变换--首先将矩阵倒过来
- linux 磁盘扩容_当LINUX服务器磁盘空间不够时如何进行磁盘扩容?
- DOM之城市二级联动
- 计算机权限常用英语词汇,计算机英语-计算机常用英语词汇表讲课稿.pdf
- php 数组合并_PHP数组常用函数分类整理
- 谷歌开源的 GAN 库--TFGAN
- android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现
- linux重定向:21
- 云计算安全之CCSKv4.0(201910考的)
- Linux命令解释之head
- 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...
- 祝愿父亲节里的父亲们快乐!
- 为什么你的MySQL跑得很慢?
- 占位符是如何防止sql注入的?
- mysql gay锁_MySQL事务(二) - osc_gay6i4ve的个人空间 - OSCHINA - 中文开源技术交流社区...
- TQ210 —— LCD
- Android 支付宝支付SDK接入
- MenuetOS-令人不可思议的64位操作系统!
- CSO是什么?这家年增长48%的企业级软件公司告诉你
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】