1. 本章任务
数据库表构建完成后,开始开发数据模型类和数据访问类。
2. 数据模型类开发
数据模型类一般跟表一一对应,这个非常简单,直接贴代码就OK。此处为了节省篇幅,省略get/set方法。
/** * 机构 */ public class Depart { private String id; private String name; private String type; private String parentId; } /** * 流程 */ public class Flow { private String id; private String studentId; private String studentName; private String projectId; private String projectName; private String content; private String classUserId; private String classAdvice; private String collegeUserId; private String collegeAdvice; private String schoolUserId; private String schoolAdvice; private String currentUserId; private String currentNode; } /** * 菜单 */ public class Menu { private String id; private String name; private String path; } /** * 项目 */ public class Project { private String id; private String type; private String name; private String about; } /** * 问题 */ public class Question { private String id; private String userId; private String userName; private String departId; private String departName; private String content; private String reply; } /** * 角色菜单表 */ public class RoleMenu { private String id; private String roleId; private String menuId; } /** * 用户 */ public class User { private String id; private String userName; private String loginName; private String password; private String role; private String departId; }
3. 数据访问类选型
之前一个系列的教程熊猫大哥大教程–JSP+Servlet培训班作业管理系统开发教程采用了原生的JDBC,其中重复的代码相当多,写起来挺累。
然鹅此时我们也还不想使用Spring/MyBatis等框架,这些属于后续教程的内容。
所以我们选择使用Apache组织提供的一个非常轻量级且简单的框架Apache Common DbUtils。
打开下载链接,点击标注链接下载类库,下载完成后将commons-dbutils-1.7.jar拷贝到WebContent/WEB-INF/lib下使用即可。
4. 数据访问类开发
Apache Common DbUtils是用来对数据库增删改查进行访问的类库,提供了一种简洁的模板代码,非常好理解。
但是在使用之前还需要先封装一个数据库连接工具类,用来向Apache Common DbUtils提供数据库连接。
/** * 数据库连接工具类 */ public class ConnectionUtils { // 连接所需的固定参数 private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://127.0.0.1:3306/scholar-system?useUnicode=true&characterEncoding=utf-8&useSSL=false"; private static String user = "root"; private static String password = "Easy@0122"; // 初始化的时候加载去的弄 static { try { Class.forName(driver); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } /** * 获取连接 */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } /** * 释放连接 */ public static void releaseConnection(Connection conn) { if (conn != null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } 接下来,就可以利用DbUtils开发数据访问类了,此处我们以MenuDao的开发为例说明下,其他类几乎一模一样。 /** * 菜单数据访问类 */ public class MenuDao { /** * 新增 */ public void insert(Menu menu) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "insert into menu(name,path)values(?,?)"; Object[] params = { menu.getName(), menu.getPath() }; QueryRunner runner = new QueryRunner(); runner.update(conn, sql, params); ConnectionUtils.releaseConnection(conn); } /** * 移除 */ public void deleteById(String id) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "delete from menu where id =?"; Object[] params = { id }; QueryRunner runner = new QueryRunner(); runner.update(conn, sql, params); ConnectionUtils.releaseConnection(conn); } /** * 更新 */ public void update(Menu menu) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "update menu set name=?,path=? where id =?"; Object[] params = { menu.getName(), menu.getPath(), menu.getId() }; QueryRunner runner = new QueryRunner(); runner.update(conn, sql, params); ConnectionUtils.releaseConnection(conn); } /** * 获取一个 */ public Menu getById(String id) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select * from menu where id =?"; Object[] params = { id }; QueryRunner runner = new QueryRunner(); Menu menu = (Menu) runner.query(conn, sql, new BeanHandler<Menu>(Menu.class), params); ConnectionUtils.releaseConnection(conn); return menu; } /** * 获取全部 */ public List<Menu> getAll() throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select * from menu "; QueryRunner runner = new QueryRunner(); List<Menu> menus = runner.query(conn, sql, new BeanListHandler<Menu>(Menu.class)); ConnectionUtils.releaseConnection(conn); return menus; } /** * 获取数量 */ public int getCount() throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select count(id) from menu "; QueryRunner runner = new QueryRunner(); Number number = (Number) runner.query(conn, sql, new ScalarHandler()); int value = number.intValue(); ConnectionUtils.releaseConnection(conn); return value; } /** * 分页查询 */ public List<Menu> getPage(int page, int rows) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select * from menu limit ?,?"; QueryRunner runner = new QueryRunner(); Object[] params = { (page - 1) * rows, rows }; List<Menu> menus = runner.query(conn, sql, new BeanListHandler<Menu>(Menu.class), params); ConnectionUtils.releaseConnection(conn); return menus; } } 操作模式非常简单,获取连接后,通过DbUtils提供的类库进行增删改查操作,然后关闭连接即可。 5. 测试验证 开发一个测试类进行验证: public class MenuTest { public static void main(String[] args) throws Exception { MenuDao menuDao = new MenuDao(); Menu addMenu = new Menu(); addMenu.setName("菜单xxx"); addMenu.setPath("/xxx"); menuDao.insert(addMenu); Menu updateMenu = new Menu(); updateMenu.setId("1"); updateMenu.setName("菜单yyy"); updateMenu.setPath("/yyy"); menuDao.update(updateMenu); Menu queryMenu = menuDao.getById("1"); System.out.println(queryMenu.getName()); System.out.println(menuDao.getAll().size()); System.out.println(menuDao.getCount()); System.out.println(menuDao.getPage(1, 10).size()); menuDao.deleteById("2"); } } 输出结果如下 菜单yyy 大功告成!说实话小项目用Apache Common DbUtils已经足够简洁完美了,非常推荐使用!