SpringBoot+maven+Mybatis+MybatisPlus+shiro+freemarker+mysql

已搭建的框架,简单使用介绍

开发环境

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

  1. eclipse/idea:执行com.StartApplication中的main方法
  2. 命令行:java -jar ***.jar(架包由打包命令生成)用于服务器部署
  3. 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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342