• sprintboot-web+angularjs+jdbc


    springboot_angularjs_jdbc

    这里介绍一个springboot项目的搭建过程,并结合springboot-jdbc获取数据,angularjs展示数据。

    环境搭建

    1. 使用Idea新建springboot项目
      项目建立的时候选择springboot模板;
      maven配置文件pom.xml中需要引入:spring-boot-starter-web,参见:

      <?xml version="1.0" encoding="UTF-8"?>
      <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>com.yihengliu</groupId>
      	<artifactId>angularjs_demo</artifactId>
      	<version>0.0.1-SNAPSHOT</version>
      	<packaging>jar</packaging>
      
      	<name>angularjs_demo</name>
      	<description>Demo project for Spring Boot</description>
      
      	<parent>
      		<groupId>org.springframework.boot</groupId>
      		<artifactId>spring-boot-starter-parent</artifactId>
      		<version>1.5.9.RELEASE</version>
      		<relativePath/> <!-- lookup parent from repository -->
      	</parent>
      
      	<properties>
      		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      		<java.version>1.8</java.version>
      	</properties>
      
      	<dependencies>
      		<dependency>
      			<groupId>org.springframework.boot</groupId>
      			<artifactId>spring-boot-starter-web</artifactId>
      		</dependency>
      
      		<dependency>
      			<groupId>org.springframework.boot</groupId>
      			<artifactId>spring-boot-starter-test</artifactId>
      			<scope>test</scope>
      		</dependency>
      	</dependencies>
      
      	<build>
      		<plugins>
      			<plugin>
      				<groupId>org.springframework.boot</groupId>
      				<artifactId>spring-boot-maven-plugin</artifactId>
      			</plugin>
      		</plugins>
      	</build>
      </project>
      
    2. 新建项目结构

    angularjs_demo/
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   │   └── com
        │   │       └── yihengliu
        │   │           └── angularjs_demo
        │   │               ├── AngularjsDemoApplication.java
        │   │               ├── controller
        │   │               ├── dao
        │   │               ├── model
        │   │               └── service
        │   └── resources
        │       ├── application.properties
        │       ├── static
        │       |    ├── css
        │       |    └── js
        |       └── templates
        └── test
            ├── java
            │   └── com
            │       └── yihengliu
            │           └── angularjs_demo
            │               └── AngularjsDemoApplicationTests.java
            └── resources
    
    1. 编写controller代码

      • RestController
        返回值字符串被直接传送到浏览器并显示给用户。

        package com.yihengliu.angularjsdemo.controller;
        
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
        
        /**
         * 访问controller
         *
         * @author liucheng
         * @version 0.1
         * @since 0.1 2018-01-22 上午11:49
         **/
        @RestController
        @RequestMapping("/server")
        public class RestRequestController {
            @RequestMapping("/index")
            public String method() {
                return "Index Page";
            }
        
            @RequestMapping("/users/{username}")
            public String userProfile(@PathVariable("username") String username) {
                return String.format("user %s", username);
            }
        
            @RequestMapping("/posts/{id}")
            public String post(@PathVariable("id") int id) {
                return String.format("post %d", id);
            }
        
            @RequestMapping(value = "/login", method = RequestMethod.GET)
            public String loginGet() {
                return "Login Page";
            }
        
            @RequestMapping(value = "/login", method = RequestMethod.POST)
            public String loginPost() {
                return "Login Post Request";
            }
        }
        
      • Controller
        使用模板返回使用Thymeleaf模板引擎渲染后的HTML代码。
        引入依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        

      controller编写:

       ```java
       package com.yihengliu.angularjsdemo.controller;
      
       import org.springframework.stereotype.Controller;
       import org.springframework.ui.Model;
       import org.springframework.web.bind.annotation.PathVariable;
       import org.springframework.web.bind.annotation.RequestMapping;
      
       /**
        * 普通controller
        *
        * @author liucheng
        * @version 0.1
        * @since 0.1 2018-01-22 下午1:42
        **/
       @Controller
       public class HelloController {
           @RequestMapping("/hello/{name}")
           public String hello(@PathVariable("name") String name, Model model) {
               model.addAttribute("name", name);
               return "hello";
           }
       }
       ```
      

      html页面:

       ```html
       <!DOCTYPE html>
       <html xmlns:th="http://www.thymeleaf.org">
       <head>
           <meta charset="UTF-8" />
           <title>Getting started: Serving Web Content</title>
       </head>
       <body>
           <p th:text="'Hello, ' + ${name} + '!'" />
       </body>
       </html>
       ```
      

    引入JDBC + angularjs

    准备

    1. 创建表

      CREATE TABLE `t_user` (
          id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
          name VARCHAR(20) NOT NULL,
          password VARCHAR(20)
      );
      
    2. 修改pom.xml

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
      </dependency>
      <dependency>
          <groupId>commons-dbcp</groupId>
          <artifactId>commons-dbcp</artifactId>
      </dependency>
      

    代码编写

    User.java model

    package com.yihengliu.angularjsdemo.model;
    
    /**
     * 用户类
     *
     * @author liucheng
     * @version 0.1
     * @since 0.1 2018-01-22 下午3:28
     **/
    public class User {
        private Integer Id;
        private String name;
        private String password;
    
        public Integer getId() {
            return Id;
        }
    
        public void setId(Integer id) {
            Id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    

    UserDao.java

    package com.yihengliu.angularjsdemo.dao;
    
    import com.yihengliu.angularjsdemo.model.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.support.rowset.SqlRowSet;
    import org.springframework.stereotype.Repository;
    
    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 用户Dao类
     *
     * @author liucheng
     * @version 0.1
     * @since 0.1 2018-01-22 下午3:29
     **/
    @Repository
    public class UserDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public List<User> findAll() {
            List<User> list = new ArrayList<>();
            String sql = "SELECT * FROM t_user";
            SqlRowSet rows = jdbcTemplate.queryForRowSet(sql, new Object[]{});
            while (rows.next()) {
                User user = new User();
                user.setId(rows.getInt("id"));
                user.setName(rows.getString("name"));
                user.setPassword(rows.getString("password"));
                list.add(user);
            }
            return list;
        }
    
        public User get(String id) {
            User user = null;
            String sql = "SELECT * FROM t_user WHERE ID = ?";
            SqlRowSet rows = jdbcTemplate.queryForRowSet(sql, new Object[]{id});
            while (rows.next()) {
                user = new User();
                user.setId(rows.getInt("id"));
                user.setName(rows.getString("name"));
                user.setPassword(rows.getString("password"));
            }
            return user;
        }
    
        public Integer insert(User user) {
            String sql = "INSERT INTO t_user (name, password) VALUE (?, ?)";
            Map<String, Object> tableStatus = jdbcTemplate.queryForMap("SHOW TABLE STATUS WHERE NAME='T_USER';");
            jdbcTemplate.update(sql, new Object[]{user.getName(), user.getPassword()});
            BigInteger id = (BigInteger) tableStatus.get("Auto_increment");
            return id.intValue();
        }
    
        public void update(User user) {
            String sql = "UPDATE t_user SET NAME = ?, PASSWORD = ? WHERE ID = ?";
            jdbcTemplate.update(sql, new Object[]{user.getName(), user.getPassword(), user.getId()});
        }
    
        public void delete(String id) {
            String sql = "DELETE FROM t_user WHERE ID = ?";
            jdbcTemplate.update(sql, new Object[]{id});
        }
    }
    

    UserController.java

    package com.yihengliu.angularjsdemo.controller;
    
    import com.yihengliu.angularjsdemo.dao.UserDao;
    import com.yihengliu.angularjsdemo.model.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 用户controller类
     *
     * @author liucheng
     * @version 0.1
     * @since 0.1 2018-01-22 下午3:34
     **/
    @Controller
    public class UserController {
        @Autowired
        private UserDao userDao;
    
        @GetMapping("/")
        public String index() {
            return "index";
        }
    
        @PostMapping("/save")
        @ResponseBody
        public Map<String, Object> save(@RequestBody User user) {
            Map<String, Object> result = new HashMap<>(5);
            if (user.getId() == null) {
                user.setId(userDao.insert(user));
            } else {
                userDao.update(user);
            }
            result.put("id", user.getId());
            return result;
        }
    
        @PostMapping("/get")
        @ResponseBody
        public User get(String id) {
           return userDao.get(id);
        }
    
        @ResponseBody
        @RequestMapping("/findAll")
        public List<User> findAll() {
            return userDao.findAll();
        }
    
        @PostMapping("/delete")
        @ResponseBody
        public Map<String, Object> delete(String id) {
            Map<String, Object> result = new HashMap<>(2);
            userDao.delete(id);
            result.put("id", id);
            return result;
        }
    }
    

    数据库配置

    server.port=8088
    
    # database settings
    spring.datasource.initialize=false
    spring.datasource.url=jdbc:mysql://192.168.6.209:3306/test
    spring.datasource.username=system
    spring.datasource.password=system
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

    页面编写

    使用tymeleaf模板+angularjs请求数据并绑定数据。
    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8"/>
        <title>sprint boot web</title>
        <script src="//cdn.bootcss.com/angular.js/1.5.6/angular.min.js"></script>
        <script>
            var app = angular.module('app', []);
            app.controller("UserController", function ($rootScope, $scope, $http) {
                $scope.data = {};
                $scope.rows = [];
    
                // 添加数据
                $scope.add = function () {
                    $scope.data = {
                        id: 1,
                        name: 'liucheng',
                        password: 'passowrd'
                    };
                }
    
                // 编辑数据
                $scope.edit = function (id) {
                    for (var i in $scope.rows) {
                        var row = $scope.rows[i];
                        if (id == row.id) {
                            $scope.data = row;
                            return;
                        }
                    }
                }
    
                // 移除数据
                $scope.remove = function (id) {
                    for (var i in $scope.rows) {
                        var row = $scope.rows[i];
                        if (id == row.id) {
                            $scope.rows.splice(i, 1);
                            return;
                        }
                    }
                }
    
                // 保存数据
                $scope.save = function () {
                    $http({
                        url: '/save',
                        method: 'POST',
                        data: $scope.data
                    }).success(function (r) {
                        // 保存成功后更新数据
                        $scope.get(r.id)
                    });
                }
    
                // 删除数据
                $scope.del = function (id) {
                    $http({
                        url: '/delete?id=' + id,
                        method: 'POST',
                    }).success(function (r) {
                        // 删除成功后移除数据
                        $scope.remove(r.id);
                    })
                }
    
    
                // 获取数据
                $scope.get = function (id) {
                    $http({
                        url: '/get?id=' + id,
                        method: 'POST',
                    }).success(function (data) {
                        for (var i in $scope.rows) {
                            var row = $scope.rows[i];
                            if (data.id == row.id) {
                                row.name = data.name;
                                row.password = data.password;
                            }
                        }
                        $scope.rows.push(data);
                    });
                }
    
                // 初始化时载入数据
                $http({
                    url: '/findAll',
                    method: 'POST'
                }).success(function (rows) {
                    for (var i in rows) {
                        var row = rows[i];
                        $scope.rows.push(row);
                    }
                })
            })
        </script>
    </head>
    <body ng-app="app" ng-controller="UserController">
    <h1>sprint boot web</h1>
    <h3>用户信息:</h3>
    <table cellspacing="1" style="background-color: #a0c6e5">
        <tr>
            <td>用户Id:</td>
            <td><input id="id" ng-model="data.id"/></td>
            <td>用户名:</td>
            <td><input id="name" ng-model="data.name"/></td>
            <td>密码:</td>
            <td><input id="password" ng-model="data.password"/></td>
        </tr>
    </table>
    <input type="button" value="add" ng-click="add()"/>
    <input type="button" value="save" ng-click="save()"/>
    
    <h3>用户列表:</h3>
    <table cellspacing="1" style="background-color: #a0c6e5">
        <tr style="text-align: center; color: #0076c8; background-color: #F4FAFF; font-weight: bold;">
            <td>操作</td>
            <td>ID</td>
            <td>用户名</td>
            <td>密码</td>
        </tr>
        <tr ng-repeat="row in rows" bgcolor='#F4FAFF'>
            <td>
                <input ng-click="edit(row.id)" value="编辑" type="button"/>
                <input ng-click="del(row.id)" value="删除" type="button"/>
            </td>
            <td>{{row.id}}</td>
            <td>{{row.name}}</td>
            <td>{{row.password}}</td>
        </tr>
    </table>
    <br/>
    <br/>
    <a href="http://yihengliu.com">访文章博客</a>
    </body>
    </html>
    

    测试效果

    sprintboot_angularjs_jdbc

    代码下载

    springboot_angularjs_jdbc

  • 相关阅读:
    【Daily Scrum】11-18:Postmortem of sprint 1
    【Daily Scrum】11-17
    【Daily Scrum】11-14
    【Daily Scrum】11-13
    【Daily Scrum】11-12
    【Daily Scrum】12-04
    【Daily Scrum】12-03
    【Review】Postmortem of Sprint 2 and next planning
    【Daily Scrum】11-28
    【Daily Scrum】11-27
  • 原文地址:https://www.cnblogs.com/liuchengcc/p/8330586.html
Copyright © 2020-2023  润新知