清单为复习课时老师说的重点,高亮部分为PPT上标明“考”的部分。全部整理自PPT,仅供参考。
JavaEE重点清单(接一)
- JDBC
- PreparedStatement
- EL表达式
- JSTL 概念选择题
- Hibernate
四、JDBC
JDBC驱动程序的类型
- JDBC-ODBC桥驱动程序及OCBC驱动程序
- 本地API部分Java驱动程序
- JDBC-Net纯Java驱动程序
- 本地协议纯Java驱动程序
接口名 | 说明 |
---|---|
DriverManager | 加载和卸载各种驱动程序并建立与数据库的连接 |
Connection | 与数据的连接 |
PreparedStatement | 执行预编译的SQL语句 |
ResultSet | 查询出来的数据库数据结果集 |
Statement | 执行SQL语句并将数据检索到ResultSet中 |
PreparedStatement
PreparedStatement执行预编译的sql语句,支持参数化查询,使用setShort,setString等方法为参数赋值,如参数的SQL类型为INTEGER,则用setInt方法。
优点
- 写法参数化,如
String sql = "insert into user(username,password) values(?,?)";
- 比Statement更快。性能更优,因为其已预编译在数据库系统中,参数化sql也不是字符串追加。
- 可防止SQL注入式攻击。数据库完成SQL指令的编译后才套用参数运行,因此参数中含有破坏性的指令不会被运行。
示例
conn = getConnection();
String sql = "insert into user(username,password,"+
"sex,phonenum,userType) values(?,?,?,?,?)";
ps = conn.prepareStatement(sql);
DataSource
实现方式:1.直连数据库。使用DataSource.getConnection()
产生一个标准的connection对象,使用完close,每次都需要重新建立与数据库的连接;2.连接池连接。DataSource内部封装了一个连接池,产生的connection对象自动加入到连接池中,可被下次重用。
系统管理员部署DataSource:
BasicDataSource ds = new BasicDataSource();
ds.setServerName("server_1");
ds.setDatabaseName("javaee");
//安装在server_1服务器上的数据库javaee
Context ctx = new InitialContext();
ctx.bind("jdbc/MySQLDB",ds);
//将BasicDataSource 的ds对象与逻辑名jdbc/ MySQLDB绑定在一起
/**********************************/
程序员使用DataSource
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/MySQLDB");
//通过 JNDI 取得DataSource 对象
Connection con = ds.getConnection();
//获取连接
Connection pool(连接池)
减少资源开销和创建连接的时间,简化编程模式。
private static BasicDataSource getDataSource(){
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://localhost:3306/javaee");
basicDataSource.setUsername("username");
basicDataSource.setPassword("password");
//设置池被启动时初始化的创建连接个数
basicDataSource.setInitialSize(3);
//设置最大活动连接数
basicDataSource.setMaxTotal(50);
//设置最大空闲连接数
basicDataSource.setMaxIdle(10);
//从连接池获取一个连接时,最大的等待时间,超出则抛出异常
basicDataSource.setMaxWaitMillis(1000);
return basicDataSource;
}
五、JSTL和EL
EL表达式
使Web程序开发人员能够利用JSTL和EL来开发Web程序,取代了传统直接在页面上嵌入Java程序的做法,提高程序可读性、维护性和方便性。
作用
- 获取数据:替换JSP中的脚本表达式,从各种类型的web域中检索Java对象、获取数据
- 执行运算:在JSP中执行基本的关系逻辑、数学运算
- 获取web常用开发对象:定义了一些隐式对象
- 调用Java方法:自定义EL函数调用Java类的方法
EL语法
- 在<%@page 标签里加上isELIgnored=“false”
- ${标识符}
语句在执行时会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找不到返回“”
//使用Scriptlet获取数据:
<%=request.getAttribute("userBean").getName()%>
//使用EL表达式:
${
requestScope.userBean.name}
//也可以用
userBean[name]
//可以进行数学逻辑运算
${
81/9}
${
true || false}
EL常用对象,即${隐式对象名称}中的名称介绍:
pageContext
:jsp中的pageContext对象pageScope
:page域中保存属性的Map对象,单一个jsp page的范围内,例如${pageScope.userList}requestScope
:request请求域中用于保存属性的Map对象,常用于两个jsp页面之间的请求。${requestScope.name}等价于request.getAttribute(“name”)sessionScope
:session域中用于保存属性的Map对象applicationScope
:application域中用于保存属性的Map对象,从服务器开始到关闭期间Cookie
:保存了所有cookie的Map对象Header
:保存了所有http请求头字段的Map对象
JSTL标签
允许开发人员像使用HTML标签那样在JSP中开发Java功能。扩充了一个JSP标签库来完成通用任务,如循环、国际化、条件执行等。
JSTL标签概述
应用最多的是核心标签,格式化标签、XML标签应用有限。
防范xss攻击,通过fn的escapeXml方法把可能被解释为XML标记的字符进行转义。
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}"/>
使用
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!--后续的标签都会以<c: 开头-->
标签 | JSTL用法 | 原用法/解释 |
---|---|---|
c:set | <c:set var=“name” value="${‘gareen’}" scope=“request” /> | <%request.setAttribute(“name”,“gareen”)%> |
c:out | <c:out value="${name}" | <c:out value="${name}" |
c:remove | <c:remove var=“name” scope=“request” /> | <%request.removeAttribute(“name”)%> |
c:choose | 对应<c:when> 和<c:otherwise> |
在众多选项中做选择 |
c:forEach | <c:forEach items="${userList}" var=“user" varStatus=“st” > | items="${userList}" 表示遍历的集合;var="user" 表示把每个集合中的元素放在user上;varStatus="st" 表示遍历的状态 |
c:if | 通过<c:if test=""> 进行条件判断 |
六、Hibernate简介
一个开放源代码的对象关系映射框架,对JDBC进行了轻量级的对象封装。不仅提供了从Java类到数据表之间的映射,也提供了查询和事物机制,大大减少了操作数据库的开发工作量。
数据持久化:程序中的数据以某种形式保存到某存贮介质中。实现:1.Serialization序列化,将对象存储到文件中;2.JDBC存储到数据库中;3.ORM将对象通过对象/关系映射存储到关系数据库中;4.ODB:以对象为存储单位的新型数据库。
持久化对象在Hibernate中的三种状态与转换
- 瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。
- 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库。
- 脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;托管对象状态发生改变,Hibernate不能检测到。
来源:oschina
链接:https://my.oschina.net/u/4301555/blog/4913028