SpringBoot总结

本文介绍了SpringBoot的基础知识,包括其设计目的、主要特点,以及如何安装和配置。详细阐述了SpringBoot如何简化应用程序的搭建,特别是通过starter模块进行依赖管理和自动配置。此外,还演示了SpringBoot与Mybatis、Freemarker的集成步骤,包括添加依赖、配置文件设置、实体类、DAO层、Service层、Controller层的实现。最后提到了前端页面的展示,如tree.html的使用。

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

一、SpringBoot简介
1.概述
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
2.特点
1)创建独立的Spring应用程序
2)嵌入的Tomcat,无需部署war文件
3)简化maven配置
4)自动配置Spring
5)提供生产就绪型功能,如指标、健康检查、外部配置
6)绝对没有代码生成和对xml没有要求配置
二、SpringBoot安装
从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。简便起见,该框架也提供了命令行界面,它可以用来运行和测试Boot应用。框架的发布版本,包括集成的CLI(命令行界面),可以在Spring仓库中手动下载和安装。
对于不是使用CLI构建的工程,Boot提供了许多的“starter”模块,它们定义了一组依赖,这些依赖能够添加到构建系统之中,从而解析框架及其父平台所需的特定类库。例如,spring-boot-starter-actuator依赖会引入一组基本的Spring项目,从而实现应用的快速配置和即时可用。关于这种依赖,值得强调的一点就是当开发Web应用,尤其是RESTful Web服务的时候,如果包含了spring-boot-starter-web依赖,它就会为你提供启动嵌入式Tomcat容器的自动化配置,并且提供对微服务应用有价值的端点信息,如服务器信息、应用指标(metrics)以及环境详情。除此之外,如果引入spring-boot-starter-security模块的话,actuator会自动配置Spring Security,从而为应用提供基本的认证以及其他高级的安全特性。它还会为应用结构引入一个内部的审计框架,这个框架可以用来生成报告或其他的用途,比如开发认证失败的锁定策略。
在pom文件中添加SpringBoot的依赖

<!-- SpringBoot的依赖 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

三、SpringBoot集成mybatis、集成Freemarker:
1.在pom中添加依赖

<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.0</modelVersion>
  <groupId>cn.et</groupId>
  <artifactId>SpringBoot</artifactId>
  <version>0.0.1-SNAPSHOT</version>

 <!-- SpringBoot的依赖 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

<dependencies>

    <!-- SpringBoot的每一个框架的集成都是一个starter 
        spring-boot-starter-web加载内嵌Tomcat
    -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- JSP limitations中有例子:
        org.apache.tomcat.embed是个内嵌的tomcat,
        tomcat-embed-jasper是Tomcat中用来解析jsp文件的
      -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

    <!-- 连接数据库的starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- mysql驱动包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.44</version>
    </dependency>

    <!-- 集成mybatis -->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!-- FreeMarker的starter -->
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-freemarker</artifactId>  
    </dependency>  

    <!-- 阿里 druid 数据库连接池 -->  
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.5</version>
    </dependency>

    <!-- 健康检查 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!-- 开发工具 -->
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-devtools</artifactId>  
        <optional>true</optional>  
    </dependency>  
</dependencies>
</project>

2.包结构:
这里写图片描述
3.application.properties文件的配置如下:

spring.datasource.url=jdbc:mysql://localhost/food
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.filters=stat,config
spring.jpa.show-sql=true
server.port=80
server.context-path=/sb
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.devtools.restart.enabled=true
debug=true  

4.Emp员工表实体类(与数据库中的表相对应):

package cn.et.lesson01;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Emp {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    @Column
    private String ename;
    @Column
    private double sal;
    @Column
    private int deptid;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public double getSal() {
        return sal;
    }
    public void setSal(double sal) {
        this.sal = sal;
    }
    public int getDeptid() {
        return deptid;
    }
    public void setDeptid(int deptid) {
        this.deptid = deptid;
    }


}

5.dao层EmpRepository接口:

package cn.et.lesson01.dao;


import org.springframework.data.repository.CrudRepository;

import cn.et.lesson01.Emp;

public interface EmpRepository extends CrudRepository<Emp,Integer>{

}

6.Service包下的EmpService 接口:

package cn.et.lesson01.service;

import java.util.Map;

import cn.et.lesson01.Emp;

public interface EmpService {
    /**
     * 根据empId获取员工信息
     * @param empId
     * @return
     */
    public Map getEmp(Integer empId);

    /**
     * 添加员工
     */
    public void saveEmp();

    /**
     * 查询所有员工信息
     * @return
     */
    public Emp queryEmp();

    /**
     * 根据empId修改员工信息
     * @param empId
     */
    public void updateEmp(Integer empId);

    /**
     * 根据empId删除员工信息
     * @param empId
     */
    public void deleteEmp(Integer empId);
}

7.EmpServiceImpl类的实现:

package cn.et.lesson01.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import cn.et.lesson01.Emp;
import cn.et.lesson01.dao.EmpRepository;
import cn.et.lesson01.service.EmpService;

@Service
public class EmpServiceImpl implements EmpService{
    @Autowired
    JdbcTemplate jdbc;

    @Autowired
    EmpRepository er;


    /**
     * 根据id查询员工信息
     */
    public Map getEmp(Integer empId){
        List<Map<String, Object>> empList = jdbc.queryForList("select * from emp where id="+empId); 
        return empList.get(0);
    }


    /**
     * 添加员工信息
     */
    public void saveEmp(){
        Emp emp = new Emp();
        emp.setEname("ss");
        emp.setSal(500.55);
        emp.setDeptid(4);
        er.save(emp);

    }


    /**
     * 查询员工信息
     */
    public Emp queryEmp(){      
        Emp emp = er.findOne(7);
        return emp;
    }

    /**
     * 修改员工信息
     */
    public void updateEmp(Integer empId){
        Emp emp = new Emp();
        emp.setId(empId);
        emp.setEname("张三疯");
        er.save(emp);
    }

    /**
     * 更新员工信息
     */
    public void deleteEmp(Integer empId){
        er.delete(empId);
    }
}

8.controller包下的SbController 类的实现:

package cn.et.lesson01.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.et.lesson01.Emp;
import cn.et.lesson01.service.EmpService;

@RestController
public class SbController {
    @Autowired
    EmpService service;
    @RequestMapping("/helloSb")
    public Map helloSb(){
        Map map = new HashMap();
        map.put("id",1);
        map.put("name","zs");
        map.put("age",20);
        return map;
    }

    /**
     * 根据员工id查询员工信息
     * @param empId
     * @return
     */
    @RequestMapping("/emp/{empId}")
    public Map getEmp(@PathVariable Integer empId){
        return service.getEmp(empId);       
    }

    /**
     * 添加员工信息
     * @return
     */
    @RequestMapping("/saveEmp")
    public String saveEmp(){
        service.saveEmp();
        return "1";
    }

    /**
     *  查询员工信息
     * @return
     */
    @RequestMapping("/queryEmp")
    public Emp queryEmp(){      
        return service.queryEmp();
    }

    /**
     * 删除员工信息
     * @return
     */
    @RequestMapping("/deleteEmp/{empId}")
    public String  deleteEmp(@PathVariable Integer empId){      
        service.deleteEmp(empId);
        return "1";
    }

    /**
     * 修改员工信息
     * @return
     */
    @RequestMapping("/updateEmp/{empId}")
    public String updateEmp(@PathVariable Integer empId){       
        service.updateEmp(empId);
                return "1";
    }
}

9.main方法的实现:

package cn.et.lesson01;

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

//@EnableAutoConfiguration//能够自动配置
@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

10.前端页面
这里写图片描述
tree.html(运用了easyUi):
这里写图片描述

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>tree.html</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="themes/icon.css">
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery.easyui.min.js"></script>
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

    <script type="text/javascript">
        //根据员工姓名查询
        function queryForm(){
            var eName=$("#empId").textbox('getValue');
            $("#dg").datagrid(('load'),{
                ename:eName
            });
        }


        function updateForm(){
            //获取选中的行
            var selectedRow=$("#dg").datagrid("getSelected");
            var empId=selectedRow.id
            $('#ff').form('submit',{
                url:'updateEmp/'+empId,

                success: function(msg){
                    msg = JSON.parse(msg);
                    if(msg.code==1){
                        $.messager.alert('提示消息','修改成功!');
                        queryForm();
                        $("#w").window('close');
                    }else{
                        $.messager.alert('错误消息',msg.message);
                    }
                }           
            });                         
        }

        function addForm(){
            $("#aa").form('submit',{
                url:'saveEmp',
                method:'POST',
                success:function(msg){
                    msg = JSON.parse(msg);
                    if(msg.code==1){                    
                        $.messager.alert('提示消息','新增成功!');
                        queryForm();                                            
                        $("#a").window('close');

                        $("#aa").form('clear');
                    }else{
                        $.messager.alert('错误消息',msg.message);
                    }
                }

            });
        }


        $(function(){
            $("#tt").tree({
                onSelect:function(node){                
                    //获取id
                    var id=node.id;
                    //重新加载
                    $("#dg").datagrid('load',{
                        deptid:id                   
                    });
                }
            });

            //通过数组定义工具栏         
            $("#dg").datagrid({
                    toolbar:[{
                    iconCls: 'icon-insert',
                    text:'新增',
                    onClick:function(){
                        //打开一个新增的窗口
                        $("#a").window('open');

                    }
                },{
                    iconCls: 'icon-update',
                    text:'修改',
                    onClick:function(){ 
                        //获取选中的行
                        var selectedRow=$("#dg").datagrid("getSelected");
                        if(selectedRow==null){
                            $.messager.alert('提示消息','请选择要修改的行');
                            return;
                        }

                        //打开窗口
                        $("#w").window('open');
                        $('#ff').form('load',selectedRow);


                    }
                },{
                    iconCls: 'icon-delete',
                    text:'删除',              
                    onClick:function(){                                     
                        //获取所有选中的行
                        var selectedRow=$("#dg").datagrid("getSelections");
                        //判断是否选中行
                        if(selectedRow==null || selectedRow==""){
                            $.messager.alert('提示消息','请选择要删除的行');
                            return;
                        }

                        //获取菜品编号的字符串形式
                        var empId ="";
                        for(var i=0;i<selectedRow.length;i++){
                            if(empId==""){
                                empId=selectedRow[i].id;
                            }else{
                                empId+=','+selectedRow[i].id;
                            }
                        }

                        //发送AJAX请求从后台删除
                        $.ajax({
                            url:'deleteEmp/'+empId,
                            method:'POST',
                            data:'_method=delete',
                            dataType:'json',
                            success: function(msg){
                                if(msg.code==1){
                                    $('#dg').datagrid('clearSelections');
                                    $.messager.alert('提示消息','删除成功!');
                                    //删除成功后再查询一遍
                                    queryForm();
                                }else{
                                    //弹出异常信息    
                                    $.messager.alert('错误消息',msg.message);                                      
                                }
                            }
                        });                 
                    }
                }]
            })      
        })
    </script>

  </head>

  <body>    
    <div id="cc" class="easyui-layout" style="width:100%;height:100%;">          
        <div data-options="region:'west',title:'部门管理',split:true" style="width:15%;">
            <ul id="tt" class="easyui-tree" data-options="url:'queryDept'"></ul>
        </div>   
        <div data-options="region:'center',title:'员工信息'" style="padding:5px;background:#eee;">
            员工姓名:<input id="empId" class="easyui-textbox" type="text" name="ename" data-options="required:false"></input>
            <a href="javascript:void(0)" class="easyui-linkbutton" onclick="queryForm()">查询</a>
            <div style="height:10px"></div>
            <table id="dg" class="easyui-datagrid" style="width:650px;height:350px" 
            data-options="singleSelect:false,url:'queryEmp',method:'get',collapsible:true,pagination:true">
                <thead>
                    <tr>
                        <!-- {"foodid":1,"foodname":"包","price":2,"img":"t01d5cd25d62b51a194.jpg"} -->
                        <th data-options="field:'id',width:80">员工编号</th>
                        <th data-options="field:'ename',width:100">员工姓名</th>
                        <th data-options="field:'sal',width:80,align:'right'">薪水</th>       
                        <th data-options="field:'deptid',width:80,align:'right'">部门编号</th>                              
                    </tr>
                </thead>
            </table>
        </div>   
    </div>  

    <div id="a" class="easyui-window" title="添加员工" data-options="iconCls:'icon-update',closed:true" style="width:330px;height:400px;padding:5px;">
        <div class="easyui-layout" data-options="fit:true">
            <form id="aa" method="post">
                <table cellpadding="5">
                    <tr>
                        <td>员工姓名:</td>
                        <td><input class="easyui-textbox" type="text" name="ename" data-options="required:true"></input></td>
                    </tr>
                    <tr>
                        <td>薪水:</td>
                        <td><input class="easyui-textbox" type="text" name="sal" data-options="required:true"></input></td>
                    </tr>  
                    <tr>
                        <td>部门编号:</td>
                        <td><input class="easyui-textbox" name="deptid" data-options="prompt:'请输入部门编号...',editable:true"></input></td>
                    </tr>  

                </table>
            </form>
             <div style="text-align:center;padding:5px">
                <a href="javascript:void(0)" class="easyui-linkbutton" onclick="addForm()">保存</a>&nbsp
                <a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearForm()">重置</a>
            </div>      
        </div>
    </div>


    <div id="w" class="easyui-window" title="修改员工信息" data-options="iconCls:'icon-update',closed:true" style="width:330px;height:200px;padding:5px;">
        <div class="easyui-layout" data-options="fit:true">
            <form id="ff" method="post">
            <input type="hidden" name="_method" value="put"/>
                <table cellpadding="5">
                    <tr>
                        <td>员工姓名:</td>
                        <td><input class="easyui-textbox" type="text" name="ename" data-options="required:true"></input></td>
                    </tr>
                    <tr>
                        <td>薪水:</td>
                        <td><input class="easyui-textbox" type="text" name="sal" data-options="required:true"></input></td>
                    </tr>       
                    <tr>
                        <td>部门编号:</td>
                        <td><input class="easyui-textbox" type="text" name="deptid" data-options="required:true"></input></td>
                    </tr>   
                </table>
            </form>
             <div style="text-align:center;padding:5px">
                <a href="javascript:void(0)" class="easyui-linkbutton" onclick="updateForm()">保存</a>&nbsp
                <a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearForm()">重置</a>
            </div>      
        </div>
    </div>
  </body>
</html>

注意:
jsp文件需要添加解析jsp文件的依赖:

    <!-- JSP limitations中有例子:
        org.apache.tomcat.embed是个内嵌的tomcat,
        tomcat-embed-jasper是Tomcat中用来解析jsp文件的
      -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

ftl文件要放在指定的templates文件夹下:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值