MybatisPlus的一点了解
1.MybatisPlus使用:
(1)Serializable id 这种参数要怎么传入值,对应的底层调用和数据库表格命名和实体类映射之间有什么关系
在 Java 中,Serializable
是一个标记接口,它表示一个类的实例可以被序列化,即可以被转换为字节流,并可以在网络上传输或者存储到文件中。在 MyBatis-Plus 的 BaseMapper
接口中,Serializable id
通常用于表示实体类的主键字段,这个字段必须实现 Serializable
接口,以便 MyBatis-Plus 能够处理主键。 以下是如何传入 Serializable id
值以及其与数据库表格命名和实体类映射之间关系的解释:
如何传入 Serializable id
值
-
基本数据类型:如果你的主键是基本数据类型(如
int
、long
等),可以直接传入值。int result = baseMapper.deleteById(1L); // 传入一个 long 类型的主键值
-
包装数据类型:如果你的主键是包装数据类型(如
Integer
、Long
等),也可以直接传入值。int result = baseMapper.deleteById(Integer.valueOf(1)); // 传入一个 Integer 类型的主键值
-
自定义主键类型:如果你的主键是一个自定义类型(比如一个
UUID
类型的字符串),你需要传入该类型的实例。UUID id = UUID.fromString("123e4567-e89b-12d3-a456-426614174000"); int result = baseMapper.deleteById(id); // 传入一个 UUID 类型的主键值
底层调用关系
当调用 BaseMapper
的方法,如 deleteById
,MyBatis-Plus 会:
-
使用反射获取传入的主键值。
-
根据实体类的映射配置,构造相应的 SQL 语句。
-
通过 MyBatis 的 SQL 会话(
SqlSession
)执行该 SQL 语句。
数据库表格命名与实体类映射关系
MyBatis-Plus 使用约定优于配置的原则,但也可以通过注解或配置文件进行自定义映射。以下是默认的映射规则:
-
表名与类名映射:默认情况下,实体类的类名会被转换为下划线分隔的表名。例如,
User
类会被映射到user
表。 -
主键字段映射:默认情况下,实体类中名为
id
的字段会被映射为表的主键字段。 -
字段与列映射:实体类中的字段名会被转换为下划线分隔的列名。例如,
userName
字段会被映射到user_name
列。 这些映射可以通过以下方式自定义:
-
@TableName:用于指定实体类对应的表名。
-
@TableId:用于指定实体类中作为主键的字段。
-
@TableField:用于指定实体类中字段与数据库列的映射关系。 例如:
@TableName("sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
@TableField("user_name")
private String userName;
// 其他字段...
}
在这个例子中,User
类映射到 sys_user
表,id
字段是主键,并且 userName
字段映射到 user_name
列。当你调用 baseMapper.deleteById(id)
方法时,MyBatis-Plus 会生成并执行类似于 DELETE FROM sys_user WHERE id = ?
的 SQL 语句。
(2).QueryWapper了解——条件构造器
在 MyBatis-Plus 中,QueryWrapper
是一个非常重要的功能类,它用于构建 SQL 查询条件。QueryWrapper
提供了一种链式编程的方式来构造复杂的查询语句,无需手动编写 SQL 语句。以下是 QueryWrapper
的一些核心功能和用法:
功能概述
-
条件构造:通过
QueryWrapper
可以方便地添加各种查询条件,如等于、不等于、大于、小于、模糊查询等。 -
实体包装:可以直接传入实体对象,
QueryWrapper
会根据实体类的字段及其注解自动构造查询条件。 -
自定义 SQL:除了链式方法外,还可以直接在
QueryWrapper
中写入自定义的 SQL 语句。 -
嵌套查询:支持嵌套查询,可以构建复杂的查询逻辑。
常用方法
以下是一些 QueryWrapper
的常用方法:
-
eq(String column, Object val)
:添加等于条件。 -
ne(String column, Object val)
:添加不等于条件。 -
gt(String column, Object val)
:添加大于条件。 -
ge(String column, Object val)
:添加大于等于条件。 -
lt(String column, Object val)
:添加小于条件。 -
le(String column, Object val)
:添加小于等于条件。 -
like(String column, Object val)
:添加模糊查询条件。 -
in(String column, Collection<?> values)
:添加 IN 查询条件。 -
and(Consumer<QueryWrapper<T>> consumer)
:添加 AND 嵌套条件。 -
or(Consumer<QueryWrapper<T>> consumer)
:添加 OR 嵌套条件。 -
orderByDesc(String column)
:添加降序排序。 -
orderByAsc(String column)
:添加升序排序。
使用示例
以下是一个简单的 QueryWrapper
使用示例:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三") // 查询名字等于张三的用户
.between("age", 18, 30) // 并且年龄在18到30岁之间
.like("email", "example.com"); // 并且邮箱包含"example.com"
List<User> users = userMapper.selectList(queryWrapper);
在这个例子中,QueryWrapper
被用来构建一个查询,它查找名字为“张三”,年龄在18到30岁之间,且邮箱包含“example.com”的所有用户。 通过 QueryWrapper
,MyBatis-Plus 可以自动生成对应的 SQL 语句,无需开发者手动编写,从而简化了数据库操作,并提高了开发效率。
(3)条件查询
//常用示例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username", "h") // 模糊查询——中间 %${ }%
.notLike("column","val") //not Like %${ }%
.likeLeft("column","val") //%${ }
.likeRight("column","val") //${ }%
.ge("column","val") //<=
.isNotNull("column") //不为空
.or() //后面一个条件合并为or //常规默认为and
// or里面包含自己的条件时,拼接or里面条件为or,后面默认还是and
.eq("sex","女"); //相等
QueryWapper——子查询——insql(column,“sql语句”)——一般是id对应查找