- 前言
- 1. 数据库表结构
- 2. 接口介绍
- 3. 具体实现
- 4. 代码生成器
- 4. 完整代码
使用本教程代码前,请参考Mybatis-puls官网并正确配置mybatis-plus开发环境
前言首先需要根据官网配置代码生成器(本教程结尾有提供),生成代码模板,或自己手动配置
本博客项目源码地址:
- 项目源码github地址
- 项目源码国内gitee地址
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. 具体实现
@Service
public 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地址
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)