发表于: 2018-09-10 22:02:07

1 438


今天完成

完成DAO,JDBCtemplete

inteface 

package how2j_0908;

import java.util.List;

public interface DAO {
//增加
   public void add(EntryForm student);
   //修改
   public void update(EntryForm student);
   //删除
   public void delete(int id);
   //获取
   public EntryForm get(int id);
   //查询
   public List<EntryForm> list();
   //分页查询
   public List<EntryForm> list(int start, int count);
}

表格对应的实体化对象

package how2j_0908;

public class EntryForm {
public int id;
   public String name;
   public int qq;
   public String type;
   public String graduateFrom;
   @Override
   public String toString(){
return name;
   }
}

DAO层

package how2j_0908;
/**
* 编写DAO,分别JdbcTemplate和Mybatis连接数据库,
* 注意使用JDBCTemplate的时候分离Interface和Imple,
* 使用Mybatis的时候注意理解为什么不需要Impl,注意遵守命名规范。
*/

import org.omg.IOP.ENCODING_CDR_ENCAPS;

import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


/**
* 建立数据库中数据对应的对象类class EntryForm
* 编写DAO接口
* 实现DAO接口
* 把驱动初始化放在方法里
* 提供了一个getConnection方法返回连接
* <p>
* 所有的数据库操作都需要事先拿到一个数据库连接Connection,
* 以前的做法每个方法里都会写一个,如果要改动密码,那么每个地方都需要修改。
* 通过这种方式,只需要修改这一个地方就可以了。 代码变得更容易维护,而且也更加简洁。
* jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8
* jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8
*/
public class TestDAO implements DAO {
public TestDAO() {
try {
Class.forName("com.mysql.jdbc.Driver");
       } catch (ClassNotFoundException e) {
e.printStackTrace();
       }
}

public Connection getCollcetion() throws SQLException {
return DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8", "root", "123456");
   }

//获取数据总数量
   public int getTotal() {
int total = 0;
       try (Connection c = getCollcetion(); Statement s = c.createStatement()) {
//sql中查询总数有多种,其中之一为:select count(*) from
           String sql = "select count(*) from EntryForm";
           //将sql语句的执行结果,赋值给rs
           ResultSet rs = s.executeQuery(sql);
           //将赋值后的rs表达出来,因为是数据赋值,则表达的最好方式就是用字段表达
           //如果下一行的值不为空?还是rs的值不为空?百度得:下一行不为空
           while (rs.next()) {
//返回值的第一个数字
               total = rs.getInt(1);
           }
System.out.println("total=" + total);
       } catch (SQLException e) {
e.printStackTrace();
       }
return total;

   }


@Override
   public void add(EntryForm student) {
String sql = "insert into EntryForm values(null,?,?,?,?)";
       try (Connection c = getCollcetion(); PreparedStatement ps = c.prepareStatement(sql);) {
ps.setString(1, student.name);
           ps.setInt(2, student.qq);
           ps.setString(3, student.type);
           ps.setString(4, student.graduateFrom);

           ps.execute();
           ResultSet rs = ps.getGeneratedKeys();
       } catch (SQLException e) {
e.printStackTrace();
       }

}

@Override
   public void update(EntryForm student) {
String sql = "update EntryForm set name=?,qq=?,type=?,graduateFrom=? where id =?";
       try (Connection c = getCollcetion(); PreparedStatement ps = c.prepareStatement(sql);) {
ps.setString(1, student.name);
           ps.setInt(2, student.qq);
           ps.setString(3, student.type);
           ps.setString(4, student.graduateFrom);
           ps.setInt(5, student.id);

           ps.execute();
       } catch (SQLException e) {
e.printStackTrace();
       }

}

@Override
   public void delete(int id) {
try (Connection c = getCollcetion(); Statement s = c.createStatement();) {
String sql = "delete from entryform where id=" + id;
           s.execute(sql);
       } catch (SQLException e) {
e.printStackTrace();
       }

}

@Override
   public EntryForm get(int id) {
EntryForm student = null;
       try (Connection c = getCollcetion(); Statement s = c.createStatement()) {
String sql = "select * from entryform where id=" + id;
           ResultSet rs = s.executeQuery(sql);
           if (rs.next()) {
student = new EntryForm();
               String name = rs.getString("name");
               int qq = rs.getInt(3);
               String type = rs.getString(4);
               String graduateFrom = rs.getString(5);
               student.name = name;
               student.qq = qq;
               student.type = type;
               student.graduateFrom = graduateFrom;
               student.id = id;
           }
} catch (SQLException e) {
e.printStackTrace();
       }

return student;
   }

@Override
   public List<EntryForm> list() {
return list(0, Short.MAX_VALUE);
   }

@Override
   /**把所有的student分页查询出来,转换为student对象后,放在一个集合中返回*/
   public List<EntryForm> list(int start, int count) {
List<EntryForm> studentList = new ArrayList<>();
       String sql = "select * from EntryForm order by id desc limit ?,?";
       try (Connection c = getCollcetion(); PreparedStatement ps = c.prepareStatement(sql)) {
ps.setInt(1, start);
           ps.setInt(2, count);

           ResultSet rs = ps.executeQuery();
           while (rs.next()) {
EntryForm student = new EntryForm();
               int id = rs.getInt(1);
               String name = rs.getString(2);
               int qq = rs.getInt(3);
               String type = rs.getString(4);
               String graduateFrom = rs.getString(5);

               student.id = id;
               student.name = name;
               student.qq = qq;
               student.type = type;
               student.graduateFrom = graduateFrom;

               studentList.add(student);
           }
} catch (SQLException e) {
e.printStackTrace();
       }
return studentList;
   }

public static void main(String[] args) {
//下面这两行.应该如何解读?
       TestDAO dao = new TestDAO();
       List<EntryForm> nf = dao.list();
       System.out.println("数据库中总共有" + nf.size() + "条数据");
       EntryForm student = new EntryForm();
       System.out.println("删除所有数据");
       for (int i = 1; i <= nf.size(); i++) {
dao.delete(i);

       }
System.out.println("数据库中总共有" + nf.size() + "条数据");
       System.out.println("取出id=65的数据,他的name是:");
       student = dao.get(65);
       System.out.println(student.name);
       System.out.println("把他的名字改为张三,并更新到数据库");
       student.name = "张三";
       dao.update(student);
       System.out.println("取出id=65的数据,他的name是:");
       student = dao.get(65);
       System.out.println(student.name);
   }
}

什么是类对象

类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。
在理解类对象之前,先说我们熟悉的对象之间的区别:
garen和teemo都是Hero对象,他们的区别在于,各自有不同的名称,血量,伤害值。
然后说说类之间的区别
Hero和Item都是类,他们的区别在于有不同的方法,不同的属性。
类对象,就是用于描述这种类,都有什么属性,什么方法的
获取类对象
获取类对象有3种方式
1. Class.forName
2. Hero.class
3. new Hero().getClass()
在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。
注: 准确的讲是一个ClassLoader下,一种类,只会有一个类对象存在。通常一个JVM下,只会有一个ClassLoader。因为还没有引入ClassLoader概念, 所以暂时不展开了。
获取类对象的时候,会导致类属性被初始化
无论什么途径获取类对象,都会导致静态属性被初始化,而且只会执行一次。(除了直接使用 Class c = Hero.class 这种方式,这种方式不会导致静态属性被初始化)
与传统的通过new 来获取对象的方式不同 
反射机制,会先拿到Hero的“类对象”,然后通过类对象获取“构造器对象” 
再通过构造器对象创建一个对象
使用放射的方式创建对象的步骤
1.定义一个字符串,内容为"packageName.ClassName",例如
String className="how2j_0907.Hero";
2.创建类对象,三种方式都可以
Class pClass=Class.forName(className);
3.创建一个构造器,该构造器通过类对象获取
Constructor c=pClass.getConstructor();
4.通过构造器实例化
Class object=(Class)c.newInstance();例如
Hero h2=(Hero)c.newInstance();
通过反射修改类对象的某个对象的属性
获取Hero类名字叫name的字段,其中,h.getClass()为获取类对象
Field f1 = h.getClass().getDeclaredField("name");
修改这个字段在这个对象的值
f1.set(h,"teemo");

今天的收货

结束DAO、JDBC的学习,开始Mybatis的学习

遇到的问题

null

明的计划

完成对Mybatis的模仿练习,完成配置XML的学习


返回列表 返回列表
评论

    分享到