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
1
1
1
大功告成!说实话小项目用Apache Common DbUtils
已经足够简洁完美了,非常推荐使用!