MyBaitsPlus----知识盲点整理
2023-03-14 22:34:03 时间
知识盲点整理
- 1.MyBaitsPlus在springboot全局配置文件中可以修改相关默认配置的属性
- 2.MyBaitsPlus默认开启了驼峰命名规则
- 3.@TableName注解可以用来指定表名,默认寻找的表就是类名
- 4.MyBaitsPlus会自动将主键值回写到实体类中,不同于MyBaits还需要开启useGeneratedKeys和keyProperty
- 5.selectBatchIds(参数是一个集合)方法可以进行批量查询
- 6.selectByMap方法,通过map集合封装查询条件
- 7.MP启动注入SQL原理分析
- 8.AR
1.MyBaitsPlus在springboot全局配置文件中可以修改相关默认配置的属性
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台输出
map-underscore-to-camel-case: true
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
2.MyBaitsPlus默认开启了驼峰命名规则
3.@TableName注解可以用来指定表名,默认寻找的表就是类名
4.MyBaitsPlus会自动将主键值回写到实体类中,不同于MyBaits还需要开启useGeneratedKeys和keyProperty
5.selectBatchIds(参数是一个集合)方法可以进行批量查询
6.selectByMap方法,通过map集合封装查询条件
Map<String, Object> map = new HashMap<>();
//这里的key作为查询时拼接的sql语句的数据库列名
map.put("name","大忽悠1号");//这里的name必须是数据库的列名
List<User> users =userMapper.selectByMap(map);
7.MP启动注入SQL原理分析
问题:
xxxMapper继承了BaseMapper,BaseMapper中提供了通用的CRUD方法,方法来源于BaseMapper,有方法就必须要有SQL,因为MyBatis最终还是通过SQL来操作数据
分析:
MapperProxy中的sqlsession中的sqlsessionFactory
SqlSessionFacotry中Configuration的MappedStatements中的每一个mappedStatement都表示Mapper接口中的一个方法于Mapper映射文件中的一个SQL
MP在启动的时候就会挨个分析xxxMapper中的方法,并且将对应的SQL语句处理号,保存到configuration对象中的mappedStatements中
其实就是把方法名作为key,sql语句做值,保存在一个HashMap中,调用的时候根据方法名去map中寻找对应的sql语句
几个重要的对象
SqlMethod: 枚举对象,列举MP支持的所有sql方法
TableInfo :数据库表反射信息,可以获取到数据库表的相关信息
SqlSource:SQL语句处理对象
MapperBuilderAssistant :用于缓存,SQL参数,查询返回的结果集处理等
通过MapperBuilderAssistant将每一个mappedStatement添加到configuration中的mappedstaments中
8.AR
Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
实体类继承Model< T >,继承后,我们就可以使用模型类里面的方法来完成CRUD的操作了
@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName(value = "user_dao")//指定和数据库中那一张表对应
public class Dhy extends Model<Dhy>
{
String name;
Integer age;
Integer id;
//可以选择重写该方法来指定当前实体类的主键属性
@Override
public Serializable pkVal() {
return id;
}
}
AR的CURD操作演示
void insert()
{
Dhy u=new Dhy("大忽悠哦",18,2);
boolean ret = u.insert();
System.out.println("影响的行数"+ret);
}
void update()
{
Dhy u=new Dhy("尼玛",18,1);
boolean ret = u.updateById();
System.out.println("影响的行数"+ret);
}
void select()
{
Dhy u=new Dhy();
u.setId(1);
Dhy dhy = u.selectById();
System.out.println(dhy);
}
void selectAll()
{
Dhy u=new Dhy();
List<Dhy> dhies = u.selectAll();
dhies.forEach(System.out::println);
}
注意: 实体类A需要有对应的dao层和AMapper,且AMapper需要集成BaseMapper
实体类最好明确指定表名称,不然mybatisplus会去数据库中找与实体类同名的表名
issue1 当报mybatisplus entity XXX Not Found TableInfoCache.错误时,则缺少实体类对应的Mapper,添加mapper即可
AR 模式提供了一种更加便捷的方式实现CRUD操作,其本质还是调用的Mybatis对应的方法,类似于语法糖。
删除不存在的数据在逻辑上也是成功的
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的