JAVA12_07学习总结(DbUtils,前端复习)

今日内容

1. DbUtils

DbUtils--多是针对增删查改进行操作
    Apache组织提供的开源工具类库,针对原生JDBC的一种简易封装
    步骤
        1)导包
        2)创建核心执行器
            QueryRunner
                public QueryRunner(DataSource ds)
                    DataSource --指定的数据源--连接池中的核心参数
        3)准备sql语句
        4)执行sql语句
            核心接口ResultSetHandler
                用于查找操作--有返回值或者集合的操作
                public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
                    String sql 
                        -sql语句
                    Object...params
                        -传入sql的参数--数量位置一一对应
                    ResultSetHandler<T> rsh--参数为
                        -BeanListHandler
                            --将查询结果集的结果封装到List<实体类型>集合中返回
                        -BeanHandler
                            --将查询结果集的单条结果封装到实体类中返回
                        -ScalarHandler
                            --将查询结果集的内容,返回单行单列的数据--统计总记录数!
                用于增删改--不需要返回值的操作
                    updatepublic int update(String sql, Object... params)
                        --自动提交模式
                    public int update(Connection conn, String sql, Object... params)
                        --手动提交模式
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import pojo.Student;
import utils.DruidUtils;
​
import java.sql.SQLException;
import java.util.List;
​
//测试使用DbUtils
public class DbUtilsTest {
    public static void main(String[] args) throws SQLException {
        //导包
        //创建核心执行器--参数是获取的DataSource
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        //准备sql语句
        //查询--全部
        String sql = "select * from student" ;
        //利用query方法
        List<Student> list = queryRunner.query( //得到了封装数据的集合
                sql,  //sql语句
                new BeanListHandler<>(Student.class) //直接用匿名类创建ResultSetHandler接口的实现类
        );                //--此时没有需要传入的参数,则不填参数
        //遍历输出
        for (Student student : list) {
            System.out.println(student);
        }
        /*
            十二月 07, 2022 7:42:20 下午 com.alibaba.druid.pool.DruidDataSource info
            信息: {dataSource-1} inited
            Student{id=1, name='钟离', age=30, gender='男', address='往生堂'}
            Student{id=2, name='夜阑', age=29, gender='女', address='璃月'}
            Student{id=3, name='申鹤', age=25, gender='女', address='璃月'}
            Student{id=4, name='优菈', age=19, gender='女', address='蒙德'}
            Student{id=5, name='胡桃', age=18, gender='女', address='往生堂'}
         */
        //查询--按条件查询
        //准备sql语句
        String sql1 = "select * from student where id = ?" ;
        //执行
        Student student = queryRunner.query(sql1, //sql语句
                new BeanHandler<>(Student.class), //匿名类实现ResultSetHandler,返回实体类对象
                1 //参数id
        );
        //看结果
        System.out.println(student);
        //Student{id=1, name='钟离', age=30, gender='男', address='往生堂'}
​
        //查询--返回查询数--举例返回一共有多少条数据
        //准备sql语句
        String sql2 = "select count(*) from student" ; //查询id有多少行
        //执行 --底层返回long长整型,所以返回结果要么直接定义成long,要么强转,要么通过字符串转换成int
        //直接拿Lang接收
        long l = queryRunner.query(sql2,new ScalarHandler<>());
        System.out.println(l);//5
        //强转
        int count = (int) l ;
        System.out.println(count);//5--数据不大可以
        //利用字符串转换
        String countStr = String.valueOf(l); //将long转换为String
        int countInt = Integer.parseInt(countStr); //将String转换为int
        System.out.println(countInt);//5
​
        //增删改--增加
        //准备sql语句
        String sql3 = "insert into student values (?,?,?,?,?)" ;
        //执行
        int update = queryRunner.update(sql3,
                8, "宵宫",20,"女","烟花店"); //可以不返回,查看影响条数
        System.out.println(update);// 1 --被影响一条
    }
}

2. BeanUtils

BeanUtils--封装工具类
    当一个实体类中属性很多,通过前端传过来数据,这个使用原生写法封装数据,会很麻烦!
        --相当于把读取到的数据直接通过这个方法封装在指定的地方
        Commons-BeanUtils就会提供针对实体类的封装!
            1)导入Commons-BeanUtils.核心jar包
            2)BeanUtils工具类提供一个方法
                public static void populate(Object bean, Map properties)
                    --方法里面完成setXXX()封装数据

3. 不会前端的后端不是好全栈!

前端了解
HTML
    超文本标记语言(Hyper Text Markup Language)
        常用的标签
            文本标签(换行/水平线/标题/段落/无序或者有序列表/上下标标签...)
            超链接标签 a
            图形标签 img
            表格标签 table
            表单标签 ---必须熟练书写 (重要)
            框架标签 
            h5标签 ---渲染视频/音频等等
        
CSS    
    CSS常用选择以及样式
    DiV+CSS盒子模型 -进行层级布局
        
JavaScript---livescript
    运算符/变量(var定义变量)/流程控制语句
    函数定义调用
    js里面事件编程
    js的dom编程

3.1 HTML标签

水平线
    <hr/>
滚动标签 marquee
    behavior="滚动方式"
        scroll:穿入滚动
        alternate:来回滚动
        slide 滚动一边停掉
    scrollamount ="正整数" 滚动速度
    direction ="滚动方向"
        left:右--左
        right:左--右
        down:上--下
        up:下--上
背景色 bgcolor
段落标签 p
    特点:前后两端都携带空行
换行标签 br
列表标签  
    无序列表 ul li
        type:标记列表前面的内容
                disc:实心圆点
                circle:空心圆点
                square:实心正方形
    有序列表 ol li
长引用 blockquote
    针对文本进行缩进处理 类似于tab键的作用
div和span 
    div 块标签
            后面结合CSS 控制元素,完成网页布局!(层级布局)
    span 行内标签的作用  (后期用在js表单校验)
        在表单项的后面动态提示,校验用户信息是否可用 使用行内标签
图像标签
    img标签 ,空标题 
        <img/>
                
        属性:
            src
                图像源属性 连接到url地址
                    访问本项目下的图片文件(相对路径)       
            title
                在鼠标悬浮在图片上的文字提示
            width/height
                图片宽和高 (指定px,指定整个宽度或者高度所在的权重百分比)
            alt
                替代文本
                    当前图片连接url地址失效时(alt才起作用),后面的文字提示
    body通过属性background="设置背景图片"
        这个图像必须和当前分辨率尺寸同等大,不然会进行x轴和y轴重复          
超链接a标签
    a 第一种用法:普通连接
        href="url"   
            链接到的资源地址(后端接口/服务器地址)
        target   
            打开到链接到的资源方式                     
                _blank -新建窗口打开
                _self  -当前窗口直接打开                
    a 第二种用法:锚链接
        1)创建一个跳转标记 
            <a name="锚点名称(标记名称)"></a>
        2)创建一个跳转链接
            不同页面的跳转
                <a href="链接的url地址#锚点名称">xx文本</a>
    超链接的实际作用
        前后端交互
            a标签里面href属性="url?携带参数"
                url?key1=value1&key2=value2....
表格标签
    table实际应用,就是后台管理模板里面使用数据表格完成数据CRUD
        table表格标签
            属性:
                border="边框大小 指定像素大小"
                width和height-宽和高(像素/权重百分比)
                bgcolr-背景色
                cellspacing-控制表格边框边框和单元边框之间空隙
                align-表格对齐方式
            子标签
                caption-表格的标题
                tr-行标签
                    th-表头内容,自动居中加粗的效果
                    td-单元格---理解为列
        td单元格的合并
            列合并:colspan="所占的单元格的数量"
            行合并:rowspan="所占的单元格的数量"
                        
    table标签是早期可以布局的,现在很少用table布局
            在一些很小的局部位置可能table,大部分布局div+css去布局!
表单标签 form
    重要的几个属性
        action="url地址 表单提交的后端地址"
        method="表单提交方式get/post"
    get提交和post提交的区别:
        get提交   
            1)get提交是将信息数据提交地址栏上
                    url?key1=value1&key2=value2
            2)相对post来说,不适合隐私数据(密码/输入动态密令---加密)
            3)get提交到地址栏上,数据大小有限制的!
        post提交  
            1)post提交不会提交到地址栏上,直接在浏览器中F12 ---network网络可以查看到
            2)相对get来说,安全一些, (密码/输入动态密令---加密)  
                MD5加密  
                    权限框架shiro---使用md5加密 (给原始密码上面进行 加盐)
                                    123 +"qianfeng"
            3)post提交不会将信息提交地址栏上,所以提交数据大小无限制!
注意
    表单项里面所有的必须带name属性,给后端地址标记用户书写的内容!
    表单常用标签
    文本输入框
        <input type="text" />
    密码输入框,非明文显示
        <input type="password" />
    单项按钮radio
        性别:
            <input type="radio" value="1" name="sex"  />男
            <input type="radio" value="2" name="sex"  />女
    复选框checkbox
        爱好:
            <input type="checkbox" value="1" name="hobby" />足球
            <input type="checkbox" value="2" name="hobby" />篮球
            <input type="checkbox" value="3" name="hobby" />跑步
            <input type="checkbox" value="4" name="hobby" />打游戏
    文件上传组件file
        上传图片:
            <input type="file" />
    日期组件date
        出生日期:
            <input type="date" />
    下列菜单select
        籍贯:
            <select name="province">
                <option value="0">请选择</option>
                <option value="1">陕西省</option>
                <option value="2">山西省</option>
                <option value="3">广西省</option>
            </select>
    文本域textarea 
        rows:文本域的行数
        cols:文本域中一行指定的字符数
        自我介绍:
            <textarea rows="2" cols="20">
                我很好,helloworld
            </textarea>
    普通按钮
            <input type="button" value="添加" />
    表单提交按钮
            <input type="reset" value="清空" />
            <input type="submit" value="注册" />
    button
            <button>注册</button>
                button标签和 input type="submit"都是提交数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五目炒饭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值