基础操作
MybatisPlus提供了一系列基础操作的封装,例如插入、更新、删除、查询等。这些操作都是通过Mapper接口和实现类来完成的,开发者只需要继承BaseMapper接口即可。
1. 基础操作概念
MybatisPlus的基础操作封装了常见的增删改查操作,使得开发者可以更容易地使用MybatisPlus进行数据库操作。这些基础操作是通过Mapper接口和实现类来完成的,开发者只需要继承BaseMapper接口即可。以下是MybatisPlus支持的基础操作:
- 插入:insert、insertBatch、insertOrUpdate 等方法。
- 更新:updateById、update、updateBatchById 等方法。
- 删除:deleteById、deleteByMap、delete 等方法。
- 查询:selectById、selectBatchIds、selectByMap、selectOne、selectList、selectPage等方法。
2. 基础操作示例
下面是一个使用MybatisPlus进行基础操作的示例:
// 定义实体类 @Data public class User { private Long id; private String name; private Integer age; } // 定义Mapper接口 public interface UserMapper extends BaseMapper<User> {} // 插入数据 User user = new User(); user.setName("Tom"); user.setAge(18); userMapper.insert(user); // 更新数据 user.setName("Jerry"); userMapper.updateById(user); // 删除数据 userMapper.deleteById(1L); // 查询数据 User result = userMapper.selectById(2L); List<User> users = userMapper.selectList(null); Page<User> page = userMapper.selectPage(new Page<>(1, 10), null);
在这个示例中,我们定义了一个名为User的实体类,并继承了Serializable接口。然后,我们定义了一个名为UserMapper的Mapper接口,并继承了BaseMapper。在插入、更新、删除、查询数据时,我们分别调用了UserMapper中的insert、updateById、deleteById、selectById等方法,完成了基础操作。
以上就是MybatisPlus基础操作的概念和代码示例。通过使用MybatisPlus提供的基础操作,我们可以更快速、更方便地进行数据库操作,提高开发效率。
分页查询
MybatisPlus支持分页查询,并且提供了丰富的分页查询API,例如Page类、IPage接口、PaginationInterceptor插件等。
1. 分页查询概念
分页查询是一种常见的数据库查询方式,它将大量数据拆分成若干个小块进行查询,从而提高查询效率和用户体验。MybatisPlus提供了丰富的分页查询API,例如Page类、IPage接口、PaginationInterceptor插件等,使得开发者可以更方便地进行分页查询操作。
2. 分页查询示例
下面是一个使用MybatisPlus进行分页查询的示例:
// 定义Mapper接口 public interface UserMapper extends BaseMapper<User> {} // 分页查询数据 Page<User> page = new Page<>(1, 10); QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 18); userMapper.selectPage(page, wrapper);
在这个示例中,我们定义了一个名为UserMapper的Mapper接口,并继承了BaseMapper。在分页查询数据时,我们首先创建了一个名为page的Page对象,指定当前页数为1,每页显示10条记录。然后,我们使用QueryWrapper构造器创建一个查询条件,查询年龄为18的用户信息。最后,我们调用userMapper的selectPage方法进行分页查询,并将查询结果赋值给page对象。
3. 分页查询SQL代码
MybatisPlus会自动根据传入的分页参数生成对应的SQL语句,以下是MybatisPlus生成的分页查询SQL示例:
SELECT id,name,age FROM user WHERE age = ? LIMIT ?,? -- 参数1:查询条件 age=18 -- 参数2:偏移量,即从第几条记录开始查询,例如当前页数为1,每页显示10条数据,则偏移量为0。 -- 参数3:每页显示的记录数,例如当前页数为1,每页显示10条数据,则每页显示的记录数为10。
以上就是MybatisPlus支持分页查询的概念、代码示例和生成的SQL语句。通过使用MybatisPlus提供的分页查询API,我们可以更方便地进行分页查询操作,并且可以提高查询效率和用户体验。
条件构造器
MybatisPlus提供了一种灵活、方便的条件构造器,可以根据动态条件生成SQL语句。常用的构造器有QueryWrapper和UpdateWrapper。
1. 条件构造器概念
条件构造器是MybatisPlus提供的一种灵活、方便的查询方式,可以根据动态条件生成SQL语句。常用的条件构造器有QueryWrapper和UpdateWrapper。QueryWrapper主要用于查询操作,UpdateWrapper主要用于更新操作。
2. 条件构造器示例
下面是一个使用MybatisPlus进行条件查询的示例:
// 定义Mapper接口 public interface UserMapper extends BaseMapper<User> {} // 构造查询条件 QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 18); if (StringUtils.isNotBlank(name)) { wrapper.like("name", name); } List<User> users = userMapper.selectList(wrapper);
在这个示例中,我们定义了一个名为UserMapper的Mapper接口,并继承了BaseMapper。在构造查询条件时,我们使用QueryWrapper构造器创建一个查询条件,查询年龄为18且姓名包含指定字符串的用户信息。其中,eq方法表示等于,like方法表示模糊匹配。如果传入姓名参数,则添加姓名匹配条件。最后,我们调用userMapper的selectList方法执行查询操作,并将查询结果赋值给users对象。
3. 条件构造器SQL代码
MybatisPlus会自动生成对应的SQL语句,以下是MybatisPlus生成的条件查询SQL示例:
SELECT id,name,age FROM user WHERE age = ? AND name LIKE ? -- 参数1:查询条件 age=18 -- 参数2:查询条件 name like '%xxx%'
以上就是MybatisPlus条件构造器的概念、代码示例和生成的SQL语句。通过使用MybatisPlus提供的条件构造器,我们可以更灵活地进行查询操作,并且可以根据动态条件生成对应的SQL语句,提高查询效率和可维护性。
自动填充
MybatisPlus支持自动填充数据库表中的某些字段,例如创建时间、更新时间等。可以通过实现MetaObjectHandler接口实现自动填充功能。
1. 自动填充概念
自动填充是MybatisPlus提供的一种方便、快捷的功能,它可以自动填充数据库表中的某些字段,例如创建时间、更新时间等。通过实现MetaObjectHandler接口并重写对应的方法,即可实现自动填充功能。
2. 自动填充示例
下面是一个使用MybatisPlus进行自动填充的示例:
// 定义实体类 @Data public class User { private Long id; private String name; private Integer age; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; } // 实现MetaObjectHandler接口 @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); } } // 插入数据 User user = new User(); user.setName("Tom"); user.setAge(18); userMapper.insert(user); // 更新数据 user.setName("Jerry"); userMapper.updateById(user);
在这个示例中,我们定义了一个名为User的实体类,并在其中定义了创建时间和更新时间两个属性,并在其注解@TableField中指定了对应的填充策略。然后,我们实现了一个名为MyMetaObjectHandler的类,并继承了MetaObjectHandler接口,重写了insertFill、updateFill方法,分别表示插入和更新时填充对应的字段。最后,在插入和更新数据时,MybatisPlus会自动调用MyMetaObjectHandler的对应方法进行自动填充。
3. 自动填充SQL代码
自动填充是在Java层面进行处理的,不需要生成对应的SQL语句。
以上就是MybatisPlus自动填充的概念、代码示例和说明。通过使用MybatisPlus提供的自动填充功能,我们可以更方便地进行数据库操作,并且可以避免手动填充某些字段的繁琐工作。
代码生成器
MybatisPlus提供了一个强大的代码生成器,可以根据数据库表结构自动生成JavaBean、Mapper接口、XML文件等代码,极大地提高了开发效率。
1. 代码生成器概念
MybatisPlus提供了一个强大的代码生成器,可以根据数据库表结构自动生成JavaBean、Mapper接口、XML文件等代码,极大地提高了开发效率。通过使用代码生成器,我们可以快速生成基础的CURD代码,并且可以避免手写重复的代码。
2. 代码生成器示例
下面是一个使用MybatisPlus代码生成器的示例:
// 配置代码生成器 AutoGenerator generator = new AutoGenerator(); GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir("src/main/java"); globalConfig.setAuthor("Little B"); generator.setGlobalConfig(globalConfig); DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf8"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("123456"); generator.setDataSource(dataSourceConfig); PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.example.mybatisplusdemo"); packageConfig.setEntity("entity"); packageConfig.setMapper("mapper"); generator.setPackageInfo(packageConfig); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); strategyConfig.setEntityLombokModel(true); strategyConfig.setRestControllerStyle(true); strategyConfig.setInclude("user"); generator.setStrategy(strategyConfig); TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setEntity("/templates/entity.java"); templateConfig.setMapper("/templates/mapper.java"); templateConfig.setXml("/templates/mapper.xml"); generator.setTemplate(templateConfig); generator.execute();