JAVAEE---javaweb和SpringBoot

JavaEE和SpringBoot

一 JavaEE基础知识

1.分层框架

客户端访问

—>表现层/控制层 : 总servlet(拦截所有请求并调用方法处理)

—>业务层 : service(处理需求)

—>持久层/数据访问层 : dao(写底层方法,减少冗余代码)

2.MVC模式

  • model : 数据模型,方便各层级之间传递数据
  • view:页面(展示数据)
  • controller:控制器(控制请求与输出,使流程更加清晰)

3.Maven项目

  • Maven可以创建java项目、Web项目和聚合项目

  • 聚合项目就是在一个项目中,可以创建多个Module,通过Maven集中管理

  • 在Module中添加依赖,依赖会向下传递

    image-20201210205748981

二 SpringBoot项目

1.使用IDEA相关设置

  1. 创建maven项目,选择webapp模板

  2. 设置选择maven版本和my_repository地址

  3. 修改pom文件

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    <!--添加springboot作为父工程-->
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.3.RELEASE</version>
      <relativePath />
    </parent>
    
    <dependencies>
      <!--添加web的依赖-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <!--添加操作数据库的依赖   mybatis-->
      
    </dependencies>
    
  4. 在src下,添加java目录和resources目录

    1. 在java目录下写代码(main方法和其对应的控制层、业务层等目录要在同一级目录下);
    2. 在resources目录下创建static文件夹,存放HTML等静态展示文件(客户端可直接访问的页面);
    3. 可以手动创建banner.txt ,用于显示控制台上的初始化图形。
image-20201210204400692

2.写SpringBoot程序

  • @SpringBootApplication 程序入口 : 写在主类的注释位置

    启动Tomcat

    加载这个项目

    创建application容器

@SpringBootApplication
public class Demo01 {
    public static void main(String[] args) {
        SpringApplication.run(Demo01.class,args);
    }
}
  • 在主类(Demo01)所在的目录下,创建controller、pojo、service等文件夹,这些文件必须在同级目录下
image-20201210214630180
  • HTML文件和JavaEE通过action和备注进行连接

    image-20201210215952812

  • 控制层—controller

    • @RequestMapping 标注—将页面的url,映射到方法上
    • @ResponseBody 标注—向客户端反馈请求,即使没有也要写
    @Controller  //将类交给Spring
    public class MyController {
        
        @RequestMapping("/login")		//将页面的url,映射到方法上
        @ResponseBody					//向客户端反馈请求,即使没有也要写
        public void login(String username, String password) {
            System.out.println(username);
            System.out.println(password);
        }
    
    }
    
  • 业务层—service

    • service中面向接口编程(可以实现动态代理)
    • 需要一个接口类
    • 实现类需要@Service 标注,将业务类交给Spring
    package com.doit.ab.service;
    
    import com.doit.ab.pojo.User;
    
    public interface UserService {
        public User login(String username,String password);
    }
    
    package com.doit.ab.service;
    
    import com.doit.ab.pojo.User;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImp implements UserService {
    
        @Override
        public User login(String username, String password) {
            return null;
        }
    }
    
  • 控制层与业务层的连接—自动注入

    • 在控制层的类中,通过注释Autowired 直接获取业务层的接口对象,通过该对象调用方法,实现功能

      @Autowired

    • 该过程为自动注入:自动从容器中获取业务层的实现类

    • Spring会自动调和类与对象的关系,不需要在控制层通过new的方式获取对象

    image-20201210231604980
  • 案例执行结果展示

    • 执行过程

    image-20201211141746348

    • 结果展示
image-20201210231436565

3.jQuery

百度百科

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。

  • 使用jQuery要自己导入

  • 选择器

    • jQuery 选择器允许您对 HTML 元素组或单个元素进行操作。

    • jQuery 中所有选择器都以美元符号开头:$()。

      元素选择器
      jQuery 元素选择器基于元素名选取元素。
      $("p")
      在页面中选取所有 <p> 元素
      
      
      id 选择器
      jQuery 选择器通过 HTML 元素的 id 属性选取指定的元素。
      页面中元素的 id 应该是唯一的,所以您要在页面中选取唯一的元素需要通过 id 选择器。
      通过 id 选取元素语法如下:
      
      $("#test")
      class 选择器
      jQuery 类选择器可以通过指定的 class 查找元素。
      
      语法如下:
      $(".test")
      
  • 事件处理

    • 在 jQuery 中,大多数 DOM 事件都有一个等效的 jQuery 方法。

      页面中指定一个点击事件:
      
      $("p").click();
      下一步是定义什么时间触发事件。您可以通过一个事件函数实现:
      
      $("p").click(function(){
          // 动作触发后执行的代码!!
      });
      

4.Ajax

百度百科

Ajax 即“Asynchronous Javascript ***A***nd XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

总结:

  • Ajax通过与事件的绑定,在不重新加载网页的情况下,对网页进行异步更新

  • 常用事件

    点击 click

    失去焦点 onblur

    键盘弹起 keyup

  • ajax请求

    1. url:指向java中的控制层
    2. data:前端向java传递的数据,默认格式是Json
    3. success:是处理java返回的数据,进行前端的输出,一般是一个方法
    4. datatype:返回的数据类型(success中function的参数类型)
  • 接收参数

    • 一 : 接收页面的请求参数 参数绑定
      1. 简单类型 直接接收
      1. pojo 属性和请求的key一致
      1. 包装类型 pageBean2
      1. HttpServletRequest
  • 返回参数

    • 二 控制器方法的返回值
    • 1)  void  没有返回值  @ResponseBody
      
    • 2)  String
      
    •   2.1   返回是 视图名称   转发重定向的URL  /html/login.html  redirect:showLogin   forward:showLogin
      
    •   2.2  在方法上 @ResponseBody  返回就是普通的字符串
      
    • 3)  Bean 集合 一定添加 @ResponseBody   将数据转换成json数据返回
      
    • 4) ModelAndView
      

案例演示:

  • 前端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>搜索</title>
    </head>
    
    <!--引入jQuery类库-->
    <script src="/js/jquery.min.js"></script>
    
    <script>
        function f1(){
            $.ajax({
                //url指向java中的控制层
                url:"/con/sousuo",
                //data是前端向java传递的数据,默认格式是Json
                data:{"input":$("#ss").val()},
                //success是处理java返回的数据,进行前端的输出,一般是一个方法
                success:function (abc){
                    for (i=0;i<abc.length;i++){
                        $("#show").append(abc[i])
                    }
                    $("#show").append("<br/>")
                }
            })
            //可简写为以下代码
            /*$.post("/con/sousuo",{"input":$("#ss").val()},function (abc){
                for (i=0;i<abc.length;i++){
                    $("#show").append(abc[i])
                }
                $("#show").append("<br/>")
            })*/
        }
    </script>
    <body>
    
    <input type="text" id="ss" value="郭德纲">
    <input type="button" value="搜索" onclick="f1()"><br/>
    <span id="show"></span>
    
    </body>
    </html>
    
  • 主类 :

    package com.doit.ajaxTest;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * 1 在web页面添加搜索框
     * 2 将搜索的内容反馈到java中
     * 3 进行分析,返回一个集合
     * 4 集合中的第一个元素是客户端输入的内容
     *      第二个元素是该内容的哈希值
     *      第三个内容是如果输入的 是郭德纲,返回于谦
     */
    @SpringBootApplication
    public class AjaxDemo {
    
        public static void main(String[] args) {
            SpringApplication.run(AjaxDemo.class,args);
        }
    }
    
  • 控制层

    package com.doit.ajaxTest.controller;
    
    import com.doit.ajaxTest.service.AjaxService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.List;
    
    @org.springframework.stereotype.Controller
    @RequestMapping("/con")
    public class Controller {
    
        @Autowired
        AjaxService ajaxService;
    
        @RequestMapping("/sousuo")
        @ResponseBody
        public List<String> sousuo(String input){
            List<String> list = ajaxService.dohe(input);
            return list;
        }
    }
    
  • 业务层

    package com.doit.ajaxTest.service;
    
    import java.util.List;
    
    public interface AjaxService {
        public List<String> dohe(String input);
    }
    
    package com.doit.ajaxTest.service;
    
    import org.springframework.stereotype.Service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Service
    public class AjaxServiceImp implements AjaxService {
    
        @Override
        public List<String> dohe(String input) {
            List<String> list = new ArrayList<>();
            list.add(input);
            int i = input.hashCode();
            list.add(i+"");
            if (input.equals("郭德纲")){
                list.add("于谦");
            }
            return list;
        }
    }
    
  • 效果展示

    image-20201211195918402

5.持久层

持久层一般与SQL相连,用于执行SQL语句,返回执行结果

5.1 连接SQL
  • Spring与SQL进行连接,需要在resources目录下,创建文件:

    application.properties

    内容为:

    spring.datasource.url=jdbc:mysql://localhost:3306/cp?useSSL=false&characterEncoding=UTF-8
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    

    image-20201212214052645

  • 在连接时,注意连接的SQL的地址、库名和账号密码

5.2 使用自动代理
  • 通过导入的依赖 : mybatis中的代理模式开发
  • 自动生成代理类
    • 我们只需要输入一个SQL语句
    • 自动生成一个执行SQL语句的实现类
  • 除JDBC外,持久层也可以使用其他数据源:mysql hive clickhouse impala…

三 可视化

在resources目录下,添加echarts.js 工具包

可以参考echarts网站

https://echarts.apache.org/zh/index.html

使用上面的可视化模板

综合案例

源数据
image-20201212224445990
主类
package com.doit.ab;

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

@SpringBootApplication
public class Demo01 {
    public static void main(String[] args) {
        SpringApplication.run(Demo01.class,args);
    }
}
控制层
package com.doit.ab.controller;


import com.doit.ab.pojo.PageBean;
import com.doit.ab.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


/**
 * 1.创建一个product类,封装product对象
 * 2.创建一个PageBean类,封装向前端传递的数据
 * 3.持久层    ProductDao  读取sql数据,放到list中
 * 4.业务层    ProductService  将name和num取出,放入PageBean中
 * 5.控制层    ProductController   将数据返回
 */

@Controller
public class ProductController {

    @Autowired
    ProductService productService;

    @RequestMapping("/tuBiao01")
    @ResponseBody
    public PageBean tuBiao01(){
        return productService.getProductPage();
    }
}
业务层
package com.doit.ab.service;

import com.doit.ab.pojo.PageBean;

public interface ProductService {

    public PageBean getProductPage();
}
package com.doit.ab.service;

import com.doit.ab.mapper.ProductDao;
import com.doit.ab.pojo.PageBean;
import com.doit.ab.pojo.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductServiceImp implements ProductService {

    @Autowired
    ProductDao productDao;


    @Override
    public PageBean getProductPage() {

        List<Product> list = productDao.getAllProducts();

        PageBean pageBean = new PageBean();
        Object[] names = new Object[list.size()];
        Object[] values = new Object[list.size()];

        for (int i = 0; i < list.size(); i++) {
            names[i] = list.get(i).getName();
            values[i] = list.get(i).getNum();
        }

        pageBean.setNames(names);
        pageBean.setNums(values);

        return pageBean;
    }
}
持久层
package com.doit.ab.mapper;

import com.doit.ab.pojo.Product;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface ProductDao {

    @Select("select * from produce")
    public List<Product> getAllProducts();
}
工具类(pojo)
package com.doit.ab.pojo;

import java.util.Arrays;

public class PageBean {

    Object[] names;
    Object[] nums;

    public Object[] getNames() {
        return names;
    }

    public void setNames(Object[] names) {
        this.names = names;
    }

    public Object[] getNums() {
        return nums;
    }

    public void setNums(Object[] nums) {
        this.nums = nums;
    }

    @Override
    public String toString() {
        return "PageBean{" +
                "names=" + Arrays.toString(names) +
                ", nums=" + Arrays.toString(nums) +
                '}';
    }
}
package com.doit.ab.pojo;

public class Product {
    private int id;
    private String name;
    private int num;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", num=" + num +
                '}';
    }
}
前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>show</title>
</head>

<!-- 引入 echarts.js -->
<script src="/js/echarts.js"></script>
<!--引入jQuery类库-->
<script src="/js/jquery.min.js"></script>

<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">

    $.ajax({

        url:"/tuBiao01",
        success:function (data){

            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));

            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: '产品销量'
                },
                tooltip: {},
                legend: {
                    data:['销量']
                },
                xAxis: {
                    data: data.names
                },
                yAxis: {},
                series: [{
                    name: '销量',
                    type: 'bar',
                    data: data.nums
                }]
            };

            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);
            
        }
    })

</script>
</body>
</html>
结果展示
image-20201212224428993
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaEE-图书管理系统通常需要包含以下数据库表: 1. 用户表(user):包括用户ID、用户名、密码、邮箱等字段。 2. 图书表(book):包括图书ID、图书名称、作者、出版社、ISBN号等字段。 3. 借阅记录表(borrow_record):包括借阅记录ID、用户ID、图书ID、借阅时间、归还时间等字段。 4. 管理员表(admin):包括管理员ID、管理员名称、密码等字段。 以下是JavaEE-图书管理系统数据库代码示例: ```sql -- 用户表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 图书表 CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `author` varchar(50) NOT NULL, `publisher` varchar(50) NOT NULL, `isbn` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 借阅记录表 CREATE TABLE `borrow_record` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `book_id` int(11) NOT NULL, `borrow_time` datetime NOT NULL, `return_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_user_id_idx` (`user_id`), KEY `fk_book_id_idx` (`book_id`), CONSTRAINT `fk_book_id` FOREIGN KEY (`book_id`) REFERENCES `book` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 管理员表 CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` -- 相关问题--: 1. 如何创建数据库表? 2. 如何在JavaEE中连接数据库? 3. 数据库中的什么是外键?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值