集合框架
Java集合框架提供了一套性能优良、使用方便的接口和类位于java.util包中
·接口
Collection Map
↑ ↑
----------------------- ---------------
| | | |
List Set HashMap HashMap
↑ ↑
----------- -------
| | | |
ArrayList LinkedList HashSet TreeSet
集合接口:
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map 接口存储一组键值对象,提供key到value的映射
集合实现类:
ArrayList 实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高 LinkedList 采用链表存储方式。插入、删除元素率比较高
·List接口
·ArrayList集合类
创建ArrayList集合对象:
ArrayList<存储元素的数据类型> 对象名 = new ArrayList<存储元素的数据类型>();
·List接口常用方法
----------------------------------------------------------------------------------------------------------
| 方法名 | 说明 |
|-------------------------------|--------------------------------------------------------------------------|
|boolean add(Object o) |在列表的末尾顺序添加元素, 起始索引位置从0开始 |
|void add(int index,Object o) |在指定的索引位置添加元素。 索引位置必须介于0和列表中元素个数之间 |
|int size() |获取列表中的元素个数 |
|Object get(int index) |获取指定索引位置处的元素,取出的元素是Object类型,使用前需要进行强制类型转换|
|boolean contains(Object o) |判断列表中是否存在指定元素 |
|boolean remove(Object o) |从列表中删除元素 |
|Object remove(int index) |从列表中删除指定位置元素, 起始索引位置从0开始 |
----------------------------------------------------------------------------------------------------------
·LinkedList集合类
·LinkedList的特殊方法
------------------------------------------------------------------------------
| 方法名 | 说明 |
|-------------------------------|----------------------------------------------|
|void addFirst(Object o) |在列表的首部添加元素 |
|void addLast(Object o) |在列表的末尾添加元素 |
|Object getFirst() |返回列表中的第一个元素 |
|Object getLast() |返回列表中的最后一个元素 |
|Object removeFirst() |删除并返回列表中的第一个元素 |
|Object removeLast() |删除并返回列表中的最后一个元素 |
------------------------------------------------------------------------------
·集合框架的好处:
1.容量自增长。
2.提供有用的数据结构和算法,从而减少编程工作。
3.提高了程序速度和质量,因为它提供了高性能的数据结构和算法。
4.允许不同API之间的互操作,API之间可以来回传递集合。
5.可以方便地扩展或改写集合。
·Map接口
专门处理键值映射数据的存储,可以根据键实现对值的操作
·Map接口常用方法
-------------------------------------------------------------------------------------
| 方法名 | 说明 |
|----------------------------------|--------------------------------------------------|
|Object put(Object key,Object val) |以“键-值对”的方式进行存储 |
|Object get(Object key) |根据键返回相关联的值,如果不存在指定的键,返回null |
|Object remove (Object key) |删除由指定的键映射的“键-值对” |
|int size() |返回元素个数 |
|Set keySet () |返回键的集合 |
|Collection values () |返回值的集合 |
|boolean containsKey(Object key) |如果存在由指定的键映射的“键-值对”,返回true |
-------------------------------------------------------------------------------------
·迭代器
通过迭代器Iterator实现遍历
获取Iterator:Collection 接口的iterate()方法
Iterator的方法:
boolean hasNext() //判断是否存在下一个可访问的元素
Object next() //返回要访问的下一个元素
实例:
Iterator<String> it=names.iterator();//获取迭代器
while (it.hasNext()) {//判断是否拥有下一个元素
String name=it.next();
System.out.println(name);
}
for each( 增强型for循环)
语法:
for(元素类型t 元素变量x : 遍历数组或集合对象){
}
·遍历HashMap集合的方法
//声明并创建HashMap对象
Map<Integer, String> map=new HashMap<Integer, String>();
//存储数据
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王五");
//遍历集合
//方法一:values()获取所有值
Collection<String> c=map.values();
for (String string : c) {
System.out.println(c);
}
//方法二:keyset()获取所有键
Set<Integer> s=map.keySet();
for (Integer integer : s) {
String name=map.get(integer);
System.out.println(name);
}
//方法三:entrySet()获取键值映射的set图
Set<Entry<Integer, String>> s=map.entrySet();
for (Entry<Integer, String> entry : s) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
·泛型集合
好处:类型安全、消除强制类型转换、提高性能
//创建泛型
class Dog<T> {
//属性
private T name;
//方法
......
}
//使用泛型
Dog<String> d=new Dog<String>("多多");//<类型>内指定的数据类型
---------------------------------------------------------------------------------------------------------------
【第十七章】JDBC(Java数据库连接)
JDBC用于与数据库建立连接、执行SQL语句、处理结果的Java API,集成在java.sql和javax.sql包中。
·JDBC使用步骤
1.加载MySQL驱动程序
Class.forName("com.mysql.jdbc.Driver");
2.建立数据库连接Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool? characterEncoding=utf-8","root","123456");
3.创建statement/PreparedStatement对象,用来发送sql语句,并得到返回的结果
PreparedStatement pstate=conn.prepareStatement("SELECT * FROM student where id =?");
pstate.setInt(1, 10);
ResultSet rs=pstate.executeQuery();
4.处理结果
while(rs.next()){
String sno=rs.getString("sno");
String sname=rs.getString("sname");
int age=rs.getInt("sage");
String sex=rs.getString("ssex");
System.out.println("学号:"+sno+",姓名:"+sname+",年龄:"+age+",性别:"+sex);
}
5.释放资源
释放资源顺序: ResultSet → Statement → Connection
rs.close();
pstate.close();
conn.close();
·DriverManager类
作用:依据数据库的不同,管理JDBC驱动
·Driver接口
加载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
加载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
·Connection接口
作用:负责连接数据库并担任传送数据的任务
·连接MySql数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://主机名:端口号/数据库名?参数名=参数 值,"user","password");
其他参数:
localhost:3306 本地主机地址
useUnicode=true 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk本参数值必须设置为true
characterEncoding=utf8 当useUnicode设置为true时,指定字符编码
·常用方法
-----------------------------------------------------------------------
| 方法名 说 明 |
|-----------------------------------------------------------------------|
|createStatement() 创建向数据库发送sql的statement对象 |
|-----------------------------------------------------------------------|
|prepareStatement(sql) 创建向数据库发送预编译sql的PrepareSatement对象|
-----------------------------------------------------------------------
·Statement接口
作用:由 Connection 产生、负责执行SQL语句
·常用方法
-------------------------------------------------------------------------------
| 方法名 说 明 |
|-------------------------------------------------------------------------------|
|ResultSet executeQuery(String sql) 执行SQL查询并获取到ResultSet对象(结果集)|
|-------------------------------------------------------------------------------|
|int executeUpdate(String sql) 执行插入、删除、更新操作,返回更新的行数 |
|-------------------------------------------------------------------------------|
|boolean execute(String sql) 执行任意SQL语句,然后获得一个布尔值,表示是|
| 否返回ResultSet(结果集) |
-------------------------------------------------------------------------------
·PreparedStatement接口
作用:继承自Statement接口,由preparedStatement创建用于发送含有一个或多个参数的SQL语句,比Statement效率更高, 并且可以防止SQL注入,一般都使用PreparedStatement。
语法:
一个“?”代表设置一个通配符,下标从1开始
PreparedStatement pstate=prepareStatement(sql语句);
pstate.setString(参数下标, 参数值);
示例:
PreparedStatement pstate=null;
pstate=conn.prepareStatement("SELECT * FROM `user` WHERE zhanghao=? AND mima=?;");
pstate.setString(1, "zhangsan");
pstate.setString(2, "123456");
·ResultSet接口
作用:负责保存Statement执行后所产生的查询结果
·常用方法
-----------------------------------------------------------------------------
| 方法名 说 明 |
|-----------------------------------------------------------------------------|
|boolean next() 将光标从当前位置向下移动一行 |
|-----------------------------------------------------------------------------|
|boolean previous() 游标从当前位置向上移动一行 |
|-----------------------------------------------------------------------------|
|boolean first() 查找结果集中的第一行,找到返回true |
|-----------------------------------------------------------------------------|
|void close() 关闭ResultSet对象 |
|-----------------------------------------------------------------------------|
|int getInt(int colIndex) 以int形式获取结果集当前行指定列号值 |
|-----------------------------------------------------------------------------|
|int getInt(String colName) 以int形式获取结果集当前行指定列名值 |
|-----------------------------------------------------------------------------|
|float getFloat(int colIndex) 以float形式获取结果集当前行指定列号值 |
|-----------------------------------------------------------------------------|
|float getFloat(String colName) 以float形式获取结果集当前行指定列名值 |
|-----------------------------------------------------------------------------|
|String getString(int colIndex) 以String 形式获取结果集当前行指定列号值 |
|-----------------------------------------------------------------------------|
|String getString(String colName) 以String形式获取结果集当前行指定列名值 |
-----------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
【第十八章】DAO设计模式
DAO(Data Access Object,数据访问对象)是属于J2EE体系架构中数据层的操作,主要的功能是用于进行数据操作的,使用 DAO设计模式可以简化大量代码,增强程序的可移植性。
·数据持久化
将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化
实现方式:数据库、普通文件、XML文件
·程序代码高耦合的影响:
1.可读性差
2.不利于后期修改和维护
3.不利于代码复用
·DAO设计模式组成部分:
·DAO接口
接口中定义了所有的用户操作,如添加记录、删除记录及查询记录等。需要子类实现。
·DAO实现类
DAO实现类实现了DAO接口,并实现了接口中定义的所有方法。
·实体类
主要由属性setter,getter方法组成,类中的属性与表中的字段相对应,每一个实体类的对象都表示表中的每一条记录
·数据库连接和关闭工具类
主要功能是连接数据库并获得连接对象,以及关闭数据库。
·DAO设计模式的优势:
1.隔离了数据访问代码和业务逻辑代码
2.隔离了不同数据库实现
·包命名规范
实体类包:xxx.xxx.entity
DAO接口类包:xxx.xxx.dao
DAO接口实现类包:xxx.xxx.dao.impl
SERVICE接口类包:xxx.xxx.service
SERVICE接口实现类包:xxx.xxx.service.impl
·软件系统三层架构
用户请求
↓
表示层(UI)
↓
业务逻辑层(BLL)
↓
数据访问层(DAL)
↓
数据库
·分层原则
封装性原则:每个层次向外公开接口,但是隐藏内部细节
顺序访问原则:下一层为上一层服务,但不使用上层的服务分层结构中,不同层之间通过实体类传输数据