第一步:将连接数据库所需的jar包导入到程序中并添加到项目里
第二步:获取数据库连接,详情如下:
//四大属性
private static String driver_class = "com.mysql.jdbc.Driver";
//ceshi为要操作的数据库名
private static String url = "jdbc:mysql://localhost:3306/ceshi";
private static String username = "root";
private static String password = "123456";
//创建连接
public static Connection getConn(){
try {
Class.forName(driver_class);
return DriverManager.getConnection(url,username,password);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
//关闭资源
public static void close(Connection conn , PreparedStatement ps , ResultSet rs){
try {
if(rs!=null){
rs.close();
}
close(conn,ps);
}catch (Exception e){
e.printStackTrace();
}
}
public static void close(Connection conn, PreparedStatement ps) {
try {
if(ps!=null){
ps.close();
}
if(conn!= null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
//测试是否与数据库成功建立连接
public static void main(String[] args) {
System.out.println(getConn());
}
第三步:写要操作的表对应的映射实体类
第四步:写通用的增删改查
//查询所有的方法
public <T>List<T> findAll(String sql,Class<T> cls, Object... obj){
//获取连接
Connection conn = DBUtil.getConn();
//定义预处理对象
PreparedStatement ps = null;
//查询的结果对象
ResultSet rs = null;
//返回值对象
List<T> infos = new ArrayList<>();
try {
//实例化预处理对象并处理sql语句
ps = conn.prepareStatement(sql);
//如果存在参数则处理参数,没有则直接执行
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1,obj[i]);
}
rs = ps.executeQuery();
while (rs.next()){
//循环获取每一行值
T t = rsToBean(rs,cls);
//添加到返回值对象中
infos.add(t);
}
}catch (Exception e){
e.printStackTrace();
}finally {
//关闭资源
DBUtil.close(conn,ps,rs);
}
//将返回值对象返回
return infos;
}
public <T> T rsToBean(ResultSet rs, Class<T> cls) {
T t = null;
try {
//实例化对象
t = cls.newInstance();
//获取查询的数据源
ResultSetMetaData metaData = rs.getMetaData();
//获取查询的字段总数
int columnCount = metaData.getColumnCount();
for (int i = 0; i < columnCount; i++) {
//拿到每个字段的名称
String columnLabel = metaData.getColumnLabel(i + 1);
//根据对应的名称获取对应的值
Object object = rs.getObject(columnLabel);
//通过对象的字段名称获取对应的对象的属性
Field declaredField = cls.getDeclaredField(columnLabel);
//操作对应的属性,并且给指定的属性设置值
declaredField.setAccessible(true);//设置权限
declaredField.set(t,object);
}
}catch (Exception e){
e.printStackTrace();
}
return t;
}
//通用的增删改
public int editBase(String sql,Object... obj){
//获取连接
Connection conn = DBUtil.getConn();
//预处理对象
PreparedStatement ps = null;
try {
//实例化预处理对象
ps = conn.prepareStatement(sql);
//如果有参数则设置参数
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1,obj[i]);
}
//执行sql语句
return ps.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
//关闭资源
DBUtil.close(conn,ps);
}
return -1;
}
第五步:定义对应的接口对象
第六步:定义接口的实现类,并且继承第四步所写的类
第七步:建立Test测试类测试方法