且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

EasyUI+JavaWeb奖助学金管理系统[5]-使用ApacheCommonDbUtils进行数据访问类开发

更新时间:2022-03-28 02:29:36

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已经足够简洁完美了,非常推荐使用!