一、框架标签
- 框架标签使用frame表示
一个frame就包含一个html页面
格式:
<frameset rows="20%,*,10%"> //横行比例:20% : 70% : 10%
<frame src="header.html"/> //横行页面——头页面
<frameset cols="15%,*"> //竖行比例:15% : 75%
<frame src="menu.html" /> //横行中间页面 / 竖行左页面
<!--给frame起名字-->
<frame src="main.html" name="main"> //横行中间页面 / 竖行右页面
</frameset>
<frame src="footer.html" /> //横行页面——脚页面
</frameset>
二、常用css选择器
- CSS:
Cascading Style Sheet:层叠样式表(提供一些样式库)
我们定义的样式必须样式库有的! - 使用方式
三种方式
1)行内样式
在html标签style属性:指定样式
style=“样式属性1:值1;样式属性2:值2”
style=“font-size: 25px;color: #00F”
弊端:一次性只能给某一个标签加入样式效果
2)内部样式
在head中指定style标签,里面属性样式代码
选择器{
样式属性名称1:值1;
样式属性名称2:值2;
}
一次性可以给多个html加入样式,需要使用选择器
3)外部样式(前端工程师:使用这种方式)
单独在web目录下面css文件夹
创建一个后缀名为.css文件
在当前页码中通过link导入css文件 rel=“stylesheet”
内部样式:
<style>
/*标签选择器*/
div{
font-size: 30px;
color: #0F0;
text-align: center;
}
</style>
——————————————————————————————————————————————————————————————————————————————————————————————
外部样式:
<link href="css/my.css" rel="stylesheet" />
</head>
<body>
<!--<div style="font-size: 25px;color: #00F">-->
<div>
div1的内容
</div>
<div>
div2的内容
</div>
</body>
</html>
- 常用类的选择器:
1). 标签选择器
在内部样式中:
标签名称{
书写样式;
}
2). class选择器(类选择器)
在标签中指定class属性
.class属性值{
书写样式
}
3). id选择器
在标签中指定id属性
#id属性值{
书写样式;
}
id>class>标签名称
class选择器和id选择器会经常用到
4). 子元素选择器
选择器1 选择器2{
书写样式;
}
<!--内部样式-->
<style>
/*标签选择器*/
/* div{
font-size:25px;
font-family: '黑体';
font-style: italic;
}*/
/*class 类选择器*/
/* .myClass{
font-size: 35px;
color: #0F0;
}*/
/*id选择器*/
/* #div1{
font-size: 40px;
color: darkgray;
}*/
/*
子元素选择器
*/
div span{
font-size: 30px;
font-family: SimSun-ExtB;
color: greenyellow;
}
</style>
</head>
<body>
<div class="myClass" id="div1">div1</div>
<span>span标签</span>
<div>
<span>span标签</span>
</div>
<div>
用户名:<input type="text" placeholder="请您输入用户名" />
</div>
</body>
</html>
三、dbutils
- 在src目录中,实现代码的编写
弊端:随着jar包的不断的添加,web工程所占空间内存越来越大 - 引入Apache的开源工具库:common-dbtuls: 封装好了这些类
BeanListHandler----->List
BeanHanler---->User类中 - 介绍:
Apache 针对jdbc的简单封装的开源工具类库! commons-dbutils
1)mysql驱动的jar包
2)提供druid连接池的jar包
3)commons-dbutils版本号.jar包
- 包导入完毕之后,
1)src下面提供连接池的配置文件
2)在src下面准备好实体类
com.qf.entity/domain/pojo
员工类
属性和emp表的字段一一对应
1)属性私有化
2)提供对外setXXX()getXXX()
3)当前类具体类
4)需要实现接口serializable:序列化接口(可以不用)
可能将类—流数据
3)提供EmpDao:针对员工类的操作的接口
List findAll();
4)提供子实现类EmpDaoImpl 实现接口
commons-dbutils: 提供了API
执行对象:QueryRunner
select * from emp ;
ResultSetHandler:接口
BeanHandler子实现类:将查询的某一条记录封装一个实体类中
BeanListHandler:将查询的多条记录封装到List<T>集合中
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
查询的数据封装List集合
MyJdbcUtils类
获取数据源---->读取了 druid.properties配置文件
5. 关于DbUtils工具类的使用
1)创建执行对象
public QueryRunner(DataSource ds
QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
2)准备sql语句: 还是参数化sql
dbutils底层使用的PreparedStatement
String sql = "select * from emp" ;
3)QueryRunner:通用的操作
增删改,update
查询:query
query(String sql,ResultSetHandler<T> handler,Object...params)
参数1:准备的参数化sql
参数2:针对结果集进行处理程序 接口
将结果封装到List集合---->BeanListHandler<T>
public BeanListHandler(Class<? extends T> type) :参数为当前封装的类型的字节码文件对象
entity: Emp.java
public class Emp {
/* id int(11)
name varchar(10)
address varchar(20)*/
private Integer id ;
private String name ;
private String address ;
public Emp() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
utils:MyJabcUtils.java
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.ConnectionEvent;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/* 加入DruidDataSource(类 实现java.sql.DataSource:物理数据源的链接))以及ThreadLocal :线程(并发)
*/
public class MyJdbcUtils {
private static DataSource dataSource = null ;
private static ThreadLocal<Connection> t1 = new ThreadLocal<Connection>() ;
//一个链接对象---相当线程
private MyJdbcUtils(){}
static{
try {
//创建一个属性集合类
Properties prop = new Properties() ;
//读取druid.properties的参数
InputStream inputStream = MyJdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties");
//加载属性集合列表中
prop.load(inputStream);
//通过工厂类
dataSource = DruidDataSourceFactory.createDataSource(prop);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取数据链接
public static Connection getCoonnection(){
//声明conn变量
Connection conn = null ;
try{
//获取连接对象
//先判断 ,如果当前conn 为null
if(conn==null){
//从连接池获取到
conn = dataSource.getConnection();
//一个连接相当一一个线程
//连接对象绑定ThreadLocal中
t1.set(conn);
}
return conn ;
}catch(Exception e){
e.printStackTrace();
}
return null ;
}
//获取数据源
public static DataSource getDataSource(){
return dataSource;
}
//释放资源
//提供关闭资源方法:针对DQL语句:查询获取结果集,关闭相关资源
public static void close(ResultSet rs, Statement stmt, Connection conn) throws SQLException {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
conn.close();
//解绑:从ThreadLocal (连接使用完毕,线程就执行完毕
t1.remove();
}
}
//针对DDL,DML操作:不需要ResultSet
public static void close(Statement stmt,Connection conn) throws SQLException {
close(null,stmt,conn);
}
//开启事务
public static void setAutoCommit(){
Connection conn = null ;
try {
conn = getCoonnection();
// //开启事务
conn.setAutoCommit(false); //取消自动提交
} catch (SQLException e) {
e.printStackTrace();
}
}
//如果事务的操作没有问题,提交事务并释放连接
public static void commitAndClose() throws SQLException {
Connection conn = getCoonnection();
//提交事务
conn.commit();
//释放连接
conn.close();
//解绑
t1.remove(); //线程(用户操作的时候,连接对象是完毕,线程执行完毕!)
}
//如果执行过程中出现问题,回滚事务
public static void rollbackAndClose() throws SQLException {
Connection conn = getCoonnection();
//事务回滚
conn.rollback();
//释放连接--归还到连接池
conn.close();
//解绑
t1.remove(); //线程(用户操作的时候,连接对象是完毕,线程执行完毕!)
}
public static void main(String[] args) {
Connection connection = MyJdbcUtils.getCoonnection();
System.out.println(connection);
DataSource dataSource = MyJdbcUtils.getDataSource();
System.out.println(dataSource);
}
}
dao:EmpDao.java
import com.qf.entity.Emp;
import java.sql.SQLException;
import java.util.List;
public interface EmpDao {
/*
* 将员工表的数据封装员工类中,最终员工类添加集合中
* */
List<Emp> findAll() ;
Emp findEmpById(Integer id) throws SQLException;
}
dao:impl:EmpDaoImpl.java
import com.qf.dao.EmpDao;
import com.qf.entity.Emp;
import com.qf.utils.MyJdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class EmpDaoImpl implements EmpDao {
@Override
public List<Emp> findAll() {
try {
List<Emp> list = qr.query(sql, new BeanListHandler<Emp>(Emp.class));
return list ;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public Emp findEmpById(Integer id) throws SQLException {
QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
String sql = "select * from emp where id =?" ;
// BeanHandler子实现类:将查询的某一条记录封装一个实体类中
Emp emp = qr.query(sql, new BeanHandler<Emp>(Emp.class), id);
return emp;
}
}
test:EmpTest.java
import com.qf.dao.EmpDao;
import com.qf.dao.impl.EmpDaoImpl;
import com.qf.entity.Emp;
import java.sql.SQLException;
import java.util.List;
public class EmpTest {
public static void main(String[] args) throws SQLException {
/* List<Emp> list = empDao.findAll();
if(list!=null){
for(Emp emp:list){
System.out.println(emp);
}
}*/
EmpDao empDao = new EmpDaoImpl() ;
Emp emp = empDao.findEmpById(5);
System.out.println(emp);
}
}