栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

知识点2--spring boot实现三层架构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

知识点2--spring boot实现三层架构

本篇的目标是介绍使用 spring boot + mybatis-plus + freemarker + lombok实现一个三层架构例子

先说明一下用到的组件:
mybatis-plus是mybatis为了配合spring-boot官方出的一个版本

freemarker是现在较为流行的一种面向开发者的前端展示框架,这里要特别说明它是不面向用户的,编写SSM的时候我们前端一般用的jsp,但是有一个问题,对于JAVA-Web开发者来说,写jsp意味着要注意很多东西,比如web.xml、jsp标签约束等等一度繁重的东西,且就算写jsp,也只是为了测试后台返回的结果,真正用在项目上时前端是专门的前端开发工程师负责,作为后端只需要配合前端提供后台支持就行,这样一来jsp对于java工程师来说就成了一种负担,而freemarker就解决了这一问题,它不需要复杂配置,更是提供了相对便捷的标签,使得我们很轻松的达到测试目的,同时对于开发人员来说其本身也是代替了spring mvc

lombok是一个类的特殊方法生成插件,在SSM时我们要对不同的类做很多重复的操作,比如对bean实体生成getter、setter方法等,而lombok插件为我们免除了这一过程,它帮助我们以注解的方式,代替这类重复的代码


现在我们开始写代码

第一步:首先需要新建一个项目,因为上面的插件需要一些配置支持

勾选web支持

勾选freemarker支持
第二步:pom文件中添加如下依赖

		
        
            org.projectlombok
            lombok
            true
        


        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.3.2
        

        
        
        
            mysql
            mysql-connector-java
        


         
        
            com.baomidou
            mybatis-plus-generator
            3.3.2
        

        
        
            org.apache.velocity
            velocity-engine-core
            2.2
        

        
        
            org.freemarker
            freemarker
            2.3.30
        

添加后大家可以回过头注意一下你当前的pom,你会发现比较与知识点1少了一个spring-boot-starter这个是因为当你选择web支持后spring-boot-starter-web会通过依赖传递默认导入spring-boot-starter不需要在pom中体现,这和知识点1中提到的spring boot内嵌了web服务器有关。

第三步:建立三层架构需要的包

com.wy.scjg.bean
com.wy.scjg.controller
com.wy.scjg.service
com.wy.scjg.mapper

第四步:配置spring boot配置文件

#服务的端口号
server.port=91
#服务的访问地址
#server.servlet.context-path=/helloboot

#数据库驱动程序,如果你使用的驱动是包括5.1以及之前的就使用com.mysql.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库的连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF8&userSSL=false&serverTimezone=GMT%2B8
#数据库的用户名
spring.datasource.username=root
#数据库的密码
spring.datasource.password=123456
#数据库类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource


#打印sql语句
#日志配置
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#配置文件读取的位置
mybatis-plus.mapper-locations=classpath:mappers
    private Long id;

    
    private String name;

    
    private Integer age;

    
    private String email;
}

这里解释一下三个用到的lombok插件注解,Data为该类提供get、set方法,EqualsAndHashCode为该类提供equals和hashCode比较方法,callSuper 参数默认false时表示比较方法所用的属性来自于当前类本身,而非父类,Accessors是对生成的get、set方法做必要的空值,chain默认false时表示get、set方法是无返回值的,反之则返回当前对象

第七步:Dao层,既Mapper层开发对应的User数据接口,并在mappers文件下准备对应的xml

package com.wy.scjg.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wy.scjg.bean.User;

public interface UserMapper extends BaseMapper {

}

对应的mapper.xml文件







Dao层开发,一定要记得在spring boot的启动类中添加一个MapperScan注解,因为启动类会扫描子包,但是Dao层的构成由于没有注解所以不会生成spring的bean实例,所以需要另外告诉spring boot框架Dao层的包在哪里,这就跟SSM也需要特别配置Dao一样,不过spring boot将步骤缩减到只需要告诉他Dao层的接口在哪里就行,如下

package com.wy.scjg;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@MapperScan("com.wy.scjg.mapper")
public class ScjgApplication {

    public static void main(String[] args) {
        SpringApplication.run(ScjgApplication.class, args);
    }

}

第八步:service层开发对应的UserService和实现类,并注入Dao层对象

package com.wy.scjg.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wy.scjg.bean.User;

public interface UserService extends IService{

}

对应的实现类

package com.wy.scjg.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wy.scjg.bean.User;
import com.wy.scjg.mapper.UserMapper;
import com.wy.scjg.service.UserService;
import org.springframework.stereotype.Service;


@Service
public class UserServiceImpl extends ServiceImpl implements UserService {

}

第九步:controller层开发控制器

package com.wy.scjg.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wy.scjg.bean.User;
import com.wy.scjg.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;

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

    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public String list(HttpServletRequest request, @RequestParam(defaultValue = "1") long current, @RequestParam(defaultValue = "3") long size, User user){
        //创建分页对象
        Page page =new Page<>(current,size);
        //创建查询条件对象
        QueryWrapper wrapper = new QueryWrapper<>();
        //执行分页查询
        IPage pageInfo = userService.page(page, wrapper);
        //存储到request中
        request.setAttribute("pageInfo",pageInfo);
        return "/user_list";//注意最后一步是返回到测试界面,且不用任何后缀
    }
}

开发controller层,如果用到了mybatisplus自带的分页,一定要再启动类里实例化分页的配置类,如下

package com.wy.scjg;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@MapperScan("com.wy.scjg.mapper")
public class ScjgApplication {

    public static void main(String[] args) {
        SpringApplication.run(ScjgApplication.class, args);
    }

    
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
}

第十步:开发freemarker插件的测试页面



    欢迎进入user用户列表


   
       <#list pageInfo.records as user>
           
序号 名称 年龄 邮箱 操作
${user.id} ${user.name!""} ${user.age!""} ${user.email!""} 详情 修改 删除
首页 上一页 下一页 尾页

第十一步:启动程序,测试效果


最后说一下,在service和Dao层中我任何方法都没有写,但是却可以出现列表效果,这个是因为Service和Dao继承的父类中有自带的方法,并且在继承时进行了注入以及泛型了操作数据返回的类型User,所以初学阶段不要为了没有写代码,但出现了效果这个事费解,本篇大家知道SSM增删改查那一套,在spring boot里怎么操作流程是什么就可以了,详细的后面会说

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/959347.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号