1. 绪言
1.2 项目介绍
dp-LTE
dp-PRO
dp-BOOT
dp-GEN
1.1 作者序
1.3 技术方案
1.4 使用(常见问题见3.4节)
项目仓库
开发环境
使用步骤
在线演示
代码生成器
2. 开发规约
2.1 工程规约
2.1 命名规范
模块命名
DAO命名
静态资源命名
3. 二次开发
3.2 后端开发
Dao开发
Mapper.xml开发
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.chenlin.dp.shiro.dao.SysUserMapper">
<select id="listForPage" resultType="SysUserEntity">
</select>
</mapper>
Mapper.java开发
@MapperScan
public interface SysUserMapper extends BaseMapper<SysUserEntity> {
SysUserEntity getByUserName(String username);
List<Long> listAllMenuId(Long userId);
int updatePswdByUser(Query query);
int updateUserStatus(Query query);
int updatePswd(SysUserEntity user);
}
Entity开发
public class SysUserEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
private Long userId;
/**
* 用户名
*/
private String username;
public SysUserEntity() {
super();
}
/* 此处省去 get 和 set 方法, 实际开发添加 */
}
Manager开发
public interface SysUserManager {
List<SysUserEntity> listUser(Page<SysUserEntity> page, Query search);
}
@Component("sysUserManager")
public class SysUserManagerImpl implements SysUserManager {
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private SysMenuMapper sysMenuMapper;
@Autowired
private SysRoleMapper sysRoleMapper;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Override
public List<SysUserEntity> listUser(Page<SysUserEntity> page, Query search) {
return sysUserMapper.listForPage(page, search);
}
}
Service开发
public interface SysUserService {
Page<SysUserEntity> listUser(Map<String, Object> params);
}
@Service("sysUserService")
public class SysUserServiceImpl implements SysUserService {
@Autowired
private SysUserManager sysUserManager;
@Override
public Page<SysUserEntity> listUser(Map<String, Object> params) {
Query form = new Query(params);
Page<SysUserEntity> page = new Page<>(form);
sysUserManager.listUser(page, form);
return page;
}
}
Controller开发
@RestController
@RequestMapping("/sys/user")
public class SysUserController extends AbstractController {
@Autowired
private SysUserService sysUserService;
/**
* 用户列表
* @param params
* @return
*/
@RequestMapping("/list")
public Page<SysUserEntity> list(@RequestBody Map<String, Object> params) {
if(getUserId() != SystemConstant.SUPER_ADMIN) {
params.put("userIdCreate", getUserId());
}
return sysUserService.listUser(params);
}
/**
* 新增用户
* @param user
* @return
*/
@SysLog("新增用户")
@RequestMapping("/save")
public R save(@RequestBody SysUserEntity user) {
user.setUserIdCreate(getUserId());
return sysUserService.saveUser(user);
}
}
3.1 数据库
CREATE TABLE `sys_user` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL COMMENT '用户名',
`password` varchar(50) DEFAULT NULL COMMENT '密码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`mobile` varchar(100) DEFAULT NULL COMMENT '手机号',
`status` tinyint(255) DEFAULT NULL COMMENT '状态 0:禁用,1:正常',
`user_id_create` bigint(255) DEFAULT NULL COMMENT '创建用户id',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户';
3.4 常见问题
3.4.1 框架的页面是如何跳转
3.4.2 新增模块点击菜单报错
3.4.3 框架的工具类在哪里
3.4.4 为什么使用原生layer.js报错
3.4.5 关于应用分层
3.4.6 关于事务
3.4.7 数据库问题
3.4.8 如何使用日志AOP
3.4.11 如何使用动态数据源切换
3.4.12 数据权限如何使用
3.4.13 接口管理如何配置
3.4.14 后端校验如何使用
更多问题
3.3 前端开发
4. 开发指引
Query(查询条件实体类)
public class Query extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public Query() {
super();
}
public Query(Map<String, Object> params){
this.putAll(params);
}
public Double getAsDouble(String name) {
Object value = this.get(name);
if (value != null)
return Double.valueOf(value.toString());
return null;
}
public String getAsString(String name) {
return this.get(name).toString();
}
public Long getAsLong(String name) {
Object value = this.get(name);
if (value != null)
return Long.valueOf(value.toString());
return null;
}
public Integer getAsInt(String name) {
Object value = this.get(name);
if (value != null)
return Integer.valueOf(value.toString());
return null;
}
public Boolean getAsBoolean(String name) {
Object value = this.get(name);
if (value != null)
return Boolean.valueOf(value.toString());
return null;
}
public java.util.Date getAsDate(String name) {
Object value = this.get(name);
if (value != null)
return Date.valueOf(value.toString());
return null;
}
public Object getObj(String name) {
return this.get(name);
}
}
R(页面相应实体类)
public class CommonUtils {
/**
* 新增,修改提示
* @param count
* @return
*/
public static R msg(int count) {
if(isIntThanZero(count)){
return R.ok(MsgConstant.MSG_OPERATION_SUCCESS);
}
return R.error(MsgConstant.MSG_OPERATION_FAILED);
}
/**
* 查询详情提示
* @param data
* @return
*/
public static R msg(Object data) {
if(isNullOrEmpty(data)){
return R.error(MsgConstant.MSG_INIT_FORM);
}
return R.ok().put(SystemConstant.DATA_ROWS, data);
}
/**
* 返回数据
* @param data
* @return
*/
public static R msgNotCheckNull(Object data) {
return R.ok().put(SystemConstant.DATA_ROWS, data);
}
/**
* 删除提示
* @param total
* @param count
* @return
*/
public static R msg(Object[] total, int count) {
if(total.length == count){
return R.ok(MsgConstant.MSG_OPERATION_SUCCESS);
}else{
if(isIntThanZero(count)){
return R.error(MsgConstant.removeFailed(total.length, count));
}else{
return R.error(MsgConstant.MSG_OPERATION_FAILED);
}
}
}
}
分页查询
数据权限
@MapperScan
public interface SysUserMapper extends BaseMapper<SysUserEntity> {
List<Long> listAllOrgId(Long userId);
}