springboot权限管理系统 学习(六)

16 篇文章 2 订阅
10 篇文章 1 订阅

项目demo的构建

model层

model层和entity层功能其实是一样的,名字叫的不同而已。
用了一个插件lombok,可以去plugin上面下载,免去了getter和setter ,直接在最上面加上一个@Data就可以了,然后的话,对id进行序列化;其次对时间date可以做一个JsonFormat的操作,解决相差8小时的问题 @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)
总的来说,写model层的时候,(1)、主要对数据库里面的字段进行了操作,都用private来修饰。(2)、在最前面加上@Data注解,免去了Getter和Setter,用的是lombok插件 (3)、在对Data日期操作的时候采用的JsonFormat,解决相差8小时的问题,因为北京时间对于我们来说是在东八区

@JsonFormat(pattern = "yyyy-MM-dd  HH:mm:ss",timezone="GMT+8")
Mapper层

mapper层和Dao层功能也是一样的,名字不同叫的不同而已,就比如有两只手机,一个是小米手机,还有一个是苹果手机,这两个本质都是手机,只是品牌不一样,叫法不一样而已,功能都是一样的。
mapper层的话,由于是和数据库进行交互的,所以的话,要先加上一个注解mapper,然后的话,再写相对应的参数,比如要返回的类型,函数名称,入参是什么,都在mapper里面写
总的来说的话,先加上@mapper注解,再写上相对应的从数据库里面实现的语句,比如SysUser getPerson(String username);

MapperXml

里面写的是从数据库里面执行刚刚的mapper层里面的语句的SQL文件,简单的语句可以用插件生成,我用的是MybatisCodeHelp,里面写的都是Sql的语句,可以先从自己的本地数据库里面执行一下sql语句能不能执行,然后再到这个MapperXml文件里面,这里提一下,这个MapperXML文件的目录默认是放在resource目录下面的,然后的话,之前是在yml文件里面配置过的,用的也是驼峰形式的, mapUnderscoreToCamelCase: true

mybatis:
  type-aliases-package: com.hws.authority.model
  mapper-locations: classpath:/mapperxml/*
  configuration:
    mapUnderscoreToCamelCase: true

Service层

里面的话就是定义一些接口interface,这些接口的话和刚刚那个Mapper里面的内容是一样的,不用加上任何注解

impl

impl里面的话,是一个class,并不是interfance,里面的话,在开头的时候要先加上@Service注解,然后的话,写上刚刚在service层下面实现的方法,有@Overrride,比较方便的一种方式是在service层刚刚写的接口的那个函数后面按下 Alt + Enter 键,就可以在impl下面自动给你写上method实现方法了,然后的话,还要引入刚刚写的Mapper层,并且加上注解@Resource 或者 @Autowired

@Resource
private SysUserMapper sysUserMapper;

总的来说的话,就是service层下的interface层里面不用加任何注解,在impl文件下的实现类里面
(1)、先写上@Service注解,
(2)、然后的话,引入刚刚写的mapper层文件,并且加上注解@Resource
private SysUserMapper sysUserMapper;
(3)、然后加上注解,写的是事务的注解@Transactional
(4)、然后写的内容是method方法

SysUserService文件下面的

public interface SysUserService{


    int deleteByPrimaryKey(Integer id);

    int insert(SysUser record);

    int insertSelective(SysUser record);

    SysUser selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(SysUser record);

    int updateByPrimaryKey(SysUser record);

    SysUser getPerson(String username);
}
SysUserServiceImpl下面的


@Service
@Transactional
public class SysUserServiceImpl implements SysUserService{

    @Resource
    private SysUserMapper sysUserMapper;

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return sysUserMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insert(SysUser record) {
        return sysUserMapper.insert(record);
    }

    @Override
    public int insertSelective(SysUser record) {
        return sysUserMapper.insertSelective(record);
    }

    @Override
    public SysUser selectByPrimaryKey(Integer id) {
        return sysUserMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(SysUser record) {
        return sysUserMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(SysUser record) {
        return sysUserMapper.updateByPrimaryKey(record);
    }

    @Override
    public SysUser getPerson(String username) {
        return sysUserMapper.getPerson(username);
    }

}
@Autowired和@Resource的区别
@Resource

1、@Resource 默认是按照byName 自动注入的
2、如果既不指定name属性,也不指定type属性,则默认是按照byName方式进行查找,如果没有找到默认的bean,则回退一个原始的类型进行查找,如果找到就注入

@Autowired

1、默认先按照byType进行匹配,如果发现找到多个bean,则又按照byName的方式进行匹配,如果还有多个,则报出异常

Controller层

1、首先先引入@Controller注解,
2、再写上映射的地址@RequestMapping
3、写上日志的输出,也是注解,用@Slf4j 表示
4、在controller层里面引入之前写的service文件,并且加上@Resource注解

@Resource
    private SysUserService sysUserService;

5、在实现的方法上面加上@RequestMapping,作为实现这个方法的映射,@ResponseBody的话,就是返回一个以Json为格式的
6、在返回值那里调用service里面的方法内容

@Controller
@RequestMapping("user")
@Slf4j
public class UserController {

    @Resource
    private SysUserService sysUserService;

    @GetMapping("/{username}")
    @ResponseBody
    public SysUser getHello(@PathVariable String username){
        log.info("UserContoller.user():param(username = "+username+")");
        return sysUserService.getPerson(username);
    }

}

布局

圣杯布局

在这里插入图片描述

导入X-admin

首先的话,由于某一个head里面的配置文件过多,所以把这个head文件里面的内容抽出来,单独作为一个html,然后用th:replace的标签给它加上去,最终的话,index.html文件的head里面只有一行,在SpringBoot加载的时候,默认加载的是templates下面的index.html作为入口,可以直接写http://localhost:8080/ 去访问
注意:第一个header为上述公共部分的文件名,第二个html为th:fragment的值。这样便可以解决公共部分代码的抽取。
在这里插入图片描述

<header th:replace="header::html"></header>

head.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta name="renderer" content="webkit|ie-comp|ie-stand">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
        <meta http-equiv="Cache-Control" content="no-siteapp" />
        <link rel="stylesheet" th:href="@{/xadmin/css/font.css}" />
        <link rel="stylesheet" th:href="@{/xadmin/css/xadmin.css}" />
        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
        <script type="text/javascript"src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
        <script th:src="@{/xadmin/lib/layui/layui.js}" charset="utf-8"></script>
        <script type="text/javascript" th:src="@{/xadmin/js/xadmin.js}"></script>
        <script type="text/javascript" th:src="@{/ztree/jquery.ztree.all-3.5.min.js}"></script>
        <script type="text/javascript" th:src="@{/ztree/ztree-menu.js}"></script>
        <script type="text/javascript" th:src="@{/my/js/cookie.js}"></script>
        <script type="text/javascript" th:src="@{/my/js/permission.js}"></script>
        <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
        <!--[if lt IE 9]>
        <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
        <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>
</html>

引入路由

从index.html文件里面,里面加入的是./welcome.html页面,在浏览器中我们看到管理台右边是404页面,所以这个里面要加一个路由进去,这里顺便搜了一下iframe
iframe定义和用法
iframe 元素会创建包含另外一个文档的内联框架(即行内框架),就类似于一个内嵌的网页
在这里插入图片描述

构建步骤以及编写公共的ApiController

1、引入x-admin
2、index.html中iframe
3、编写ApiController.java
4、复制X-admin的user-list.html
5、编写UserController.java

其中iframe可以简单的认为是一个路由,在iframe里面通过编写的ApiController方法,可以实现一些页面的跳转控制

编写ApiController.java

在controlelr层里面加入ApiController,用于公共的API,
1、首先的话,加入@Controller注解,
2、然后的话,加入@RequestMapping,里面的话,加入地址的变量,里面写入${apiURL},(其中的话,apiURL是在.yml文件里面定义的,以后如果有变动在.yml里面修改即可)

@Controller
@RequestMapping("${apiURL}")
public class ApiController {
    
}
apiURL: /api

SpringMVC返回值类型

**主要有5种,
1、String字符串的形式
2、ModelAndView

public ModelAndView getUserList() {
		ModelAndView modelAndView = new ModelAndView();
        
		// 将数据放入modelAndView对象
		modelAndView.addObject("userList", userList);
		
		// 将返回的逻辑视图名称放入modelAndView对象
		modelAndView.setViewName("userList");
		
		return modelAndView;

3、void**
如果是返回 void 话,就必须要在方法的参数中添加 HttpServletRequest 和 HttpServletResponse 来进行页面的跳转,
比如:

public void test(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// 转发到指定页面
	request.getRequestDispatcher("xxx").forward(request, response);
	// 或者重定向到指定页面
	response.sendRedirect("/xxx");
}

4、Map
5、Model

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐形的稻草人HWS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值