Eclipse从0搭建一个springboot

文章目录

  • 1. 新建一个maven项目
    • 1.1 编写pom.xml文件
  • 2. 编写login登录页面
    • 2.1 html代码
    • 2.2. 使用webjars管理静态资源文件(css/js等) - 推荐
    • 2.2. 使用bootstrap(CDN)代替bootstrap.css和js文件
  • 3. 编写一个Controller.java
    • 3.1. 写一个LoginController
  • 4. 集成数据库
    • 4.1. 集成mybatis
      • 4.1.1. 添加相关依赖
      • 4.1.2. 更改application.yml中的配置
      • 4.1.3. 建表
    • 4.2. 用mybatis generator自动生成文件
    • 4.3. 写dao和service,controller,mapper
      • 页面userlist.html
    • 在Application.java上加上注解扫描
      • 加上分页工具
        • 分页-service层
        • 分页-controller层
        • 页面修改
  • 写在最后,推荐参考blog

1. 新建一个maven项目

1.1 编写pom.xml文件


<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0modelVersion>
	<parent>
		<groupId>org.springframework.bootgroupId>
		<artifactId>spring-boot-starter-parentartifactId>
		<version>1.5.20.RELEASEversion>
		<relativePath /> 
	parent>
	<groupId>com.extsystemgroupId>
	<artifactId>ExtSystemartifactId>
	<version>0.0.1-SNAPSHOTversion>
	<name>ExtSystemname>
	<description>扩展系统description>

	<properties>
		<java.version>1.8java.version>
	properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
		dependency>
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-testartifactId>
			<scope>testscope>
		dependency>
		
		
		
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-thymeleafartifactId>
		dependency>

		
		
		
		
		
		
		
		
		
		
		
		
		
		
	dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.bootgroupId>
				<artifactId>spring-boot-maven-pluginartifactId>
			plugin>
		plugins>
	build>

project>

2. 编写login登录页面

2.1 html代码


<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>登录title>



<link rel="stylesheet"
	href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
	integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
	crossorigin="anonymous" />


<link rel="stylesheet"
	href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-theme.min.css"
	integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
	crossorigin="anonymous" />


<script
	src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
	integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
	crossorigin="anonymous">script>
head>
<body>
	<div class="container">
		<form action="login_in" method="post" class="form-horizontal"
			role="form">
			<div class="form-group">
				<h2 class="col-sm-offset-5 col-sm-4">用户登录h2>
			div>
			<div class="form-group">
				<label for="username" class="col-sm-offset-3 col-sm-2 control-label">用户名:label>
				<div class="col-sm-3">
					<input type="text" class="form-control" id="username"
						name="username" placeholder="请输入用户名" />
				div>
			div>
			<div class="form-group">
				<label for="password" class="col-sm-offset-3 col-sm-2 control-label">密码:label>
				<div class="col-sm-3">
					<input type="text" class="form-control" id="password"
						name="password" placeholder="请输入密码" />
				div>
			div>
			<div class="form-group">
				<div class="col-sm-offset-5 col-sm-4">
					<button type="submit" class="btn btn-default">登录button>
				div>
			div>
		form>
	div>
	
	
body>
html>

2.2. 使用webjars管理静态资源文件(css/js等) - 推荐

SpringBoot项目搭建:使用WebJars统一管理静态资源

2.2. 使用bootstrap(CDN)代替bootstrap.css和js文件

Bootstrap 中文网 为 Bootstrap 专门构建了免费的 CDN 加速服务,访问速度更快、加速效果更明显、没有速度和带宽限制、永久免费。BootCDN 还对大量的前端开源工具库提供了 CDN 加速服务。


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous">script>

3. 编写一个Controller.java

3.1. 写一个LoginController

package com.extSystem.Login;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value = "/login")
public class LoginController {

	@RequestMapping("/normalLogin")
	public String normalLogin() {
     // 因为引入thympleaf,所以只需要传入字符串自动到templates找相应页面文件
		return "login";
	}
}

4. 集成数据库

4.1. 集成mybatis

4.1.1. 添加相关依赖

		
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>1.3.2version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>RELEASEversion>
        dependency>
		
        <dependency>
            <groupId>com.github.pagehelpergroupId>
            <artifactId>pagehelper-spring-boot-starterartifactId>
            <version>1.2.3version>
        dependency>

4.1.2. 更改application.yml中的配置

spring:
  application:
    name: myspringboot
  output:
    ansi:
      enabled: always
  profiles:
    active: dev
  thymeleaf:
    encoding: UTF-8
    prefix: classpath:/templates/

server:
  tomcat:
    uri-encoding: UTF-8
    max-connections: 500
    min-spare-threads: 25
    max-threads: 300
    accept-count: 200
  port: 8080
mybatis:
  type-aliases-package: com.zb.mapper
  mapper-locations: classpath:mapping/*.xml

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql
logging:
  level:
    com.zb.mapper: debug

---

#开发配置
spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://localhost:3306/zb_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    filters: stat
    maxActive: 20
    initialSize: 1
    maxWait: 60000
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxOpenPreparedStatements: 20

4.1.3. 建表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `mobile` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `nickname` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(1, 'admin', '123456', '13918891675','[email protected]', '男', '管理员');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(2, 'lisi2', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(3, 'lisi3', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(4, 'lisi4', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(5, 'lisi5', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(6, 'lisi6', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(7, 'lisi7', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(8, 'lisi8', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(9, 'lisi9', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(10, 'lisi10', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(11, 'lisi11', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(12, 'lisi12', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(13, 'lisi13', '123456', '13918891675','[email protected]', 'm', 'lisi1');
insert into `user`(id, username, password, mobile, email,sex, nickname) VALUES(14, 'lisi14', '123456', '13918891675','[email protected]', 'm', 'lisi1');

4.2. 用mybatis generator自动生成文件

参考我的另一篇blog,Springboot项目搭建:整合Mybatis-generator

4.3. 写dao和service,controller,mapper

mapper增加了几个方法

@Select("Select * from user")
List<User> selectAll();

@Select("Select * from user where username = #{username} and password = #{password}")
User selectByUsernamePass(@Param("username") String username, @Param("password") String password);

@Select("Select * from user where username = #{username}")
User selectByUsername(@Param("username") String username);

dao和service都是正常调用,下面是controller

package com.zb.controller;
import com.github.pagehelper.PageInfo;
import com.zb.model.User;
import com.zb.service.UserService;
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;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/user")
    @ResponseBody
    public User getUserById(int id){
        User user = userService.selectByPrimaryKey(id);
        return user;
    }

    @RequestMapping("/userlist")
    public String getUserList(Model model, PageInfo pageInfo){
        int pageNum  = (pageInfo.getPageNum() == 0)? 1 : pageInfo.getPageNum();
        int pageSize  = (pageInfo.getPageSize() == 0)? 10 : pageInfo.getPageSize();
        PageInfo<User> result = userService.selectAll(pageNum, pageSize);
        model.addAttribute("users", result.getList());
        model.addAttribute("pageInfo", result);
        return "userlist";
    }

    @RequestMapping("/userdelete")
    public String userdelete(int id){
        userService.deleteByPrimaryKey(id);
        return "redirect:/userlist";
    }

    @RequestMapping("/useredit")
    public String useredit(int id, Model model){
        User user = userService.selectByPrimaryKey(id);
        model.addAttribute("user", user);
        return "useredit";
    }

    @RequestMapping(value = "/userupdateoradd", method = RequestMethod.POST)
    public String userUpdateOrAdd(User user){
        if(user.getId() == 0){
            userService.insertSelective(user);
        } else {
            userService.updateByPrimaryKeySelective(user);
        }
        return "redirect:/userlist";
    }
}

页面userlist.html


<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>用户管理title>
    <link href="/css/bootstrap.min.css" rel="stylesheet">
head>
<body>
<div class="container">
    <div>
        <nav class="navbar navbar-default" role="navigation">
            <div class="container-fluid">
                <div>
                    <ul  class="nav navbar-nav" >
                        <li><a href="/userlist">用户管理a>li>
                        <li><a href="#">书籍管理a>li>
                    ul>
                div>
            div>
        nav>
    div>

    <div>
        <h2>用户管理h2>
        <table width="100%" border="0" cellpadding="0" cellspacing="0" class="table_list">
            <thead>
            <tr>
                <th width="20%">编号th>
                <th width="20%">用户名th>
                <th width="20%">电子邮箱th>
                <th width="20%">手机th>
                <th width="20%">操作th>
            tr>
            thead>
            <tbody>
            <tr th:each="user:${users}">
                <td height="40px"><a th:text="${user.id}" data-toggle="modal" data-target="#myModal" onclick="values(this)">a>td>
                <td th:text="${user.username}">td>
                <td th:text="${user.email}">td>
                <td th:text="${user.mobile}">td>
                <td><a href="#" class="delete_a" th:value="${user.id}">删除a>td>
            tr>
            tbody>
        table>
    div>
div>
<script src="/js/jquery-2.2.1.min.js">script>
<script src="/js/bootstrap.min.js">script>
body>
html>

在Application.java上加上注解扫描

@ComponentScan(basePackages = {"com.zb"})
@MapperScan("com.zb.mapper")

加上分页工具

分页-service层

@Override
public PageInfo selectAll(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List users = userDao.selectAll();
    PageInfo pageInfo = new PageInfo<>(users);
    return pageInfo;
}

分页-controller层

public String getUserList(Model model, PageInfo pageInfo){
        int pageNum  = (pageInfo.getPageNum() == 0)? 1 : pageInfo.getPageNum();
        int pageSize  = (pageInfo.getPageSize() == 0)? 10 : pageInfo.getPageSize();
        PageInfo<User> result = userService.selectAll(pageNum, pageSize);
        model.addAttribute("users", result.getList());
        model.addAttribute("pageInfo", result);
        return "userlist";
    }

页面修改

<div id="example" style="text-align: center"> <ul id="pageLimit">ul> div>
<input type="hidden" id="pageNum" name="pageNum" th:value="${pageInfo.pageNum}" />
<input type="hidden" id="pages" name="pages" th:value="${pageInfo.pages}" />
<script src="/js/bootstrap-paginator.min.js">script>
<script>
    $('#pageLimit').bootstrapPaginator({
        currentPage: $("#pageNum").val(),
        totalPages: $("#pages").val(),
        size: "normal",
        bootstrapMajorVersion: 3,
        alignment: "right",
        numberOfPages: 5,
        itemTexts: function (type, page, current) {
            switch (type) {
                case "first": return "首页";
                case "prev": return "上一页";
                case "next": return "下一页";
                case "last": return "末页";
                case "page": return page;
            }
        },
        onPageClicked: function (event, originalEvent, type, page){//给每个页眉绑定一个事件,其实就是ajax请求,其中page变量为当前点击的页上的数字。
            window.location.href = "userlist?pageNum=" + page;
        }
    });
    $(function(){
        $(".delete_a").click(function(){
            var userId=$(this).attr("value");
            if(confirm("确认删除吗?")){
                window.location.href="/userdelete?id=" + userId;
                return ;
            }
        });
    });
script>

此时目录
此时重启,输入 http://localhost:8080/userlist
就会看到user列表,也可以分页。


写在最后,推荐参考blog

  • 参考文章

    • https://www.cnblogs.com/zhangbin1989/p/9473292.html(推荐)
    • https://www.cnblogs.com/chendeming/p/8443257.html
  • SpringBoot布道系列 | 目录汇总 | 2019持续更新ing

    • https://www.jianshu.com/p/964370d9374e
  • 比较好的springboot项目

    • https://github.com/Foreveriss/SpringBoot/blob/master/microboot-activemq/src/main/java/cn/mldn/microboot/dao/IDeptDAO.java
    • https://github.com/xiaojiang1230/demo2/blob/4b87e5506edd69f19979a18d9a2597b99701f99f/src/main/java/com/example/demo/Demo2Application.java
    • https://github.com/Foreveriss/SpringBoot/blob/0e66e801f4191e016f653602d3ef1184baa50adc/microboot-activemq/src/main/java/cn/mldn/microboot/service/IDeptService.java
  • springboot 整合mybatis实现动态sql

    • http://blog.csdn.net/zhugeyangyang1994/article/details/52045924
  • springboot 整合log4j

    • https://blog.csdn.net/caideb/article/details/81163183
    • https://blog.csdn.net/loongshawn/article/details/50951329
    • https://blog.csdn.net/caoshangfeidie000/article/details/82731715
  • 关于spring boot自动注入出现Consider defining a bean of type ‘xxx’ in your configuration问题解决方案

    • https://blog.csdn.net/a532672728/article/details/77702772/

你可能感兴趣的:(spring,spring,boot)