从IO 到框架(6-2)-Struts2 学生管理系统实战复盘

步骤复盘:

1)建数据库和表。

2)建实体类,注意用包装类代替基本数据类,如Integer 代替int.

3)建Action类,继承ActionSupport;

    在此类中调用Service 层,利用IDE 的提示创建Service 接口和实现类,5个基本方法:增、删、改、查多个、查单个,后期加一个getPage() 用于分页。

    在Service 实现类调用Dao 层,利用IDE 的提示创建Dao 接口和实现类,除Service 层6个方法以外,还有一个getCount() 用于获取数据总条数。

4)建数据库连接类:

public class DBManager {
	private final static String DRIVER_CLASS = "com.mysql.jdbc.Driver";
	private final static String USERNAME = "root";
	private final static String PASSWORD = "root";
	private final static String URL = "jdbc:mysql://localhost:3306/1801_struts2";

	public static Connection getConnection() {
		try {
			Class.forName(DRIVER_CLASS);
			return DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void close(Connection connection, PreparedStatement prst, ResultSet resultSet) {
		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (prst != null) {
			try {
				prst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (prst != null) {
			try {
				prst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

5)建数据库工具类

public class DBUtils {
	
	public static int commonUpdate(String sql, Object... args) {

		Connection connection = DBManager.getConnection();

		PreparedStatement prst = null;
		try {
			prst = connection.prepareStatement(sql);

			for (int i = 0; i < args.length; i++) {
				prst.setObject(i + 1, args[i]);
			}

			return prst.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBManager.close(connection, prst, null);
		}
		return 0;
	}

	public List commonQuery(String sql, Class cls, Object... args) {

		List list = new ArrayList<>();
		
		Connection connection = DBManager.getConnection();

		PreparedStatement prst = null;
		ResultSet resultSet = null;
		try {
			prst = connection.prepareStatement(sql);

			if (args != null) {
				for (int i = 0; i < args.length; i++) {
					prst.setObject(i+1, args[i]);
				}
			}
			
			resultSet = prst.executeQuery();
			while(resultSet.next()){
				T ins = cls.newInstance(); 
				Field[] declaredFields = cls.getDeclaredFields(); 
				for (Field field : declaredFields) {
					field.setAccessible(true); 
					Object value = resultSet.getObject(field.getName()); 
					field.set(ins, value); 
				}
				list.add(ins);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}finally{
			DBManager.close(connection, prst,resultSet);
		}
		return list;
	}

	public int commonCount(String sql) {

		Connection connection = DBManager.getConnection();

		PreparedStatement prst = null;
		ResultSet resultSet = null;
		try {
			prst = connection.prepareStatement(sql);

			resultSet = prst.executeQuery();
			if(resultSet.next()){
				return resultSet.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBManager.close(connection, prst,resultSet);
		}
		return 0;
	}

}

6)用数据库工具类完成Dao 的实现类方法,并用JUnit 测试:在要创建测试用例的类中按 Ctrl + Shift + T,选择需测试的方法即可;写一个方法测一个方法;顺便在add 方法循环添加数据,用于测试分页。

    第一步至此大概用时50分钟。

从IO 到框架(6-2)-Struts2 学生管理系统实战复盘_第1张图片

7)Action 类方法 findUserList(), 注意实体类需要setter getter.

8)userlist.jsp, 标签;后加分页。

    JSTL & EL: 

                
			
				${user.id}
				${user.username}
				${user.password}
				${user.age}
				编辑 删除
			
		
...
                

    Struts2 labels & OGNL: 

        
	
		
			 
			 
			 
			 
			
				编辑
				删除
			
		
	...        
	

9)




你可能感兴趣的:(进化,Struts2)