已搭建的框架,简单使用介绍
开发环境
jdk1.8
maven
目录结构
该工程不是传统的javaweb工程,因此没有web.xml,也没有WEB-INF等文件夹。
采用maven聚合方式,由两个模块组成:core模块:核心代码、工具类、配置、启动信息等
config:配置bean(一般不要修改)
util:工具类,可供调用web模块:业务代码(action、service、mapper、bean等)
action:admin(电脑端)、api(对外接口)、mobile(移动端)
resources:mapper(Mapper.xml)、static(静态文件:js、css、img等)、templates(页面)
启动方式
启动前初始化项目:在项目根目录执行maven命令:mvn clean install
- eclipse/idea:执行com.StartApplication中的main方法
- 命令行:java -jar ***.jar(架包由打包命令生成)用于服务器部署
- maven:在core模块根目录执行命令:mvn spring-boot run
访问:localhost:8080/login
restful风格url:无需添加后缀
项目配置
所有配置集中在core模块中,application.yml为数据库配置文件,logback-spring.xml为日志配置文件。
开发注意:所有业务逻辑写在web模块,核心代码写入core模块。
端口配置在application.yml中。
热部署开关在application.yml中,打开时,不需要手动重启,即可对代码进行更新。
项目打包
在web模块根目录执行maven命令:mvn clean package
web模块target目录生成项目架包,用于服务器发布。
shiro使用方法
过滤器配置在com.ydt.zdpyc.config.ShiroConfig中,默认除“/login","/dologin"等操作以外的方法,都需要先登录。
java中判断是否登录:
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginName, password);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(usernamePasswordToken);
UUser user = (UUser) subject.getPrincipal();
session.setAttribute(SystemConfig.ManagerSessionName, user);
//完成登录
} catch (Exception e) {
//返回登录页面
}
freemarker中标签:
1.guest(游客)
<@shiro.guest>
您当前是游客,登录
@shiro.guest>
2.user(已经登录,或者记住我登录)
<@shiro.user>
欢迎[<@shiro.principal/>]登录,退出
@shiro.user>
3.authenticated(已经认证,排除记住我登录的)
<@shiro.authenticated>
用户[<@shiro.principal/>]已身份验证通过
@shiro.authenticated>
4.notAuthenticated(和authenticated相反)
<@shiro.notAuthenticated>
当前身份未认证(包括记住我登录的)
@shiro.notAuthenticated>
5.principal标签
nickname为user对象中的属性
<@shiro.principal property="nickname"/>
7.hasAnyRoles标签(判断是否拥有这些角色的其中一个)
<@shiro.hasRole name="admin">
用户[<@shiro.principal/>]拥有角色admin
@shiro.hasRole>
7.hasAnyRoles标签(判断是否拥有这些角色的其中一个)
<@shiro.hasAnyRoles name="admin,user,member">
用户[<@shiro.principal/>]拥有角色admin或user或member
@shiro.hasAnyRoles>
8.lacksRole标签(判断是否不拥有这个角色)
<@shiro.lacksRole name="admin">
用户[<@shiro.principal/>]不拥有admin角色
@shiro.lacksRole>
9.hasPermission标签(判断是否有拥有这个权限)
<@shiro.hasPermission name="user:add">
用户[<@shiro.principal/>]拥有user:add权限
@shiro.hasPermission>
10.lacksPermission标签(判断是否没有这个权限)
<@shiro.lacksPermission name="user:add">
用户[<@shiro.principal/>]不拥有user:add权限
@shiro.lacksPermission>
代码生成工具
生成方法
com.ydt.zdpyc.util.MpGenerator
将表名写入下列数组,执行main方法即可(可同时生成多个,生成后的文件在根目录的temp文件夹下)。
private static String[] tables = new String[]{"u_permission","u_role","u_role_permission","u_user","u_user_role"};
生成结果
以生成 config 表为例
action
自动继承:AbstractAction(提供一些公用方法)
@Controller
@RequestMapping("/config")
public class ConfigAction extends AbstractAction {}
service
自定继承IService
public interface ConfigService extends IService {}
serviceImpl
自定继承ServiceImpl、实现service
@Service
public class ConfigServiceImpl extends ServiceImpl implements ConfigService {}
mapper
自动继承BaseMapper
public interface ConfigMapper extends BaseMapper {}
bean
自动继承Model
@TableName("config")
public class Config extends Model {}
Mapper.xml
只有命名空间,如果只是普通的增删改差,这个文件可以不使用
mybatisplus插件
以上文中生成的代码为例(config表)
新增
boolean i = configService.insert(config);
自带多种插入方法,代码提示即可查看。
如果不setId(),框架将自动填充32位uuid。
删除
boolean i = configService.deleteById(id);
自带多种删除方法,代码提示即可查看。
修改
boolean i = configService.updateById(config);
自带多种更新方法,代码提示即可查看。
查找
Config config = configService.selectById(id);
根据id查找;
List list = configService.selectByMap(map);
根据多个条件查找,map为Map;
自带多种更新方法,代码提示即可查看。
分页
mapper:
//普通的根据条件查询所有记录
configMapper.selectConfigList(page,map);
service:
public Page selectUserPage(Page page,Map map) {
page.setRecords(configMapper.selectConfigList(page,map));
return page;
}
action:
Page page = new Page<>(1, 10);
//条件
Map map = new HashMap;
page = configService.selectUserPage(page,map);
日志
在需要打日志的类中加入:Logger log = LoggerFactory.getLogger(this.getClass());
引入的包为:import org.slf4j.Logger;
import org.slf4j.LoggerFactory;