zoukankan      html  css  js  c++  java
  • 如何解决代码重复问题

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

     

     

     

  • 相关阅读:
    django http请求request详解
    HTTP协议向服务器传参
    股票交易费用及复利计算公式
    scrapy初步使用
    通过 multiprocessing Pool 线程池加速爬虫的处理
    通过 PIL 和 Python-tesseract 模拟登陆
    BeautifulSoup
    xpath
    http 请求特殊字符
    HTTP cookies
  • 原文地址:https://www.cnblogs.com/houjiie/p/6178264.html
Copyright © 2011-2022 走看看