zoukankan      html  css  js  c++  java
  • springboot使用入门1

    第一个springboot项目

    使用eclipse和gradle构建第一个springboot项目。

    1环境搭建

    Java生态体系中有三大构建工具:Ant、Maven和Gradle。Ant几乎销声匿迹,Maven由于较为不灵活的配置也渐渐被遗忘,而由于Gradle是基于Ant和Maven的一个优化版本,变得如日中天。

    1、安装gradle:

    第1步:获取gradle

    官网下载gradle: https://gradle.org/releases/    //我下载的是v6.4

    第2步:解压

    解压到如下目录:F:qianduangradle-6.4.1

    第3步:配置环境变量

    在系统变量中添加:

    变量名:GRADLE_HOME

    变量值:F:qianduangradle-6.4.1

    path中缀加:%GRADLE_HOME%in

    测试:启动cmd命令行

    输入gradle或gradle –v

    输出gradle的相关版本等信息,说明gradle配置成功。

    2 创建gradle项目

    1、eclipse安装插件

    通过eclipse创建gradle项目:   //我的eclipse自带了gradle插件。

    1:安装gradle插件

     http://download.eclipse.org/buildship/updates/e46/reases/2.x

    help à install new softwareà输入上述地址,安装.

    2:eclipse配置gradle

    window-》preference—》gradle,选择自己本机安装的gradle

    local installation directory:F:qianduangradle-6.4.1

    gradle user home:C:Usershe.gradle

    2、创建springboot项目 

    通过Spring Inutializr初始化

    1:生成: https://start.spring.io/

    2:通过指令编译-运行(方法1

    从命令行进入到项目的根目录F:qianduanwordspacehello

    执行gradle build

    运行:生成一个build目录,进去找到jar文件

    java  –jar  build/libs/….jar   //运行我们的项目

    如果想结束项目,直接ctrl+c即可停止。

    3:在eclipse中运行(方法2

    导入:打开eclipse,导入gradle项目,选中项目导入。

    更新依赖:右键项目名—》gradle—》refresh gradle project

    编译运行:右键Application.java—》run as—》java application

    测试:打开google浏览器:输入localhost:8080 会出现一个错误页面

     

    到此,springboot项目运行成功。

    项目目录简介:

    resourses:放静态资源

       /static:放js、css

       /templates 默认放页面的路径

    /application.properties:配置页面路径、访问数据库信息

    src :存放代码

    build.gradle:类似于maven的pom.xml

    3 核心代码

    目标:实现用户管理的增删改查功能,学会使用springboot开发项目。

    配置文件

    mysq中创建user表:  //现在mysql数据库中创建user表

    user表:

    id:int

    name:varchar(255)

    email:varchar(255)

    参考sql代码:

    create table user(

    id int primary key, 

    name varchar(255),

    email varchar(255)  )

    build.gradle代码如下:

    //本身需要的插件

    plugins {

       id 'org.springframework.boot' version '2.3.0.RELEASE'

       id 'io.spring.dependency-management' version '1.0.9.RELEASE'

       id 'java'

    }

    group = 'com.scitc'

    version = '0.0.1-SNAPSHOT'

    sourceCompatibility = '1.8'

    //指定仓库

    repositories {

       //mavenCentral()

       mavenLocal()

       maven{

           url 'http://maven.aliyun.com/nexus/content/groups/public/'

       }

    }

    //依赖

    dependencies {

       implementation 'org.springframework.boot:spring-boot-starter-web'

       testImplementation('org.springframework.boot:spring-boot-starter-test') {

          exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'

       }

       compile('org.springframework.boot:spring-boot-starter-thymeleaf')

       //spring  data jpa的依赖

       compile('org.springframework.boot:spring-boot-starter-data-jpa')

            //mysql连接驱动的依赖

       compile('mysql:mysql-connector-java:6.0.5')

       //添加jquery依赖

       compile group: 'org.webjars.bower', name: 'jquery', version: '3.3.0'

       //添加bootstrap依赖

       compile group: 'org.webjars', name: 'bootstrap', version: '4.1.0'

    }

    test {

       useJUnitPlatform()

    }

    application.properties

    # 这个是配置模板路径的,默认就是templates,可不用配置

    #spring.thymeleaf.prefix=classpath:/templates/

    # 这个可以不配置,检查模板位置

    #spring.thymeleaf.check-template-location=true

    spring.thymeleaf.suffix=.html

    spring.thymeleaf.content-type=text/html

    spring.thymeleaf.encoding=UTF-8

    #热部署静态文件

    spring.thymeleaf.cache=false

    #使用html5

    spring.thymeleaf.mode=HTML5

    #DataSource

    spring.datasource.url=jdbc:mysql://localhost/blog?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

    spring.datasource.username=root

    spring.datasource.password=admin

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

    #jpa

    spring.jpa.show-sql = true

    #spring.jpa.hibernate.ddl-auto=create-drop

    domain层

    User.java

    package com.scitc.mytest.domain;

    import java.io.Serializable;

    import javax.persistence.Column;

    import javax.persistence.Entity;

    import javax.persistence.GeneratedValue;

    import javax.persistence.GenerationType;

    import javax.persistence.Id;

    import javax.persistence.Table;

    import javax.xml.bind.annotation.XmlRootElement;

     

    @Entity

    @XmlRootElement  //MediaType 转为 XML

    @Table

    public class User implements Serializable{

       private static final long serialVersionUID = 1L;

       @Id

       @GeneratedValue(strategy=GenerationType.IDENTITY)

       private Long id;//实体唯一的标识

       @Column(nullable = false)

        private String name;

       @Column(nullable = false)

        private String email;

       public User() {

       }

       public User(Long id,String name,String email) {

          this.id = id;

          this.name = name;

          this.email = email;

       }

         public Long getId() {

          return id;

       }

       public void setId(Long id) {

          this.id = id;

       }

       public String getName() {

          return name;

       }

       public void setName(String name) {

          this.name = name;

       }

       public String getEmail() {

          return email;

       }

       public void setEmail(String email) {

          this.email = email;

       }

       @Override

       public String toString() {

          return String.format("User[id=%d, name='%s', age='%d']",

                    id, name, email);

       }

    }

    UserRepository层

    接口UserRepository.java

    package com.scitc.mytest.repository;

    import org.springframework.data.repository.CrudRepository;

    import com.scitc.mytest.domain.User;

    public interface UserRepository extends CrudRepository<User, Long> {

    }

    controller层

    UserController.java

    package com.scitc.mytest.controller;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Optional;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.ui.Model;

    import org.springframework.web.bind.annotation.GetMapping;

    import org.springframework.web.bind.annotation.PathVariable;

    import org.springframework.web.bind.annotation.PostMapping;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    import org.springframework.web.servlet.ModelAndView;

    import com.scitc.mytest.domain.User;

    import com.scitc.mytest.repository.UserRepository;

     

    @RestController 

    @RequestMapping("/users")

    public class UserController {

       @Autowired

       private UserRepository userRepository;

       /*

        * 从用户仓库中获取用户列表

        * */

       private List<User> getUserlist(){

          List<User> users = new ArrayList<>();

          for(User user : userRepository.findAll()) {

             users.add(user);

          }    

          return users;

       }

       /**

        * 查询所有用户,数据封装到模型中,返回视图模型对象

        * @param model

        * */

       //get方法获取用户列表

       @GetMapping

       private ModelAndView list(Model model) {

          model.addAttribute("userList", getUserlist());

          model.addAttribute("title", "用户管理");

          return new ModelAndView("users/list","userModel",model);

       }

       /**

        * 根据id查询用户详细信息

        */

       @GetMapping("{id}")

       public ModelAndView view(@PathVariable("id") Long id,Model model){

          Optional<User> user = userRepository.findById(id);

          model.addAttribute("user", user.get());

          model.addAttribute("title", "查看用户");

          return new ModelAndView("users/view","userModel",model);

       }

       /**

        *修改页面

        *获取表单页面 ,自动把表单的数据填充到new User对象中

        *userModel:是视图模型的名字,在页面可以获取到

        */

       @GetMapping("/form")

       public ModelAndView createForm(Model model){

          model.addAttribute("user", new User());

          model.addAttribute("title", "查看用户");

          return new ModelAndView("users/form","userModel",model);

       }

       /**

        * 新建用户

        * @param user

        * @param result

        * @param redirect

        * @return

        * 根节点就是users,所以下面注解映射的路径不用填

        */

       @PostMapping

       public ModelAndView create(User user) {

          user = userRepository.save(user);

          return new ModelAndView("redirect:/users");

       }

       /**

        * 删除用户

        * @param id

        * @return

        */

       @GetMapping(value = "delete/{id}")

       public ModelAndView delete(@PathVariable("id") Long id, Model model) {

          userRepository.deleteById(id);;

          model.addAttribute("userList", getUserlist());

          model.addAttribute("title", "删除用户");

          return new ModelAndView("redirect:/users");

          //return new ModelAndView("users/list", "userModel", model);

       }

       /**

        * 修改用户

        * @param user

        * @return

        */

       @GetMapping(value = "modify/{id}")

       public ModelAndView modifyForm(@PathVariable("id") Long id, Model model) {

          Optional<User> user = userRepository.findById(id);

          model.addAttribute("user", user.get());

          model.addAttribute("title", "修改用户");

          return new ModelAndView("users/form", "userModel", model);

       }

    }

    页面

    templates/fragments下:

    header.html

    <!DOCTYPE html>

    <html  xmlns:th="http://www.thymeleaf.org"

          xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

    <head>

    <meta charset="UTF-8">

    <title>Thymeleaf in action</title>

    </head>

    <body>

       <div th:fragment="header">

         <h1>Thymeleaf in action</h1>

          <a href="/users" th:href="@{~/users}">首页</a>

       </div>

    </body>

    </html>

    footer.html

    <!DOCTYPE html>

    <html  xmlns:th="http://www.thymeleaf.org"

          xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

    <head>

    <meta charset="UTF-8">

    <title>Thymeleaf in action</title>

    </head>

    <body>

       <div th:fragment="footer">

         <a href="#">欢迎来到我的主页!</a></div>

    </body>

    </html>

    templates/users下:

    list.html-显示用户页面

    <!DOCTYPE html>

    <html  xmlns:th="http://www.thymeleaf.org"

          xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

    <head>

    <meta charset="UTF-8">

     <title th:text="${userModel.title}">welcome</title>

    </head>

    <body>

       <div th:replace="fragments/header::header"></div>

       <h3 th:text="${userModel.title}">Welcome to waylau.com</h3>

        <table border="1">

          <thead>

            <tr>

               <td>ID</td>

               <td>name</td>

               <td>email</td>

            </tr>

          </thead>

          <tr th:if="${userModel.userList.size()} eq 0">

            <td colspan="3">没有用户信息!!</td>

        </tr>

          <tr th:each="user:${userModel.userList}">

              <td th:text="${user.id}">id</td>

               <td th:text="${user.email}">email</td>

               <td><a href="view.html" th:href="@{'/users/' + ${user.id}}"

                   th:text="${user.name}">he</a></td>

          </tr>

        </table>

       <div th:replace="fragments/footer::footer"></div>

    </body>

    </html>

    view.html-展示单个用户信息

    <!DOCTYPE html>

    <html  xmlns:th="http://www.thymeleaf.org"

          xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

    <head>

    <meta charset="UTF-8">

    <title th:text="${userModel.title}">users : View</title>

    </head>

    <body>

          <div th:replace="fragments/header::header"></div>

          <h3 th:text="${userModel.title}">Welcome to waylau.com</h3>

         <div>

        <a href="/users">返回主页</a>

          </div>

           <div>

        <p><strong>ID:</strong><span id="id" th:text="${userModel.user.id}">123</span></p>

        <p><strong>Name:</strong><span id="name" th:text="${userModel.user.name}">he</span></p>

        <p><strong>Email:</strong><span id="age" th:text="${userModel.user.email}">30</span></p>

    </div>

         <div>

           <a th:href="@{'/users/delete/'+${userModel.user.id}}">删除</a>

           <a th:href="@{'/users/modify/'+${userModel.user.id}}">修改</a>

         </div>

       <div th:replace="fragments/footer::footer"></div>

    </body>

    </html>

    form.html-修改用户页面

    <!DOCTYPE html>

    <html  xmlns:th="http://www.thymeleaf.org"

          xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

    <head>

    <meta charset="UTF-8">

    <title>修改页面</title>

    </head>

    <body>

       <div th:replace="fragments/header::header"></div>

          <h3 th:text="${userModel.title}">Welcome to waylau.com</h3>

         <form action="/users" th:action="@{/users}" method="POST" th:object="${userModel.user}">

          <input type="hidden" name="id" th:value="*{id}"> 名称:<br> <!-- eq th:value="${userModel.user.id}" -->

          <input type="text" name="name" th:value="*{name}"> <br>

          邮箱:<br> <input type="text" name="email" th:value="*{email}">

          <input type="submit" value="提交">

       </form>

       <div th:replace="fragments/footer::footer"></div>

    </body>

    </html>

    附件

    mavenCentral寻找依赖插件

    https://search.maven.org/

    https://mvnrepository.com/

    参考文献:

    https://www.cnblogs.com/woms/p/7040771.html  //gradle配置文件解析

    https://www.cnblogs.com/ldy-blogs/p/8550406.html  //常用注解

    https://blog.csdn.net/yan88888888888888888/article/details/83652136  //自定义查询

  • 相关阅读:
    举荐一个源代码站—优越源代码
    [转载]如虎添翼Sybase数据库标题年夜搜罗2
    [转载]Sybase ASA中盘问元信息的几个常用SQL函数
    [转载]有关Sybase ASE数据库的滥觞
    [转载]Sybase ASA9/ASA10的运用体例
    [转载]Sybase数据库简介(初学者必看)(5)
    [转载]如虎添翼Sybase数据库效果大大包罗5
    [转载]Sybase数据库简介(初学者必看)(3)
    [转载]Sybase数据库简介(初学者必看)(2)
    [转载]Sybase数据库简介(初学者必看)(4)
  • 原文地址:https://www.cnblogs.com/hemomo/p/13150898.html
Copyright © 2011-2022 走看看