TLIAS案例学习

准备工作:

工程创建:

首先是创建springboot工程,创建Lombok、springweb、mybatis frame和mysql driver驱动

然后编写application.properties文件中的相关信息:

spring.application.name=tlias-web-management

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=zyy2176801587

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

mybatis.configuration.map-underscore-to-camel-case=true

数据库创建:

创建数据库talis,并为其创建两张数据表dept和emp

相关接口和实体类创建

 按照分层解耦方式创建好目录和相关文件:

相关方法编写:

根据接口文档编写相关代码:

Dept类和Emp类中编写get,set和toString以及无参含参构造方法,Result类编写相应信息,并编写相关响应结果:

package edu.wust.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据

    //增删改 成功响应
    public static Result success(){
        return new Result(1,"success",null);
    }
    //查询 成功响应
    public static Result success(Object data){
        return new Result(1,"success",data);
    }
    //失败响应
    public static Result error(String msg){
        return new Result(0,msg,null);
    }
}

增加数据:

数据访问层(Mapper):DeptMapper接口定义了访问数据库的List方法,通过Dept类来获取用户全部信息,并打包保存进一个List列表中:

package edu.wust.mapper;

import edu.wust.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 部门管理
 */
@Mapper
public interface DeptMapper {
    @Select("select * from dept")
    List<Dept> list();
}

 服务层(Service):在DeptService接口中生成list方法,定义了部门管理的业务逻辑:

package edu.wust.service;

import edu.wust.pojo.Dept;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 部门管理
 */
@Service
public interface DeptService {
    List<Dept> list();
}

DeptServicelmpl类是接口DeptService的实现类,通过在DeptServicelmpl类中创建Mapper接口,利用接口中的list方法查询并返回全部的部门信息:

package edu.wust.service.impl;

import edu.wust.mapper.DeptMapper;
import edu.wust.pojo.Dept;
import edu.wust.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }
}


 

控制层(Controller):前端发送信息到DeptController类中,DeptController调用deptService接口获取list中的数据:

package edu.wust.controller;

import edu.wust.pojo.Dept;
import edu.wust.pojo.Result;
import edu.wust.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.logging.Logger;

/**
 * 部门管理Controller
 */
@Slf4j   //日志
@RestController
public class DeptController {
//    private static Logger log= (Logger) LoggerFactory.getLogger(DeptController.class);

    @Autowired
    private DeptService deptService;

    //@RequestMapping(value = "/depts",method = RequestMethod.GET)
    @GetMapping("/depts")

    public Result list(){

        log.info("查询全部部门数据");

        List<Dept> deptList=deptService.list();


        return Result.success(deptList);
    }

}

几个注意点:

1.实体类中使用@Data注解,可以自动生成get、set、toString等方法,但是不能生成含参和无参的构造方法,需要再手动生成

2.由于业务要求控制请求方法,不能直接使用@RequestMapping注解,可以在注解后加一个method来指定方法,也可以直接使用@GetMapping等注解

3.可以直接通过导入@Slf4j注解来调用log.info日志

4.为了符合OIC操作bean管理,需要引入@Autowired注解,并创建一个私有变量

前后端联调(nginx):

 nginx.conf文件中的

    server {

        listen       90;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm;

        }

        location ^~ /api/ {

            rewrite ^/api/(.*)$ /$1 break;

            proxy_pass http://localhost:8080;

        }

       

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

控制开启的端口号(这里是localhost:90)

注意由于80是默认的端口号,可能会因为权限不够出现开启不了的情况,需要以管理员身份开启。

开启之后输入url之后会看到前端页面,此时数据均为空:

运行后端页面进行查询操作之后再点击刷新就会出现相关数据:

根据id删除数据:

删除操作与上述步骤相同:

首先在controller层创建delete方法(根据id进行删除)

然后在service接口声明一个delete方法

接着在serviceimpl类中调用Mapper中的deleteById方法

最后在Mapper层编写SQL语句和deleteById方法

1.请求的url /depts/{id} 包含路径,使用要加入 @PathVariable 注解

2.删除和查询部分的url有重合部分   "/depts"  ,可以在开头使用@RequstMapping("/depts")对公共部分进行抽取

相关代码:

// 1
@DeleteMapping("/depts/{id}")
public Result delete(@PathVariable Integer id){
    log.info("根据id删除部门:{}",id);
    deptService.delete(id);
    return Result.success();
}


// 2
void delete(Integer id);


// 3
 @Override
    public void delete(Integer id) {
        deptMapper.deleteById(id);
    }


// 4
@Delete("delete from dept where id=#{id}")
    void deleteById(Integer id);

插入数据:

接口文档中声明插入数据为一个name字段的字符串,但数据表包含创建时间和更新时间两个字段,因此需要自行创建两个方法,并返回一个类对象。

代码:

// 1
@PostMapping("/depts")
public Result add(@RequestBody Dept dept){
    log.info("根据名称新增部门:{}",dept);
    deptService.add(dept);
    return Result.success();
}


// 2
void add(Dept dept);

// 3
@Override
public void add(Dept dept) {
    //补全相关属性(用户端创建时没有传入相关数据)
    dept.setCreateTime(LocalDateTime.now());
    dept.setUpdateTime(LocalDateTime.now());

    deptMapper.insert(dept);
} 


// 4
 @Insert("insert into dept (name, create_time, update_time) VALUES (#{name},#{createTime},#{updateTime})")
    void insert(Dept dept);

 运行结果如下:

1.由于返回的是一个dept类对象,因此需要加入一个@RequestBody注解

2.用户只需要传递一个name字段的字符串,因此还需要编写另外两个方法

3.根据文档要求,传入数据格式为json,在postman中测试的时候需要在body->raw->选择json格式,然后输入增加数据的信息才会被正常执行


 

编辑数据:

由于仍然需要传递更新时间,因此返回值还是一个dept对象,需要加入@RequestBody注解

需要传递更新时间,在DeptServiceImpl类中需要编写时间更新方法并打包调用Mapper类中的update方法

dept中已经有id属性,因此Mapper中直接编写更新语句

update dept set name=#{name} where id=#{id}

即可,无需另外获取id值

 相关代码:

// 1 
@PutMapping("/depts")
public Result update(@RequestBody Dept dept){
    log.info("修改部门:{}",dept);
    deptService.update(dept);
    return Result.success();
}


// 2
void update(Dept dept);


// 3
@Override
public void update(Dept dept) {
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.update(dept);
}


// 4
@Update("update dept set name=#{name} where id=#{id}")
void update(Dept dept);


运行结果:

原数据表:

将id为7的销售部修改为教务处:

数据表:

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值