1.什么是DAO?
Data Access Object(数据存取对象)
位于业务逻辑和持久化数据之间
实现对持久化数据的访问
2. DAO的作用:
1、DAO起着转化器的作用,把实体类转化为数据中的记录库。
2、隔离业务逻辑代码和数据访问代码
3、隔离不同数据库的实现。
3. DAO模式的组成部分
DAO接口 DAO实现类 实体类 数据库连接和关闭工具类
4.持久化的主要操作
读取 查找 保存 修改 删除
5. 持久化:是将程序中的数据在瞬时状态和持久状态间转换的机制
6. 持久化的实现方式
数据库 普通文件 XML文件
2.在运用当中,一般提供的是class文件,但是有些信息是要变化的,比如说ip地址,数据库名称等等,那么我们需要定义一个后缀名为properties的文件,通过ResourceBundle 来取出文件里面的内容。
jdbc.properties文件
driverClass = com.mysql.jdbc.Driver url = jdbc:mysql://127.0.0.1:3306/epet user = root password = root
ResourceBundle rb = ResourceBundle.getBundle("jdbc");
driverClass = rb.getString("driverClass");
url = rb.getString("url");
user = rb.getString("user");
password = rb.getString("password");
3.定义一个工具类
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ResourceBundle; public class DBUtils { private static String driverClass; private static String url; private static String user; private static String password; static { ResourceBundle rb = ResourceBundle.getBundle("jdbc"); driverClass = rb.getString("driverClass"); url = rb.getString("url"); user = rb.getString("user"); password = rb.getString("password"); try { Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws Exception { return DriverManager.getConnection(url, user, password); } public static void closeAll(ResultSet resultSet, Statement statement, Connection connection) { if (null != resultSet) { try { resultSet.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (null != statement) { try { statement.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (null != connection) { try { connection.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
4.在建立连接的时候直接调用我们在工具类当中定义的方法,最后关闭的时候遵循先创建的后关闭,后创建的先关闭的原则
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.beiwo.epe.dao.BaseDao; import com.beiwo.epe.util.DBUtils; public class BaseDaoImpl{ @Override public int executeUpDate(String sql, Object[] param) { // TODO Auto-generated method stub Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; int num = 0; try { connection = DBUtils.getConnection(); preparedStatement = connection.prepareStatement(sql); if (null!=param) { for (int i = 0; i < param.length; i++) { preparedStatement.setObject(i+1, param[i]); } } num = preparedStatement.executeUpdate(); } catch (Exception e) { // TODO: handle exception }finally { DBUtils.closeAll(resultSet, preparedStatement, connection); } return num; } }
5.定义一个测试类,就可以不用main方法。
6.Junit测试类与main方法的区别
Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何完成功能和完成什么样的功能。main就是java中的主方法测试。如果你的类里有多个方法,用main方法测试的话就很不方便,想测试全部方法的话就得把测试代码全部写到main里,或者你测一个重写一次。且更重要的是,这样会使测试代码与运行逻辑代码混在一起,不规范。使用junit就方便多了,这是单元测试,你想测哪个方法就写一个对应的测试方法,然后用junit运行。每个方法之间是独立的,非常灵活。而且测试方法一般不会直接写在原类中,而是单独的测试类,这样测试代码就完全与逻辑代码分开了。