写一个Spring Boot的Hello World

尽管这个demo也就hello world水平,但我还是要记录一下(总算能动了QAQ),毕竟老是看文章不动手不行啊

上次写Servlet的CRUD项目还是2月份,虽然代码忘的差不多了,但我就记得JDBC写起来特别累,作为入门还是学学Spring吧,然而被Spring的配置劝退了(现在看好像也不是问题,只是没有那种经验,碰到就懵逼),现在改用SpringBoot了,并且学习牛客网上的小demo作为入门参考

从啥都不会到写个能动的Spring Boot应用需要知道以下概念↓

1.maven构建项目的套路,为了方便还要会改国内源(然后当你配置好后发现IDEA居然用自带的配置)

2.MVC架构,其中controller就是相当于一个服务器的入口

3.注解的用法,初次接触到高度封装的代码我确实头疼,一个@就完事的非侵入式写法很难明白它的原理(因为过于隐蔽了)

4.项目常规的通用结构,由于没有写过正经的项目,我也不懂该怎么分orz(只会DAO),参考一个project能解决这种问题(核心是在于了解MVC的细分)

5.懂设计模式,感谢自己几个月前了解了不少设计模式,核心的IOC/AOP不是问题(虽然这里没体现)

6.了解一下用于注入的XML,前几天的物联网(安卓)实验课上用了XML作为显式的注入,了解这个过程虽然用不上但会更明白Spring(Boot)的隐式注入是咋回事

7.同理,了解AOP的过程就是要尝试写一个静态代理,然后到动态代理

8.不知道是mybatis封装的太好还是怎样,起码能动的水平只要你会@个CRUD就好

9.关于view的部分,我个人认为目前会对着改网页即可

10.项目中剩余部分暂留

由于这只是hello world水平的记录,因此代码也十分的hello world。。

项目结构如下(test/biz/utils等暂无),具体class/interface以.java区分

|------------com.caturra.training
    |
    |--------BookLibraryApplication.java
    |
    |-------controller
        |
        |----BookController.java
    |--------model
        |----Book
    |--------dao
        |----BookDAO.java
    |--------service
        |----BookService.java
|------------resources
    |--------templates
        |----book
            |----books.html
        |----hello.html
    |-------application.properties
    |-------log4j.properties
    |-------mybatis-config.xml

UPDATE.更新个截图版

以下忽略全限定名

BookLibraryApplication

package com.caturra.training;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookLibraryApplication {

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

BookController

package com.caturra.training.controller;

import com.caturra.training.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class BookController {

    @Autowired
    private BookService bookService;

    @RequestMapping(path = {"/index"},method = {RequestMethod.GET})
    public String getAllBooks(Model model) {
        model.addAttribute("books",bookService.getAll());
        return "book/books";
    }
    @RequestMapping(path = {"/"},method = {RequestMethod.GET})
    public String tempTest() {
        return "hello";
    }
}

Book

package com.caturra.training.model;

public class Book {

    private int id;
    private String title;
    private String author;
    private int    price;

    public int getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

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

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

BookDAO

package com.caturra.training.dao;

import com.caturra.training.model.Book;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface BookDAO {

    String tableName = " book ";
    String insertField = " title, author, price ";
    String selectField = insertField;

    @Select({"SELECT",selectField,"FROM",tableName})
    List<Book> getAll();

    @Insert({"INSERT INTO",tableName,"(",insertField,") VALUES (#{title},#{author},#{price})"})
    int add(Book book);
}

BookService

package com.caturra.training.service;

import com.caturra.training.dao.BookDAO;
import com.caturra.training.model.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookService {

    @Autowired
    private BookDAO bookDAO;

    public void add(Book book) {
        bookDAO.add(book);
    }

    public List<Book> getAll() {
        return bookDAO.getAll();
    }
}

application.properties配置

spring.freemarker.suffix=.html

spring.datasource.url=jdbc:mysql://localhost:3306/mybooklib?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
mybatis.config-location=classpath:mybatis-config.xml

mybatis和log4j的配置我没有查过官方文档,直接套用别人的,篇幅问题只放出mybatis方便以后抄(删去)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

  <settings>
    <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
    <setting name="cacheEnabled" value="true"/>
    <!-- Sets the number of seconds the driver will wait for a response from the database -->
    <setting name="defaultStatementTimeout" value="3000"/>
    <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- Allows JDBC support for generated keys. A compatible driver is required.
    This setting forces generated keys to be used if set to true,
     as some drivers deny compatibility but still work -->
    <setting name="useGeneratedKeys" value="true"/>
  </settings>

  <!-- Continue going here -->

</configuration>

books.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
</head>
<body>
<div align="center">
    <h3>图书列表</h3>

<table border="1" cellpadding="10">
    <tr>
        <td>书名</td>
        <td>作者</td>
        <td>价格</td>
    </tr>
    <#list books as book>
    <tr>
        <td>《${book.title}》</td>
        <td>${book.author}</td>
        <td>${book.price}</td>
    </tr>
</#list>
</table>
</div>
</body>
</html>

hello.html作为检查是否正常运行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    <p>hello the no offer world!</p>
</body>
</html>

遇到的坑:

0.数据库记得写好表

1.即使是最简单的项目也有一定的依赖关系,因此从哪里写起也是一个问题,个人做法是先写好controller,画草稿写设计一个模块需要什么东西,比如一个serive的完成顺序model->DAO->service

2.比较晦涩的注解可以用IDE的源码查看下载大概看一下

3.一路写过去大概率完蛋,可以用简单的页面debug一下,或者写好test

4.自己太菜是个问题

完成这些那就意味着我总算能动我的OJ项目了

期望能尽早肝出来

原文地址:https://www.cnblogs.com/caturra/p/10799991.html

时间: 2024-10-30 08:41:03

写一个Spring Boot的Hello World的相关文章

我的第一个spring boot程序(spring boot 学习笔记之二)

第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相关知识点时会再次理解.要运行起第一个Spring boot特别简单,用IDEA包含了Spring Boot的引导,直接新建一个spring boot项目. 注意: 1.第一次新建Spring boot项目的时候,maven会下载大量的依赖到本地,所以特别慢,耐心等待或者用国内的maven公库都行(自

02-第一个Spring Boot应用程序

Spring Boot深度课程系列 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017.2.1 ,Spring Boot 版本:2.2.42. 2.步骤介绍 3.编写Helloworld,参照Spring MVC的写法 A) 在chapter01文件夹下创建包controller,创建类HelloController. B) 代码如下 package com.java.chapter01.controller; import org.spr

最近做了一个Spring Boot小项目,大家帮忙找找bug吧, http://www.dbeetle.cn

最近做了一个Spring Boot小项目,网站顶部有源码地址,欢迎大家访问 http://www.dbeetle.cn 欢迎各位访问,提出意见,找找bug 网站说明 甲壳虫社区(Beetle Community) 一个开源的问答社区.论坛博客,您可以提出自己的问题.发布自己的文章.和其他用户交流 目前功能有第三方登陆.查看.发布.评论.消息通知.顶置.一键已读.搜索等 后续会不断更新完善,欢迎大家提供更好的建议 使用技术 Spring Boot.Mybatis.Thymeleaf.BootStr

第一个Spring Boot应用

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者.----以上来自百度百科. 简单来说,它的一个特点是:习惯大于约定.Spring Boot提倡基于Java的配置,注解将会代替很多的配置文件.以下使用Maven

模拟spring - 动手写一个spring AOP

一.前言 AOP (Aspect Oriented Programing) - 面向切面编程,它主要用于日志记录.性能分析.安全控制.事务处理.异常处理等方面. AOP主要使用JDK的反射和动态代理,AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用,AOP代理包含了目标对象的全部方法,但AOP代理的方法与目标对象的方法存在差异:AOP方法在特定切入点添加了增强处理,并回调了目标对象的方法. 动态代理的文章请参考:http://blog.csdn.net/zdp072/ar

用 Docker、Gradle 来构建、运行、发布一个 Spring Boot 应用

本文演示了如何用 Docker.Gradle 来构建.运行.发布来一个 Spring Boot 应用.Docker 简介Docker 是一个 Linux 容器管理工具包,具备"社交"方面,允许用户发布容器的 image (镜像),并使用别人发布的 image.Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序.前置条件JDK 1.8+Gradle 2.3+Docker 最新版.有关 Docker 在的安装, 如果你的电

使用docker构建第一个spring boot项目

在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目本文是自己使用docker+spring boot 发布一个项目1.docker介绍 docke是提供简单易用的容器接口Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容器.程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样.有了 Docker,就不用担心环境问题. 总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入

只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简洁的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼,简化Spring配置简直可以说是民心所向. Spring Boot是由Pivotal团队提供的一个基于Java的全新的开源框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.如今,Spring Boot逐渐成为快

快速构建一个Spring Boot+MyBatis的项目IDEA(附源码下载)

如何快速构建一个Spring Boot的项目 工具 idea JDK版本 1.8 Spring Boot 版本 1.5.9 环境搭建实现:最基础前端可以访问到数据库内的内容 开始 IDEA 内部新建一个项目,项目类型选择Spring Initializr,Project SDK选择适合你当前环境的版本,这里我选择的是1.8(Spring Boot 2.0以上的版本,JDK选择请选择1.8即以上版本),构建服务选择默认就好,点击Next 填写Group和Artifact(此处我使用的是默认,请根据