JavaWeb基础(1)

JavaWeb基础(1)

学习目标:

熟悉Java内部库中关于数据库、HTML之间的接口;

学习内容:

一、Web框架基础概念

1. Junit单元测试

测试分类
黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
白盒测试:需要写代码的。关注程序具体的执行流程。

Junit使用:属于白盒测试
步骤:

  1. 定义一个测试类(测试用例)
    测试类名:被测试的类名
    包名:xxx.xxx.xx.test
  2. 定义测试方法:可以独立运行
    方法名:test测试的方法名
    返回值:void
    参数列表:空参
  3. 给方法加@Test
  4. 导入junit依赖环境

一般我们会使用断言操作来处理结果

Assert.assertEquals(期望的结果,运算的结果);

@Before:
修饰的方法会在测试方法之前被自动执行
@After:
修饰的方法会在测试方法执行之后自动被执行

2. 反射

框架设计的灵魂;
框架:半成品软件;可以在框架的基础上进行软件开发,简化编码;
反射:将类的各个组成部分封装为其他对象,这就是反射机制;这使得可以在程序运行过程中,操作这些对象;并且可以解耦,提高程序的可扩展性。

获取Class对象的方式:

  1. Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象;
    多用于配置文件,将类名定义在配置文件中。读取文件,加载类;
  2. 类名.class:通过类名的属性class获取
    多用于参数的传递;
  3. 对象.getClass():getClass()方法在Object类中定义着;
    多用于对象的获取字节码的方式;

PS:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个;

Class对象功能:

  1. 获取成员变量们
  2. 获取构造方法们
  3. 获取成员方法们
  4. 获取全类名
3. 注解

概念:说明程序的;给计算机看的;
注释:用文字描述程序的;给程序员看的;
定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

作用分类

  • 编写文档:通过代码里标识的注解生成文档;
  • 代码分析:通过代码里标识的注解对代码进行分析;
  • 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查;

JDK中预定义的一些注解
@Override :检测被该注解标注的方法是否是继承自父类(接口)的;
@Deprecated:该注解标注的内容,表示已过时;
@SuppressWarnings:压制警告;一般传递参数all @SuppressWarnings(“all”)

在程序使用(解析)注解:获取注解中定义的属性值;

//其实就是在内存中生成了一个该注解接口的子类实现对象
public class ProImpl implements Pro{
  public String className(){
       return "cn.itcast.annotation.Demo1";
     }
   public String methodName(){
      return "show";
     }
  }

二、JDBC

1.基本概念

概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库;

JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
在这里插入图片描述

2.快速搭建

步骤

  1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar;复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下;
  2. 注册驱动;
  3. 获取数据库连接对象 Connection;
  4. 定义sql;
  5. 获取执行sql语句的对象 Statement;
  6. 执行sql,接受返回结果;
  7. 处理结果;
  8. 释放资源;
//1. 导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
//4.定义sql语句
String sql = "update account set balance = 500 where id = 1";
//5.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//6.执行sql
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
3.各个接口和类详解

DriverManager:驱动管理对象

功能:

  • 注册驱动:告诉程序该使用哪一个数据库驱动jar static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager ;

com.mysql.jdbc.Driver类中存在静态代码块

static {
try {	
 java.sql.DriverManager.registerDriver(new Driver());
 } catch (SQLException E) {
    throw new RuntimeException("Can't register driver!");
  }
}
  • 获取数据库连接:
    方法:
static Connection getConnection(String url, String user, String password) 

参数:
url:指定连接的路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称;
例子:jdbc:mysql://localhost:3306/db3

Connection:数据库连接对象

功能:

  • 获取执行sql 的对象
Statement createStatement();
PreparedStatement prepareStatement(String sql);
  • 管理事务
//开启事务
setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务;
//提交事务
commit();
//回滚事务
rollback();

Statement:执行sql的对象

执行sql:

//可以执行任意的sql
boolean execute(String sql);
//执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
int executeUpdate(String sql);
//执行DQL(select)语句
ResultSet executeQuery(String sql);

案例:

Statement stmt = null;
Connection conn = null;
try {  
   Class.forName("com.mysql.jdbc.Driver");
   String sql = "insert into account values(null,'王五',3000)";
   conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
   stmt = conn.createStatement();
   int count = stmt.executeUpdate(sql);//影响的行数
   System.out.println(count);
   if(count > 0){
       System.out.println("添加成功!");
    }else{
        System.out.println("添加失败!");
    }
} catch (ClassNotFoundException e) {
     e.printStackTrace();
 } catch (SQLException e) {			            e.printStackTrace();
}finally {
//stmt.close();   
if(stmt != null){
 try {
    stmt.close();
 } catch (SQLException e) {
     e.printStackTrace();
 }
}  
 if(conn != null){
    try {
      conn.close();
     } catch (SQLException e) {
        e.printStackTrace();
     }
  }
 }         

ResultSet:结果集对象,封装查询结果

boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true;
getXxx(参数):获取数据;
使用步骤:

  1. 游标向下移动一行
  2. 判断是否有数据
  3. 获取数据

PreparedStatement:执行sql的对象

SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接;会造成安全性问题;
解决sql注入问题:使用PreparedStatement对象来解决;
预编译的SQL:参数使用?作为占位符;

步骤:

  1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
  2. 注册驱动
  3. 获取数据库连接对象 Connection
  4. 定义sql
  5. 获取执行sql语句的对象
PreparedStatement Connection.prepareStatement(String sql) 
  1. 给?赋值
  2. 执行sql,接受返回结果,不需要传递sql语句
  3. 处理结果;释放资源

JDBC控制事务:

事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
操作:开启事务;提交事务;回滚事务。
使用Connection对象来管理事务

//调用该方法设置参数为false,即开启事务
setAutoCommit(boolean autoCommit);
commit();
rollback();

三、数据库连接池

1.连接池概念

概念:其实就是一个容器(集合),存放数据库连接的容器;当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
好处:节约资源;用户访问高效。
实现
标准接口:DataSource javax.sql包下的

//获取连接:
getConnection();
//归还连接:
Connection.close();
2.数据库连接池技术

C3P0
步骤:

  1. 导入jar包 c3p0-0.9.5.2.jar ;mchange-commons-java-0.2.12.jar
  2. 定义配置文件
  3. 创建核心对象
DataSource ds  = new ComboPooledDataSource();
  1. 获取连接:
Connection conn = ds.getConnection();

Druid
步骤:

  1. 导入jar包 druid-1.0.9.jar
  2. 定义配置文件
  3. 加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
  1. 获取数据库连接池对象:通过工厂来来获取
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
  1. 获取连接
Connection conn = ds.getConnection();
3.Spring JDBC

Spring框架对JDBC的简单封装;提供了一个JDBCTemplate对象简化JDBC的开发。
步骤:

  1. 导入jar包;
  2. 创建JdbcTemplate对象;
  3. 调用JdbcTemplate的方法来完成CRUD的操作;
//执行DML语句。增、删、改语句
update();
//查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合;这个方法查询的结果集长度只能是1
queryForMap();
//查询结果将结果集封装为list集合;将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
queryForList();
//查询结果,将结果封装为JavaBean对象;query的参数:RowMapper
query();
//查询结果,将结果封装为对象;一般用于聚合函数的查询
queryForObject();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

筱2402

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值