Springboot + mybatis 简单后台项目搭建及部署

好久没写博客了,去年买了个阿里云的云服务器,三年两百多,后面学习了一下服务器的搭建,主要就是在服务器装软件什么的,具体后面有时间再写点详细的博客说明一下。

现在自己又想搞点东西,正好把后台程序开发的过程记录一下,东西很简单,只能算入门,毕竟我是一个搞安卓的,后台能大概使用就行了吧。

创建项目

首先在idea里面创建项目,这里选择springboot项目
在这里插入图片描述
信息什么的就自己填写了,下面选中Spring web库和MySql Driver就行,能选的还是选上吧,我第一次总弄漏了MySql Driver,后面在配置文件里面加总有问题,莫名其妙。
在这里插入图片描述
接下来等项目加载完吧,加载完在application左边会有运行符号。
在这里插入图片描述
可以运行试试,出现下面的东西应该问题不大了。
在这里插入图片描述

添加依赖

这里要用到MyBatis,需要添加几个依赖,左上角project展开,选择pom.xml。
在这里插入图片描述
在mysql下面加上这两个依赖,右下角import changes就可以了,版本如果不是最新的自己找找吧。
在这里插入图片描述


        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <!-- 驱动 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>

如果出现类似下面错误,把对应版本调低就好了

Failed to read artifact descriptor for org.springframework.boot:spring-boot-starter-jdbc:jar:2.4.5

在这里插入图片描述

配置数据库

左上角选择Packages,打开application.properties文件,加上如下代码:

mybatis.configuration.mapUnderscoreToCamelCase=true	//MyBatis驼峰转换

server.port=8800

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.username=root

spring.datasource.password=******

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_students?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false

当然数据库用户名和密码要换成你自己的,IP地址和数据库表也要换成你自己的。

至于数据库设置和数据库添加数据,我有时间加一篇博客详细说明吧,现在自行解决一下。

代码编写

下面是我之前按别人教程写的一个例子,可以参考一下,至少我这是能运行的,至于数据可能不太一样,还是需要自己动动手。

新建四个目录,分别对应数据类、map类、服务以及controller。
在这里插入图片描述

数据类
  1. JsonResult:这是一个通用json返回类,即把我们要返回的数据转换为json格式
public class JsonResult {
 
    private String status=null;
 
    private Object result=null;
 
    public JsonResult status(String status) {
        this.status = status;
        return this;
    }
 
    public String getStatus() {
        return status;
    }
 
    public void setStatus(String status) {
        this.status = status;
    }
 
    public Object getResult() {
        return result;
    }
 
    public void setResult(Object result) {
        this.result = result;
    }
}
  1. 具体数据,类似下面
public class Task {

    private int id;

    private int state;

    private int filter;

    private int type;

    private String startTime;

    private int duration;

    private String endTime;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public int getFilter() {
        return filter;
    }

    public void setFilter(int filter) {
        this.filter = filter;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public int getDuration() {
        return duration;
    }

    public void setDuration(int duration) {
        this.duration = duration;
    }

    public String getEndTime() {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    private String title;

    private String content;

}
map类

这是要对数据库直接做操作的接口

import java.util.List;

// @Mapper 这里可以使用@Mapper注解,但是每个mapper都加注解比较麻烦,
// 所以统一配置@MapperScan在扫描路径在application类中
public interface TaskMapper {

    //查
    @Select("SELECT * FROM tb_task WHERE id = #{id}")
    Task getTaskById(Integer id);

    //查全部
    @Select("SELECT * FROM tb_task")
    public List<Task> getTaskList();

    //增
    @Insert("insert into tb_task(id,state,filter,type,start_time,duration,end_time,title,content) " +
            "values(#{id},#{state},#{filter},#{type},#{startTime},#{duration},#{endTime},#{title},#{content})")
    public int add(Task task);

    //删
    @Delete("delete from tb_task where id=#{id}")
    public int delete(Integer id);

    //改
    @Update("update tb_task set " +
            "id=#{task.id}," +
            "state=#{task.state}," +
            "filter=#{task.filter}," +
            "type=#{task.type}," +
            "start_time=#{task.startTime}," +
            "duration=#{task.duration}," +
            "end_time=#{task.endTime}," +
            "title=#{task.title}," +
            "content=#{task.content} " +
            "where id=#{id}")
    public int update(@Param("id") Integer id, @Param("task") Task task);

}

服务类
import java.util.List;

//如果有一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext里面定义bean了
@Service
public class TaskServiceImpl implements TaskService {

    //Autowired:把配置好的Bean拿来用,完成属性、方法的组装
    @Autowired
    private TaskMapper taskMapper;

    @Override
    public Task getTaskById(Integer id) {
        return taskMapper.getTaskById(id);
    }

    @Override
    public List<Task> getTaskList() {
        return taskMapper.getTaskList();
    }

    @Override
    public int add(Task task) {
        return taskMapper.add(task);
    }

    @Override
    public int delete(Integer id) {
        return taskMapper.delete(id);
    }

    @Override
    public int update(Integer id, Task task) {
        return taskMapper.update(id, task);
    }
}

对应接口

import java.util.List;

public interface TaskService {

    //通过id查询
    Task getTaskById(Integer id);

    //获取用户列表
    public List<Task> getTaskList();

    //增
    public int add(Task task);

    //删
    public int delete(Integer id);

    //改
    public int update( Integer id, Task task);

}

controller类
import java.util.List;

@RestController
public class TaskController {

    @Autowired
    private TaskService taskService;

    /**
     * 根据ID查询任务
     * @param id 查询ID
     * @return 任务
     */
    //@PathVariable:用于获取url中的数据
    @GetMapping(value = "task/query/{id}")
    public Task getTaskById(@PathVariable(value = "id") Integer id){
        try {
            Task task = taskService.getTaskById(id);
            return task;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 查询任务列表
     * @return 任务列表
     */
    @RequestMapping(value = "tasks/query",method = RequestMethod.GET)
    public List<Task> getTaskList(){

        try {
            List<Task> tasks = taskService.getTaskList();
            return tasks;
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 添加任务
     * @param task 任务
     * @return 结果
     */
    @RequestMapping(value = "task/add",method = RequestMethod.POST)
    public ResponseEntity<JsonResult> add(@RequestBody Task task){
        JsonResult r = new JsonResult();
        try {
            int orderId = taskService.add(task);
            if (orderId < 0){
                r.setResult(orderId);
                r.setStatus("failed");
            }else {
                r.setResult(orderId);
                r.setStatus("ok");
            }

        }catch (Exception e){
            r.setResult(e.getClass().getName()+":"+e.getMessage());
            r.setStatus("error");
            e.printStackTrace();
        }

        return ResponseEntity.ok(r);
    }

    /**
     * 根据id删除任务
     * @param id 任务id
     * @return 结果
     */
    @RequestMapping(value = "task/delete/{id}",method = RequestMethod.DELETE)
    public ResponseEntity<JsonResult> delete(@PathVariable(value = "id") Integer id){
        JsonResult r=new JsonResult();

        try {
            int delId = taskService.delete(id);
            if (delId < 0){
                r.setResult(delId);
                r.setStatus("failed");
            }else {
                r.setResult(delId);
                r.setStatus("ok");
            }
        }catch (Exception e){
            r.setResult(e.getClass().getName()+":"+e.getMessage());
            r.setStatus("error");

            e.printStackTrace();
        }

        return ResponseEntity.ok(r);
    }

    /**
     * 根据id修改task信息
     * @param task 任务
     * @return 结果
     */
    @RequestMapping(value = "task/update/{id}",method = RequestMethod.PUT)
    public ResponseEntity<JsonResult> update(@PathVariable(value = "id") Integer id,
                                             @RequestBody Task task){
        JsonResult r=new JsonResult();
        try {
            int ret = taskService.update(id, task);
            if (ret<0){
                r.setResult(ret);
                r.setStatus("fail");
            }else {
                r.setResult(ret);
                r.setStatus("ok");
            }
        }catch (Exception e){
            r.setResult(e.getClass().getName()+":"+e.getMessage());
            r.setStatus("error");
            e.printStackTrace();
        }

        return ResponseEntity.ok(r);
    }

}

添加扫描

要使程序能够运行还需要在application中加上注解,然后就能运行了。

@SpringBootApplication
@MapperScan(basePackageClasses = TaskMapper.class)
public class PdcaApplication {

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

}

数据库

害,还是把接口也写一下吧,主要就是用Navicat 连数据库,间表和加点数据,很简单的,贴个图,也是不专业的瞎搞。

这个是设计表。

在这里插入图片描述

这个是加的数据

在这里插入图片描述

接口测试

如果按上面的例子写好,数据库弄好,到这里应该是可以测试了,使用Postman可以测试,注意一下请求方法,数据填在body的raw数据里面就行了。

根据id查询(GET):http://localhost:8800/task/query/{id}

查询所有(GET):http://localhost:8800/tasks/query

添加(POST):http://localhost:8800/task/add

根据id删除(DELETE):http://localhost:8800/task/delete/{id}

根据id修改(PUT):http://localhost:8800/task/update/{id}

先在idea上面运行软件,在浏览器输入个最简单的,应该就有数据了。

http://localhost:8800/tasks/query

在这里插入图片描述
下面这个是写博客同时写的程序,已经跑起来了,没什么问题,使用postman演示一个add方法,如下:
在这里插入图片描述

软件打包到服务器

Springboot 和普通web 应用程序不一样,其本质上是一个 Java 应用程序,Springboot 部署会采用两种方式:全部打包成一个jar,或者打包成一个war。现在讲一下打包成 jar 部署。

在idea右边点开mavan,先clean一下,再点package就好了,稍微等会,
在这里插入图片描述
根目录下会多一个target目录,里面就有要的jar包了。

在这里插入图片描述
把这个jar包拷贝到服务器里面运行就是了

java -jar target/pdca.jar //文件自己改名吧

要保持在后台运行,用nohub和&符号就行

nohup java -jar pdca.jar &

出现问题

有时候很奇怪啊,阿里云都设置好了安全组,但是就是没法访问数据库,可以查看已经开放的端口,看看3306端口是否被关了:

firewall-cmd --list-ports //开启端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

结束

这篇博客大概把简单的后台开发讲了下,到这应该是能用了,但是涉及到服务器配置、软件安装、域名、数据库安装和配置的东西都没仔细讲,有时候补上吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值