实训第三天

实训第三天

上午时间

主要讲了三个部分,1.jvm指令 2.数据持久化3.jdbc封装

  1. jvm指令
    这部分只要是一个初学者比较容易混淆的理解开始的,例如,a=a++ 和 a=++a这两者的区别,我刚开始的理解是第一个是先赋值后加加,第二个是先加加后赋值,老师纠正一下,这俩都是先加加,后赋值,只不过入栈的时间不同。最终显示的是在操作数栈顶的那个数。

  2. 数据持久化
    这部分主要介绍了如何持久化,将数据放到文件等不会断电消失的媒介中,就等于实现了数据持久化。可以是数据库存储。

  3. jdbc封装
    这部分内容下午还有一节,综合在一起就是封装一个方法来实现增删改方法。其中用到了动态传参。
    public static int updateExecute(String sql,Object… params){
    Connection con = getConnection();
    PreparedStatement ps=null;
    int count = 0;
    try {
    ps = con.prepareStatement(sql);
    if(params !=null){
    for (int i = 0;i<params.length;i++){
    ps.setObject(i+1,params[i]);
    }
    }
    count = ps.executeUpdate();

     } catch (SQLException e) {
         e.printStackTrace();
     }finally {
         closejdbc(con,ps);
     }
     return count;
    

    }
    这部分参数中有个Object… params,这个就是动态传参,动态传参的特点是每个函数最多有一个动态传参,而且每个动态传参必须位于参数列表的最后一个位置。动态传参数可以实现我们在参数位置传递任意个参数,此时就当params为一个数组,用法也和数组一样。
    使用一个方法来封装查询方法,使其可以对任意类都可以查询。
    有两种方法
    第一种:
    public static List queryExecute(String sql,RowMap rm,Object… params){
    Connection con = getConnection();
    List list = new ArrayList<>();
    PreparedStatement ps=null;
    ResultSet rs = null;
    try {
    ps = con.prepareStatement(sql);
    if(params !=null){
    for (int i = 0;i<params.length;i++){
    ps.setObject(i+1,params[i]);
    }
    }
    rs = ps.executeQuery();
    while(rs.next()){
    T t = rm.mapselect(rs);
    list.add(t);
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }finally {
    closeJDBC(con,ps,rs);
    }
    return list;
    }
    这种方法使用了泛型T,动态传参,还有传递方法参数(其实现在1.8之前叫做匿名内部类,1.8之后叫做lamota表达式)
    第二种方法:
    public static List queryExecute(String sql,Class clz,Object… params){
    List list = new ArrayList<>();
    Connection con = getConnection();
    ResultSet rs = null;
    try {
    PreparedStatement ps = con.prepareStatement(sql);
    if(params != null){
    for(int i=0 ; i< params.length;i++){
    ps.setObject(i+1,params[i]);
    }
    }
    rs = ps.executeQuery();
    while(rs.next()){
    T t = clz.newInstance();
    Field[] fields = clz.getDeclaredFields();
    for (Field field : fields){
    field.setAccessible(true);
    String column = field.getName();
    if(field.isAnnotationPresent(Column.class)){
    column = field.getAnnotation(Column.class).value();
    }
    field.set(t,rs.getObject(column));
    }
    list.add(t);
    }

     } catch (SQLException e) {
         e.printStackTrace();
     } catch (IllegalAccessException e) {
         e.printStackTrace();
     } catch (InstantiationException e) {
         e.printStackTrace();
     }
     return list;
    

    }
    这个方法使用到了类的反射,可以通过类的反射获得类的属性,属性可以设置,还有通过类的反射就可以调用无参构造创建一个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值