如何解决代码重复问题

1.什么DAO?

    Data Access Object(数据存取对象)

    位于业务逻辑和持久化数据之间

    实现对持久化数据的访问  

2. DAO的作用:

    1DAO起着转化器的作用,把实体类转化为数据中记录库。

    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运行。每个方法之间是独立的,非常灵活。而且测试方法一般不会直接写在原类中,而是单独的测试类,这样测试代码就完全与逻辑代码分开了。

 

 

 

原文地址:https://www.cnblogs.com/houjiie/p/6178264.html