距离上次用Mybatis以及Mybatis-plus已经是两年前了,但都是培训时候用的,实际工作中主要还是用Jpa + Hibernate,别说Jpa真的很香,不用手动建表,需要加约束,索引什么的直接操作对象即可,永久了真的回不去了,但是对于复杂的查询还是比较吃力,相对于这点Mybatis还是挺不错的,当然主要还是跟上大部队的步伐,同时多学习别的东西未雨绸缪。
因为之前都是用的springboot2.x,这里我创建一个springboot3的项目作为demo尝尝鲜(jdk必须17起步),由于用喜欢了Jpa的自动建表,在用这种半自动框架还得手动建表,非常的不得劲所以我在网上扒拉了某佬一个好用的自动建表工具AUTO TABLE,感觉又回到了Jpa ,这样方便把精力放在业务上面,提升开发效率。
demo仓库地址,这个是我自己搭建的一个gitea仓库如果下载不下来证明被防火墙拦截了,可以下方评论联系 ^ ^。
由于是复习,下面以我个人习惯记录,对于记录不详细,理解不周到还请各位佬批评指导。
1.使用方法
1.1导入依赖
不同springboot版本对应的依赖是不同的,如果版本对应不上可能导致项目起不起来。
<!--Mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
1.2接口继承Basemapper
这里和Jpa差不多都会继承这一个提供基本的增删改查接口
Jpa示例
public interface CourseDao extends JpaRepository<CourseEntity, String>, JpaSpecificationExecutor<CourseEntity> {
List<CourseEntity> findAllByOwnershipStoreIdAndDeleted(String storeId,Integer deleted);
List<CourseEntity> findAllByOwnershipStoreIdAndEnableAndDeleted(String storeId,Boolean enable,Integer deleted);
}
Mybatis-plus示例
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user WHERE phone = #{phone}")
User selectByPhone(String phone;
}
2.相关注解(官网链接)
@TableId
指定表中主键(默认雪花算法)
@TableName(value = "table_name")
指定表名(如果用的是关键字段
则需要加上单引号
进行转义)
@TableField(value = "column_name")
指定表中普通字段信息(注意:如果是is开头的字段,一定要使用该注解指定,比如实体里面有个布尔类型
的字段IsTrue
如果不指定则其字段名,Mybatis-plus
会通过其反射机制处理成true
)
以上三个是Mybatis-plus
注解看了下除了注解字段有区别但是其作用于Jpa
都是一样的,下我放上Jpa
这三个注解对比
@Id
指定表中主键
@Table(name = "table_name"
) 指定表名
@Column(name = "column_name",length = 32)
指定表中普通字段信息
不难看出还是有Jpa的影子,就好比注册中心eureka
和nacos
等只是换汤不换药。
3.相关配置(官网链接)
mybatis-plus:
type-aliases-package: com.project.entity # 别名扫描包
mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml 文件地址,默认值
configuration:
map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
cache-enabled: false # 是否开启二级缓存
global-config:
db-config:
id-type: assign_id # id 为雪花算法生成(优先级低于注解)
update-strategy: not_null # 更新策略: 只更新非空字段
4.复杂查询
如果仅是单表查询Jpa没话说是很强,但是涉及复杂查询要么在dao
层写sql
,要么使用视图层,或者用自带的方法(太难用了这个),还有引用DslQuery
(虽然公司没用,这个可以操作对象达成和mybatis-plus
的LamdaQueryWrapper
查询差不多的效果)。
评论区