已搭建的框架,简单使用介绍
开发环境
jdk1.8
maven
目录结构
该工程不是传统的javaweb工程,因此没有web.xml,也没有WEB-INF等文件夹。</br>
采用maven聚合方式,由两个模块组成:core模块:核心代码、工具类、配置、启动信息等</br>
config:配置bean(一般不要修改)</br>
util:工具类,可供调用</br>web模块:业务代码(action、service、mapper、bean等)</br>
action:admin(电脑端)、api(对外接口)、mobile(移动端)</br>
resources:mapper(Mapper.xml)、static(静态文件:js、css、img等)、templates(页面)</br>
启动方式
启动前初始化项目:在项目根目录执行maven命令:mvn clean install
- eclipse/idea:执行com.StartApplication中的main方法
- 命令行:java -jar ***.jar(架包由打包命令生成)用于服务器部署
- maven:在core模块根目录执行命令:mvn spring-boot run
访问:localhost:8080/login</br>
restful风格url:无需添加后缀
项目配置
所有配置集中在core模块中,application.yml为数据库配置文件,logback-spring.xml为日志配置文件。</br>
开发注意:所有业务逻辑写在web模块,核心代码写入core模块。</br>
端口配置在application.yml中。</br>
热部署开关在application.yml中,打开时,不需要手动重启,即可对代码进行更新。</br>
项目打包
在web模块根目录执行maven命令:mvn clean package</br>
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>
您当前是游客,<a href="javascript:void(0);" class="dropdown-toggle qqlogin" >登录</a>
</@shiro.guest>
2.user(已经登录,或者记住我登录)
<@shiro.user>
欢迎[<@shiro.principal/>]登录,<a href="/logout.shtml">退出</a>
</@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<br/>
</@shiro.hasRole>
7.hasAnyRoles标签(判断是否拥有这些角色的其中一个)
<@shiro.hasAnyRoles name="admin,user,member">
用户[<@shiro.principal/>]拥有角色admin或user或member<br/>
</@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<Config>
public interface ConfigService extends IService<Config> {}
serviceImpl
自定继承ServiceImpl<ConfigMapper, Config>、实现service
@Service
public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> implements ConfigService {}
mapper
自动继承BaseMapper<Config>
public interface ConfigMapper extends BaseMapper<Config> {}
bean
自动继承Model<Config>
@TableName("config")
public class Config extends Model<Config> {}
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="com.ydt.zdpyc.mapper.ConfigMapper">
</mapper>
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<Config> list = configService.selectByMap(map);
根据多个条件查找,map为Map<String, Object>;
自带多种更新方法,代码提示即可查看。
分页
mapper:
//普通的根据条件查询所有记录
configMapper.selectConfigList(page,map);
service:
public Page<Config> selectUserPage(Page<Config> page,Map<String, Object> map) {
page.setRecords(configMapper.selectConfigList(page,map));
return page;
}
action:
Page<Config> page = new Page<>(1, 10);
//条件
Map<String, Object> map = new HashMap<String, Object>;
page = configService.selectUserPage(page,map);
日志
在需要打日志的类中加入:Logger log = LoggerFactory.getLogger(this.getClass());
引入的包为:import org.slf4j.Logger;
import org.slf4j.LoggerFactory;