从零开始,写一个springboot项目

本文详细介绍了从spring官网创建SpringBoot项目,包括数据库创建、项目架构搭建、用户登录认证,以及前端页面的设计,提供了相关资源链接和模板推荐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从零开始,写一个springboot项目

在这里插入图片描述

一.从spring官网创建一个新的项目

spring官网
在这里插入图片描述
在projects中选择最后一项spring Intializr,进入如下界面。
在这里插入图片描述
输入你的配置信息,右侧建议选择spring web和thymeleaf两个依赖,点击GENERATE生成springboot项目的压缩包。将这个压缩包解压到你想放的位置,打开后如下:
在这里插入图片描述
target文件需要项目编译运行后才会生成。
下面,用IDEA导入创建的springboot项目即可。

二.创建数据库

我这里是在数据库manger下面,创建一张书籍表books,字段如下:

create table books
(
    bookID     int(10) auto_increment comment '书号',
    bookName   varchar(10)  not null comment '书名',
    bookCounts int          not null comment '数量',
    detail     varchar(200) not null comment '描述'
)
    charset = utf8;

create index bookID
    on books (bookID);

在这里插入图片描述
接下来再创建一张用户表user,用于登录认证,字段如下:

create table user
(
    username varchar(20) not null,
    password varchar(20) not null,
    userId   int(4)      not null
        primary key
);

在这里插入图片描述

三、创建项目架构

在这里插入图片描述
1、实体类的创建:pojo下面新建Books类,属性和数据库字段保持一致:

package com.han.pojo;

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}

2、dao(mapper)层,新建BookMapper接口类

package com.han.dao;

import com.han.pojo.Books;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;


import java.util.List;

@Repository    //mapper层注解专用,是一个component,service层是service,controller层是controller,都是component
@Mapper
public interface BookMapper {

    //增加一本书
    int addBook(Books books);

    //删除一本书
    int deleteBookById(@Param("bookId") int id);

    //更新一本书
    int updateBook(Books books);

    //查询一本书
    Books queryBooKById(@Param("bookId") int id);

    Books queryBooKByName(@Param("bookName") String bookName);

    //查询所有的书
    List<Books> queryAllBook();
}

3、在resources下面新建mapper文件夹,并创建BookMapper.xml配置文件,写入sql语句,实现BookMapper接口中的方法
因为要操作数据库,先在application.yml文件中配置数据库连接信息:

#数据库连接配置信息
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/manger?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver

接着在application.properties配置文件中,整合mybatis

#springboot整合mybatis
mybatis.type-aliases-package=com.han.pojo
mybatis.mapper-locations=classpath:mapper/*.xml

上面两步是必须先完成的。接下来就可以写sql语句了:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--一个mapper对应一个接口,通过namespace-->
<mapper namespace="com.han.dao.BookMapper">
    
<!--增加一本书-->
    
    <insert id="addBook" parameterType="Books">
      insert into manger.books (bookName, bookCounts, detail)
      values (#{bookName},#{bookCounts},#{detail});
    </insert>

<!--    删除一本书-->
    
    <delete id="deleteBookById" parameterType="int">
    delete from manger.books where bookID=#{bookId}
    </delete>
    
<!--    更新一本书-->

    <update id="updateBook" parameterType="Books">
    update manger.books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
    where bookID=#{bookID};
    </update>
    
<!--    根据id查询书-->

    <select id="queryBooKById" resultType="Books">
            select * from manger.books where bookID=#{bookId}
    </select>
    
<!--    根据书名查询书籍-->

    <select id="queryBooKByName" resultType="Books">
            select * from manger.books where bookName=#{bookName}
    </select>

<!--    查询数据库中所有书籍-->
    
    <select id="queryAllBook" resultType="Books">
    select * from manger.books
    </select>

</mapper>

4、Service层,新建BookService接口类

package com.han.service;

import com.han.pojo.Books;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BookService {

    //增加一本书
    int addBook(Books books);

    //删除一本书
    int deleteBookById( int id);

    //更新一本书
    int updateBook(Books books);

    //查询一本书
    Books queryBooKById( int id);

    Books queryBooKByName( String bookName);

    //查询所有的书
    List<Books> queryAllBook();

}

5、service层新建接口类实现类BookServiceImpl

package com.han.service;

import com.han.dao.BookMapper;
import com.han.pojo.Books;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    BookMapper bookMapper;   //注入mapper层

    //重写方法
    @Override
    public int addBook(Books books) {
        return bookMapper.addBook(books);
    }

    @Override
    public int deleteBookById(int id) {
        return bookMapper.deleteBookById(id);
    }

    @Override
    public int updateBook(Books books) {
        return bookMapper.updateBook(books);
    }

    @Override
    public Books queryBooKById(int id) {
        return bookMapper.queryBooKById(id);
    }

    @Override
    public Books queryBooKByName(String bookName) {
        return bookMapper.queryBooKByName(bookName);
    }

    @Override
    public List<Books> queryAllBook() {
        return bookMapper.queryAllBook();
    }
}

到这里,mapper层和service层的代码就写好了。
6、在templates下新建需要的html,用于展示的增删改查
home.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head>
    <meta charset="UTF-8">
    <title>书籍管理</title>
    <link rel="stylesheet" href="./css/layui.css">
</head>
<body>

<div style="background-color: #0e90d2;text-align: center;border-radius: 7px;margin-bottom: 20px;width: 60%;margin-left: 20%;margin-top: 20px;" >
    <h1>书籍管理中心</h1>
</div>

<div style="text-align: center;">
    <a class="layui-btn layui-btn-sm layui-btn-primary" href="/add">添加书籍</a>
    <a class="layui-btn layui-btn-sm layui-btn-primary" href="/tomain">返回主页</a>
</div>

<div style="margin-left: 10px; margin-bottom: 10px;text-align: center;width: 20%;">
    <p th:text="${error}" style="color: red; "></p>
</div>

<!--根据书名查找数据   th:action="@{/search}" -->

<form th:action="@{/search}" method="post" style="margin-left: 10px;margin-bottom: 10px;">
    <label>查询书籍:</label>
    <input type="text" name="queryBookName" placeholder="请输入要查询的书籍名称" >
    <input type="submit" value="查询" class="layui-btn layui-btn-sm layui-btn-primary">
</form>

<!--springboot2.0.9以下生效-->
<!--<div sec:authorize="isAuthenticated()">-->
<!--    <a>-->
<!--        用户名:<span sec:authentication="name"></span>-->
<!--    </a>-->
<!--</div>-->


<div style="margin-top: 20px;">

    <script src="./js/layui.js"></script>

    <table class="layui-table">
        <colgroup>
            <col width="350">
            <col width="350">
            <col width="350">
            <col>
        </colgroup>
        <thead>
        <tr>
            <th>bookID</th>
            <th>bookName</th>
            <th>bookCounts</th>
            <th>detail</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
<!--      拿到后端数据booklist数组,循环出来的每一项为listbook , 展示数据库中的书籍信息-->
        <tr th:each="listbook:${booklist}">
            <td th:text="${listbook.getBookID()}"></td>
            <td th:text="${listbook.getBookName()}"></td>
            <td th:text="${listbook.getBookCounts()}"></td>
            <td th:te
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值