基于“ORM及封装通用的BaseDao实现通用的查询方法”和“JDBC技术篇”,实现一个项目
项目要求
- 使用JDBC,完成对如下表的增删改查操作
增加操作:使用循环和随机数技巧,增加1000个数据。要求积分在0-200,注册时间均匀分布在2018年各个月份。从26个字母中随机取3个字母作为昵称,昵称不能一样。ID自增。
删除操作:根据用户ID进行删除操作
修改操作:可以修改指定用户的积分
查询操作:
1. 可以查出指定月份注册的用户
2. 根据ID查出指定用户的信息
3. 查出积分大于某个值的用户信息
项目技术要点
基于前两章的知识要点进行实操
项目代码及jar包
本程序主要有以下几部分
-
JdbcUtil.java 使用JDBC封装的工具类
-
接口 BaseDao 封装通用的BaseDao
-
接口 DepartmentsDao 是Dao层的接口代码
-
BaseDaoImpl.java 封装通用的DML操作
-
DepartmentsDaoImpl.java 是接口DepartmentsDao的接口实现类
-
Departments.java 实体类
-
业务层接口 DepartmentsService
-
DepartmentsServiceImpl.java 对DepartmentsService接口的实现
-
addTest.java 是添加用户时随机生成的信息的类
-
showView.java 视图界面 在视图界面 调用方法
-
showTest.java 启动页面
创建表格
DROP TABLE IF EXISTS `staff`;
CREATE TABLE `staff` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(90) DEFAULT NULL,
`num` int(20) DEFAULT NULL COMMENT '积分',
`sex` varchar(90) DEFAULT NULL,
`zhuce_time` varchar(90) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
代码部分
jdbc.properties文件
driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf-8
username=root
userpassword=1234567
jdbcUtil.java
package com.bjsxt.commons;
import java.sql.*;
import java.util.ResourceBundle;
/**
* 这是一个jdbc封装的工具类
*/
public class JdbcUtil {
private static String driver;
private static String jdbcUrl;
private static String username;
private static String userpassword;
//将驱动的注册放入到static块内,static块只会初始化一次
static {
//读取Properties文件
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
driver = bundle.getString("driver");
jdbcUrl= bundle.getString("jdbcUrl");
username = bundle.getString("username");
userpassword = bundle.getString("userpassword");
//驱动的注册
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//加载数据库驱动程序
public static Connection getConnection(){
Connection conn=null;
try{
conn= DriverManager.getConnection(jdbcUrl,username,userpassword);
}catch (Exception e) {
e.printStackTrace();
} {
}
return conn;
}
//关闭 Statement 和 Connection
public static void closeAll(Statement state, Connection conn, ResultSet rs){
if (state!=null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//事务回滚
public static void roolback(Connection conn){
if (conn!=null){
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
接口 BaseDao
package com.bjsxt.dao;
import java.util.List;
/**
* 封装通用的BaseDao
*/
public interface BaseDao {
//封装一个更新操作
//String sql--是指sql语句 Object[] param--是指向sql语句内绑定的参数列表
public int executeUpdate(String sql,Object[] param);
//封装一个查询操作
public <T> List<T> executeFind(String sql, Object[] param, Class<T> clazz);
}
BaseDaoImpl.java
package com.bjsxt.dao.impl;
import com.bjsxt.commons.JdbcUtil;
import com.bjsxt.dao.BaseDao;
import org.apache.commons.beanutils.BeanUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 封装通用的DML操作
*/
public class BaseDaoImpl implements BaseDao {
@Override
public int executeUpdate(String sql, Object[] param) {
Connection conn = null;
PreparedStatement ps = null;
int rows = 0;
try{
conn = JdbcUtil.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
//得到参数的个数
ParameterMetaData pmd = ps.getParameterMetaData();
//绑定参数
for (int i=0;i<pmd.getParameterCount();i++){
ps.setObject(i+1,param[i]);
}
rows = ps.executeUpdate();
conn.commit();
}catch (Exception e){
e.printStackTrace();
JdbcUtil.roolback(conn);
}