Basedao封装和应用

发表时间:2017-05-11 16:52:38 浏览量( 40 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、封装BaseDao类

昨天我们学习了JDBC连接和操作数据库,按照连接几个基本步骤操作就可以了,但是昨天我们写的代码有很多的冗余,大家可以看看,添加、删除和更新用户等等几个方法,几乎除了sql语句不同之外,其他都是一样的,这样可不是很符合我们面向对象的思想,我们已经适当封装一下,使代码更加简洁。

事实上我们可以封装一个BaseDao方法,把数据库操作的几个基本过程封装为几个独立的方法,把所有数据库操作类的共有属性抽象出来,然后数据库操作类都继承这个BaseDao类即可。

BaseDao实现代码如下:

public class BaseDao {
	private String driver = "com.mysql.jdbc.Driver";
	private String url = "jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8";
	private String dbusername = "root";
	private String dbpass = "123456";

	// 抽象公共类对象
	protected Connection connection;
	protected Statement statement;
	protected PreparedStatement preparedStatement;
	protected ResultSet resultSet;

	// 建立连接
	public Connection getCon() throws ClassNotFoundException, SQLException {
		// 1、通过反射加载驱动。
		Class.forName(driver);
		// 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据
		connection = DriverManager.getConnection(url, dbusername, dbpass);
		return connection;
	}

	// 设置sql和preparedStatement参数
	public void preExe(String sql, Object[] params) throws SQLException {
		// Prepared Statement
		preparedStatement = connection.prepareStatement(sql);
		// 设置参数
		if (params != null && params.length > 0) {
			for (int i = 0; i < params.length; i++) {
				preparedStatement.setObject(i + 1, params[i]);
			}
		}
	}

	// 释放资源
	public void closeAll() {

		try {
			if (resultSet != null) {
				resultSet.close();
			}

			if (preparedStatement != null) {
				preparedStatement.close();
			}

			if (statement != null) {
				statement.close();
			}

			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

二、应用BaseDao类

应用这个BaseDao类也是非常简单,修改昨天UserDao的实现。部分代码如下:

public class UserDao extends BaseDao {

	public int addUser(String userName, String userPass) {
		int result = 0;
		try {
			// 1、建立连接
			getCon();
			// 2、设置sql和preparedStatement参数
			String sql = "insert into tb_user(user_name,user_pass) values(?,?)";
			preExe(sql, new Object[] { userName, userPass });
			result = preparedStatement.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeAll();
		}
		return result;
	}

	// 根据用户id删除数据
	public int delUser(String uid) {
		int result = 0;
		try {
			// 1、建立连接
			getCon();
			// 2、设置sql和preparedStatement参数
			String sql = "delete from tb_user where user_id=" + uid;
			preExe(sql, new Object[] { uid });
			result = preparedStatement.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeAll();
		}
		return result;
	}

	// 根据用户id,更新用户名称
	public int updateUser(int uid, String userName) {
		int result = 0;
		try {
			// 1、建立连接
			getCon();
			// 2、设置sql和preparedStatement参数
			String sql = "update tb_user set user_name=? where user_id=?";
			preExe(sql, new Object[] { userName, uid });
			result = preparedStatement.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeAll();
		}
		return result;
	}

	// 查询全部
	public List<User> getAllUser() {
		List<User> users = new ArrayList<User>();

		try {
			// 1、建立连接
			getCon();
			String sql = "select * from tb_user";
			preExe(sql, null);
			resultSet = preparedStatement.executeQuery();
			// next 判断有没有下一行,rs指向下一行的位置
			while (resultSet.next()) {
				// System.out.println(rs.getInt("user_id")+":"+rs.getString("user_name"));
				User user = new User();
				user.setUserId(resultSet.getInt("user_id"));
				user.setUserName(resultSet.getString("user_name"));

				users.add(user);
			}
		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			closeAll();
		}

		return users;
	}

	public static void main(String[] args) {
		UserDao userDao = new UserDao();
		int result = userDao.addUser("张三", "123456");
		if (result > 0) {
			System.out.println("成功了。");
		} else {
			System.out.println("失败了。");
		}
	}
}