目录

一,MVC项目

--1,项目结构图

--2,写前端网页(在HBuilder里)

--3,写RunApp

--4,写Car类

--5,创建CarService 接口

--6,创建CarServiceImpl实现类

--7,创建CarController 类

--8,测试

二,练习MVC结构

--1,需求:

--2,修改HTML文件,新增按钮

--3,修改CarService接口,添加抽象方法

--4,修改CarServiceImpl类,重写抽象方法

--5,修改CarController类,添加add方法

--6,测试

三,AOP

--1,作用

--2,组成

--3,需求

--4,pom.xml里添加jar包

--5,创建切面

--6,测试

四,Mybatis

--1,需求

--2,准备Car表

--3,创建测试类

作业:



一,MVC项目

--1,项目结构图

--2,写前端网页(在HBuilder里)

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>实现MVC的结构</title></head><body><a href="http://localhost:8080/car/get">点我提交请求</a></body>
</html>

--3,写RunApp

package cn.tedu;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
//初始化了springboot,包括:自动包扫描,
//扫描启动类所在包以及子包下的所有使用了注解的类,自动iocpublic class RunApp {public static void main(String[] args) {SpringApplication.run(RunApp.class);}
}

--4,写Car类

package cn.tedu.pojo;
import org.springframework.stereotype.Component;//POJO 类,充当了MVC里的M,用来封装数据
@Component //spring的注解,用来ioc(new)
public class Car {private String name ;private String color ;private Double price ;//用引用类型,避免springmvc请求时抛出异常//get set toStringpublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", color='" + color + '\'' +", price=" + price +'}';}
}

--5,创建CarService 接口

package cn.tedu.service;
import cn.tedu.pojo.Car;
//接口里都是抽象方法
public interface CarService {//获取汽车数据
//    public abstract Car get();Car get();}

--6,创建CarServiceImpl实现类

package cn.tedu.service;import cn.tedu.pojo.Car;
import org.springframework.stereotype.Component;
//实现类实现了接口,要重写所有 抽象方法
@Component //交给spring容器进行ioc
public class CarServiceImpl implements CarService{//重写的要求:子类的方法声明必须和父类一样  +  要有足够的权限@Overridepublic Car get(){Car c = new Car();c.setName("保时捷");c.setColor("红色");c.setPrice(641000.0);return c;//准备要返回的数据,谁调用给谁返回}
}

--7,创建CarController 类

package cn.tedu.controller;
import cn.tedu.pojo.Car;
import cn.tedu.service.CarService;
import cn.tedu.service.CarServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//接受请求,处理响应
@RestController
@RequestMapping("car")
public class CarController {@Autowired//spring di 依赖注入的关系、自动装配,为了用service的功能private CarService carService;@RequestMapping("get")public Car get(){//业务都放在service层了,直接调用service就行了return carService.get();}}

--8,测试

二,练习MVC结构

--1,需求:

把请求参数,保存并打印

--2,修改HTML文件,新增按钮

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>实现MVC的结构</title></head><body><a href="http://localhost:8080/car/get">点我提交请求</a><br /><a href="http://localhost:8080/car/add?name=BMW&price=9.9&color=red">点我提交请求</a></body>
</html>

--3,修改CarService接口,添加抽象方法

    void add(Car c);//新增数据

--4,修改CarServiceImpl类,重写抽象方法

    //重写的要求:子类的方法声明必须和父类一样  +  要有足够的权限@Override//新增数据public void add(Car c) {//TODO  发起jdbc,把数据入库System.out.println(c);}

--5,修改CarController类,添加add方法

   //接受请求,解析请求参数@RequestMapping("add")public void add(Car c){//调用service,并给service传递过去请求参数carService.add(c);}

--6,测试

三,AOP

--1,作用

在方法执行前后加功能。

--2,组成

切面Aspect:其实就是一个类,由通知和切点组成

切点PointCut:找到指定包里的类,类里的方法,增加功能

通知Advice:就是类里的一个方法,分为前置通知(方法执行前要加的),后置通知(方法执行后要加的),环绕通知(方法执行前后都要加的),返回后通知,异常通知

--3,需求

统计所有service层的方法的执行时间

--4,pom.xml里添加jar包

   <dependencies><!--添加aop依赖包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency></dependencies>

--5,创建切面

package cn.tedu.service;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
//spring的aop功能,其实就是为了增强方法的功能,由切点和通知组成
//aop的使用场景:事务管理,缓存管理,权限管理,日志管理,性能测试
@Component
@Aspect//1. 标记是一个切面
public class AspectTest {//2. 切点表达式:用来给 指定包,类,方法 加功能//*代表一个值 ..表示多个值 第1个*表示方法的返回值 第2个*表示类 第2个*表示方法//@Pointcut("execution(返回值 包名.类名.方法名(参数列表) )")@Pointcut("execution(* cn.tedu.service..*.*(..) )")public void point(){}//3. 通知:本质就是一个方法,增强功能@Around("point()")//标志这是环绕通知,是在方法执行前后都加了功能public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {long start = System.currentTimeMillis() ;Object o = joinPoint.proceed();//继续执行原来的业务方法long end = System.currentTimeMillis() ;System.out.println("aop计算的耗时是:"+(end-start));return o ; //返回这个结果}
}

--6,测试

只要访问了切点规定的包里的资源,都会触发aop统计耗时

四,Mybatis

--1,需求

利用jdbc从数据库中获取name=bmw数据,并给Car设置值

--2,准备Car表

CREATE TABLE `car` (`name` varchar(255) default NULL,`color` varchar(255) default NULL,`price` double default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--3,创建测试类

package cn.tedu.service;
import cn.tedu.pojo.Car;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;//利用jdbc从数据库中获取name=bmw数据,把查到的结果设置给car的属性
//先导包
//        <dependency>
//            <groupId>mysql</groupId>
//            <artifactId>mysql-connector-java</artifactId>
//            <version>5.1.48</version>
//        </dependency>
public class TestJDBC {public static void main(String[] args) throws Exception {//1,注册驱动Class.forName("com.mysql.jdbc.Driver");//2,获取数据库的连接String url = "jdbc:mysql:///cgb2104?characterEncoding=utf8&serverTimezone=Asia/Shanghai" ;Connection conn = DriverManager.getConnection(url,"root","root");//3,获取传输器String sql = "select * from car where name = ? " ;PreparedStatement ps = conn.prepareStatement(sql);//给SQL设置String类型的参数ps.setString(1,"bmw");//4,执行SQLResultSet rs = ps.executeQuery();//5,解析结果集Car c = new Car();  //5.1while(rs.next()){ //判断结果集中有数据吗
//            rs.getXxx()从结果集中,获取不同类型的数据String name = rs.getString(1);//获取第1列的值String color = rs.getString(2);//获取第2列的值double price = rs.getDouble(3);//获取第3列的值//!!!! 5.2 拿着从库里查到的数据用一用c.setName(name);c.setColor(color);c.setPrice(price);}//5.3 Car{name='BMW', color='red', price=9.9}System.out.println(c);//6,释放资源 OOMrs.close();ps.close();conn.close();}
}

作业:

结合jdbc技术,把CarController接收到的数据入库。

把前后端关联处理业务的代码,CarController和CarService等代码敲三遍。

把AOP代码敲三遍,加强IOC,DI的理解

cgb2104-day16相关推荐

  1. Day16 os模块、time模块、random模、math模块

    1.os模块-对系统就行操作 #system() 在python中执行系统命令 #popen() 执行系统命令返回对象,通过read方法读出字符串 #listdir() 获取指定文件夹中所有内容的名称 ...

  2. Java基础day16

    Java基础day16 Java基础day16-集合3 1.Map集合 1.1Map集合概述和特点 1.2Map集合的基本功能 1.3Map集合的获取功能 1.4Map集合的遍历(方式1) 1.5Ma ...

  3. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  4. LeetCode算法入门- Generate Parentheses -day16

    LeetCode算法入门- Generate Parentheses -day16 题目描述 Given n pairs of parentheses, write a function to gen ...

  5. QT每日一练day16:QMessageBox消息对话框

    一.运行结果(GIF动图): 二.附代码 day16.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG + ...

  6. 句句真研—每日长难句打卡Day16

    句句真研-每日长难句打卡Day16 补九月二号 参考译文:那些回应称"音乐录音无法替代现场演出"的音乐会忠实听众没有真正抓住核心问题.

  7. Python菜鸟入门:day16编程学习

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  8. day16【前台】项目展示

    day16[前台]项目展示 1.首页显示项目 1.1.整体思路 1.2.创建VO 1.2.1.PortalTypeVO 数据库表 实体类如下:封装List<PortalProjectVO> ...

  9. 21天Jmeter打卡day16参数传递token传递,接口关联

    21天Jmeter打卡day16参数传递 token传递,接口关联 https://www.jianshu.com/p/e3a116f7bf6b 实现效果,把第一个请求的响应结果,提取出来,作为变量传 ...

  10. 30天数据分析与机器学习实践之Day16——Python文本数据分析:新闻分类任务

    30天数据分析与机器学习实践之Day16--Python文本数据分析:新闻分类任务 一.文本分析与关键词提取 1.1文本数据 1.2停用词 1.语料中大量出现2.没啥大用3.留着过年嘛? 1.3Tf- ...

最新文章

  1. 卡巴循环30天不限次数循环试用工具
  2. jQuery遍历json数组怎么整。。。
  3. ubuntu lamp配置多域名服务器
  4. vue.js使用例子
  5. android 更新平台,Android更新平台架构方案
  6. 为什么鞋带总是松开?罪魁祸首其实是…
  7. 三元运算符, @屏蔽错误运算符
  8. 编译自定义的主题theme
  9. Spring Boot 核心配置文件,yml 语法规范、 多环境配置、配置文件加载顺序
  10. 教你用Axure绘制三级菜单
  11. 解决Mac下应用“已损坏”或“将对您的电脑造成伤害”
  12. 仿微信语音输入页面(讯飞语音)
  13. robots.txt文件信息泄漏
  14. 微信公众平台编辑模式
  15. 语音端点检测c语言,语音端点检测的方法.ppt
  16. 新手安装hadoop教程和个人遇到的错误及解决办法(错误:./hadoop-daemon.sh start journalnode用不了和WARNING: HADOOP_SECURE_DN_USER)
  17. Vue-Element写一个简单的列表管理23/100统
  18. three.js开发全景视频播放器的现实方法
  19. 孙宇晨:90后的倔强
  20. 用善良与热忱让服务升温 麦田房产获得客户信赖

热门文章

  1. 在美光之后,又一家美国科技企业在中国溃败,美企再也傲不起来
  2. POPPER 的设计和优化
  3. 一文读懂功率信号源(信号发生器)
  4. 面试必备,Linux面试题和答案!
  5. tomcat-如何调试源码?
  6. halcon中的fft_generic算子
  7. [Unity] Generic 模式的动画混合和移动方向发生错误的解决办法:使用 Humanoid 模式
  8. 声光报警器 | 在软件开发项目中加入声光告警、语音通知方案
  9. Katy Perry的音乐
  10. 【人工智能周末直播专场】机器学习趣味大赏+强化学习全景介绍