Java学习日志Day34_框架标签_常用css选择器_dbutils

一、框架标签

  1. 框架标签使用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>

frameSet框架

二、常用css选择器

  1. CSS:
    Cascading Style Sheet:层叠样式表(提供一些样式库)
    我们定义的样式必须样式库有的!

  2. 使用方式
    三种方式
    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. 常用类的选择器:
    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

  1. 在src目录中,实现代码的编写
    弊端:随着jar包的不断的添加,web工程所占空间内存越来越大

  2. 引入Apache的开源工具库:common-dbtuls: 封装好了这些类
    BeanListHandler----->List
    BeanHanler---->User类中

  3. 介绍:
    Apache 针对jdbc的简单封装的开源工具类库! commons-dbutils

1)mysql驱动的jar包
2)提供druid连接池的jar包
3)commons-dbutils版本号.jar包

  1. 包导入完毕之后,
    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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

igfff

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

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

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

打赏作者

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

抵扣说明:

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

余额充值