Springboot实战:Mybatis-plus使用示例(含增删改查及分页查询,附源码)
文章目录
- 前言
-
-
-
- 1. 数据库表结构
- 2. 接口介绍
- 3. 具体实现
- 4. 代码生成器
- 4. 完整代码
-
-
使用本教程代码前,请参考Mybatis-puls官网并正确配置mybatis-plus开发环境
前言
首先需要根据官网配置代码生成器(本教程结尾有提供),生成代码模板,或自己手动配置
本博客项目源码地址:
- 项目源码github地址
- 项目源码国内gitee地址
1. 数据库表结构
sql文件结尾有提供
@Data@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)public class User extends Model<User> { private static final long serialVersionUID=1L; @TableId(value = "user_id", type = IdType.AUTO) private Long userId; /** * 用户名 */ private String username; /** * 账号 */ private String account; /** * 密码 */ private String password; /** * 创建日期 */ private Date createdDate; /** * 创建人 */ private Long createdBy; /** * 修改日期 */ private Date updatedDate; /** * 修改人 */ private Long updatedBy; @Override protected Serializable pkVal() { return this.userId; }}
2. 接口介绍
以查询用户为例子
public interface IUserService extends IService<User> { /** * 添加用户 * * @param user 用户数据 * @return b */ boolean addUser(User user); /** * 删除用户 * * @param userId 用户id * @return b */ boolean delUserById(Long userId); /** * 删除用户,其它条件 * * @param account 用户账号 * @return b */ boolean delUser(String account); /** * 更新用户 * * @param user 用户数据 * @return b */ boolean updUser(User user); /** * 查询用户 * * @param user 查询用户 * @return b */ List<User> listUser(User user); /** * 分页查询用户 * * @param user 查询用户的条件 * @param pageNum 页码 * @param pageSize 页大小 * @return b */ PageInfo<User> listUserPage(User user, Integer pageNum, Integer pageSize);}
3. 具体实现
@Servicepublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { @Override public boolean addUser(User user) { return this.save(user); } @Override public boolean delUserById(Long userId) { return this.removeById(userId); } @Override public boolean delUser(String account) { QueryWrapper<User> eq = new QueryWrapper<User>() // 添加删除条件 .eq("account", account); return this.remove(eq); } @Override public boolean updUser(User user) { StrUtil.isNotBlank(user.getPassword()); UpdateWrapper<User> set = new UpdateWrapper<User>() .eq("user_id", user.getUserId()) // 当传入的密码不为空,则更新 .set(StrUtil.isNotBlank(user.getPassword()), "password", user.getPassword()) // 当传入的用户名不为空,则更新 .set(StrUtil.isNotBlank(user.getUsername()), "username", user.getUsername()) // 更新时间 .set("updated_date", new Date()); return this.update(set); } @Override public List<User> listUser(User user) { QueryWrapper<User> eq = new QueryWrapper<User>() // 当用户名不为空,该条件生效,执行模糊查询 .like(StrUtil.isNotBlank(user.getUsername()), "username", user.getUsername()) // 当用户账号不为空,该条件生效 .eq(StrUtil.isNotBlank(user.getAccount()), "account", user.getAccount()) // 根据created_date倒序排序 .orderBy(true, false, "created_date"); return this.list(eq); } @Override public PageInfo<User> listUserPage(User user, Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> users = this.listUser(user); return new PageInfo<>(users); }}
4. 代码生成器
/** * 配置参考 : https://baomidou.com/guide/generator.html * * @author: qiDing * date: 2020/6/4 0004 14:56 * description: TODO */public class GlobalConfigs { /** * 数据库地址 */ private static final String DB_URL = "jdbc:mysql://192.168.41.128:3306/example?useUnicode=true&useSSL=false&characterEncoding=utf8&useTimezone=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&useServerPrepStmts=true&allowMultiQueries=true"; /** * db 账号 */ private static final String USERNAME = "root"; /** * db 密码 */ private static final String PASSWORD = "123456"; /** * db 驱动 */ private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver"; /** * 存放路径,包路径 */ private static final String PACKAGE = "com.example.mybatis_generation"; /** * 需要生成的数据库表名,数组,可多个 */ private static final String[] TABLE_NAME = {"user"}; public static void main(String[] args) { boolean fileOverride = true; GlobalConfig config = new GlobalConfig(); String path = System.getProperty("user.dir"); config.setActiveRecord(true) .setAuthor("qiDing") .setOutputDir(path + "\\src\\main\\java\\") .setBaseResultMap(true) .setBaseColumnList(true) .setFileOverride(fileOverride); //****************************** resource *************************************** DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL) .setUrl(DB_URL) .setUsername(USERNAME) .setPassword(PASSWORD) .setDriverName(DRIVER_NAME) .setTypeConvert(new MySqlTypeConvert() { @Override public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { System.out.println("转换类型:" + fieldType); //tinyint转换成Boolean if (fieldType.toLowerCase().contains("tinyint")) {return DbColumnType.BOOLEAN; } if (fieldType.toLowerCase().contains("datetime")) {return DbColumnType.DATE; } return (DbColumnType) super.processTypeConvert(globalConfig, fieldType); } }); //****************************** Policy configuration ****************************************************** List<TableFill> tableFillList = new ArrayList<>(); tableFillList.add(new TableFill("gmt_modified", FieldFill.INSERT_UPDATE)); tableFillList.add(new TableFill("modifier_id", FieldFill.INSERT_UPDATE)); tableFillList.add(new TableFill("creator_id", FieldFill.INSERT)); tableFillList.add(new TableFill("gmt_create", FieldFill.INSERT)); tableFillList.add(new TableFill("available_flag", FieldFill.INSERT)); tableFillList.add(new TableFill("deleted_flag", FieldFill.INSERT)); tableFillList.add(new TableFill("sync_flag", FieldFill.INSERT)); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig .setCapitalMode(true) .setEntityLombokModel(true) .setNaming(NamingStrategy.underline_to_camel) .setTableFillList(tableFillList) .setInclude(TABLE_NAME); new AutoGenerator().setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(strategyConfig) .setPackageInfo( new PackageConfig() .setParent(PACKAGE) .setController("controller") .setEntity("domain") .setMapper("dao") .setXml("dao") ) .setTemplate( new TemplateConfig() .setServiceImpl("templates/serviceImpl.java") ) .execute(); }}
4. 完整代码
- Springboot开发脚手架,集合各种常用框架使用案例,完善的文档,致力于让开发者快速搭建基础环境并让应用跑起来。
- 项目源码国内gitee地址
- 项目源码github地址