package com.loaderman.demo.c_jdbc;

public class Admin {

    private int id;
private String userName;
private String pwd; public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "Admin [id=" + id + ", pwd=" + pwd + ", userName=" + userName
+ "]";
} }
package com.loaderman.demo.c_jdbc;

import java.util.List;

public class AdminDao extends BaseDao {

    // 删除
public void delete(int id) {
String sql = "delete from admin where id=?";
Object[] paramsValue = {id};
super.update(sql, paramsValue);
} // 插入
public void save(Admin admin) {
String sql = "insert into admin (userName,pwd) values (?,?)";
Object[] paramsValue = {admin.getUserName(),admin.getPwd()};
super.update(sql, paramsValue);
} // 查询全部
public List<Admin> getAll(){
String sql = "select * from admin";
List<Admin> list = super.query(sql, null, Admin.class);
return list;
} // 根据条件查询(主键)
public Admin findById(int id){
String sql = "select * from admin where id=?";
List<Admin> list = super.query(sql, new Object[]{id}, Admin.class);
return (list!=null&&list.size()>0) ? list.get(0) : null;
} }
package com.loaderman.demo.c_jdbc;

import java.util.List;

import org.junit.Test;

public class AdminDaoTest {

    @Test
public void testUpdate() throws Exception {
AdminDao adminDao = new AdminDao();
//adminDao.delete(2);
//adminDao.save(new Admin()); // 测试查询
List<Admin> list = adminDao.getAll();
System.out.println(list);
}
}
package com.loaderman.demo.c_jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List; import com.loaderman.demo.utils.JdbcUtil;
import org.apache.commons.beanutils.BeanUtils; /**
* 通用的dao,自己写的所有的dao都继承此类;
* 此类定义了2个通用的方法:
* 1. 更新
* 2. 查询
* @author Jie.Yuan
*
*/
public class BaseDao { // 初始化参数
private Connection con;
private PreparedStatement pstmt;
private ResultSet rs; /**
* 更新的通用方法
* @param sql 更新的sql语句(update/insert/delete)
* @param paramsValue sql语句中占位符对应的值(如果没有占位符,传入null)
*/
public void update(String sql,Object[] paramsValue){ try {
// 获取连接
con = JdbcUtil.getConnection();
// 创建执行命令的stmt对象
pstmt = con.prepareStatement(sql);
// 参数元数据: 得到占位符参数的个数
int count = pstmt.getParameterMetaData().getParameterCount(); // 设置占位符参数的值
if (paramsValue != null && paramsValue.length > 0) {
// 循环给参数赋值
for(int i=0;i<count;i++) {
pstmt.setObject(i+1, paramsValue[i]);
}
}
// 执行更新
pstmt.executeUpdate(); } catch (Exception e) {
throw new RuntimeException(e);
} finally {
JdbcUtil.closeAll(con, pstmt, null);
}
} /**
* 查询的通用方法
* @param sql
* @param paramsValue
*/
public <T> List<T> query(String sql, Object[] paramsValue,Class<T> clazz){ try {
// 返回的集合
List<T> list = new ArrayList<T>();
// 对象
T t = null; // 1. 获取连接
con = JdbcUtil.getConnection();
// 2. 创建stmt对象
pstmt = con.prepareStatement(sql);
// 3. 获取占位符参数的个数, 并设置每个参数的值
//int count = pstmt.getParameterMetaData().getParameterCount();
if (paramsValue != null && paramsValue.length > 0) {
for (int i=0; i<paramsValue.length; i++) {
pstmt.setObject(i+1, paramsValue[i]);
}
}
// 4. 执行查询
rs = pstmt.executeQuery();
// 5. 获取结果集元数据
ResultSetMetaData rsmd = rs.getMetaData();
// ---> 获取列的个数
int columnCount = rsmd.getColumnCount(); // 6. 遍历rs
while (rs.next()) {
// 要封装的对象
t = clazz.newInstance(); // 7. 遍历每一行的每一列, 封装数据
for (int i=0; i<columnCount; i++) {
// 获取每一列的列名称
String columnName = rsmd.getColumnName(i + 1);
// 获取每一列的列名称, 对应的值
Object value = rs.getObject(columnName);
// 封装: 设置到t对象的属性中 【BeanUtils组件】
BeanUtils.copyProperty(t, columnName, value);
} // 把封装完毕的对象,添加到list集合中
list.add(t);
} return list;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JdbcUtil.closeAll(con, pstmt, rs);
}
}
}

Dao操作的抽取的更多相关文章

  1. Dao操作的抽取,BaseDao

    Dao操作通用的步骤: 0. 写SQL语句 1. 获取连接 2. 创建stmt 3. 执行sql a) 更新 b) 查询 4. 关闭/异常 代码: BaseDao /** * 通用的dao,自己写的所 ...

  2. Javaee的Dao层的抽取

    有时候我们在实现不同功能的时候回看到很多的Dao层的增加.修改.删除.查找都很相似,修改我们将他们提取BaseDao 一.提取前 1. 提取前的LinkDao层: public interface L ...

  3. Java通过代理类实现数据库DAO操作

    下面的所有代码示例都取自李兴华的<Java Web开发实战经典>的随书源码,因为觉得设计得很好,所以将代码摘录下来作成笔记. 首先,我们在一个java文件中定义要存储的结构类型: impo ...

  4. 案例50-crm练习dao层的抽取BaseDao

    1 抽取BaseDao 2 BaseDao设计思路 3 BaseDao接口书写 package www.test.dao; import java.io.Serializable; import ja ...

  5. 中阶 d03.5 (正篇)完整的Dao 操作数据库

    1.目录结构: util---JDBCUtil.java(工具包,整合建立链接和释放资源的方法) dao---UserDao.java(接口,定义方法) impl---UserDaoImpl.java ...

  6. 使用common-dbutils进行dao操作

    jar: 先引出database工具类: package cn.itcast.utils; public class Stu { private int id; private String snam ...

  7. yii DAO操作总结

    数据库代码: /* Navicat MySQL Data Transfer Source Server         : lonxom Source Server Version : 50524 S ...

  8. hibernate的dao操作不能提交到数据库问题的解决

    刚学的时候总是各种错误,解决方法也无厘头的很 将UserDAO里面的的save方法修改try { getSession().save(transientInstance); log.debug(&qu ...

  9. 15、Jdbc的优化(BeanUtils组件)

    Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1    简介 程序中对javabean的操作很频繁, 所以apach ...

随机推荐

  1. Cowrie蜜罐部署教程

      0.蜜罐分类: 低交互:模拟服务和漏洞以便收集信息和恶意软件,但是攻击者无法和该系统进行交互: 中等交互:在一个特有的控制环境中模拟一个生产服务,允许攻击者的部分交互: 高交互:攻击者可以几乎自由 ...

  2. linux之网络命令

    本文整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如lsof.ip.tcpdump.iptables等. 本文不会深入研究这些命令的强大用法,因 ...

  3. deep_learning_Function_numpy_random.normal()

    numpy常用函数之random.normal函数 np.random.normal(loc=0.0, scale=1.0, size=None) 作用:   生成高斯分布的概率密度随机数 loc:f ...

  4. unix/linux共享库(动态库)简介

    一.创建共享库: 1.写源程序 xxx1.c xxx2.c.../*.c(通配符方式) 2.编译源程序,加-fpic生成.o文件 gcc -c -fpic xxx1.c xxx2.c.../*.c(通 ...

  5. C++虚函数作用原理(一)——虚函数如何在C++语言逻辑中存在

    C++多态,接触其实也没太长的时间.上课的时候老师总是不停的讲,多态可以实现利用一个基类对象调用不同继承类的成员函数.我就会觉得很伤脑筋,这个的原理到底是什么?是什么呢? 开始的时候我觉得自己应该能够 ...

  6. thinkjs 安装笔记

    1.首先安装thinkjsnpm install -g thinkjs(-g是指全局安装)检查是否安装成功:thinkjs -v 2.创建项目进入项目目录,初始化项目:thinkjs new proj ...

  7. Acwing-252-树(点分治)

    链接: https://www.acwing.com/problem/content/254/ 题意: 给定一个有N个点(编号0,1,-,N-1)的树,每条边都有一个权值(不超过1000). 树上两个 ...

  8. Spring下的@Order和@Primary与javax.annotation-api下@Priority【Spring4.1后】等方法控制多实现的依赖注入(转)

    @Order 可以作用在类.方法.属性. 影响加载顺序. 若不加,spring的加载顺序是随机的. @Primary 当注入bean冲突时,以@Primary定义的为准. @Order是控制配置类的加 ...

  9. nodejs基础一

    Node.js是一个基于Chrome V8引擎的JavaScript运行. js的运行环境 运行js有两种: .js文件方式 交互(REPL): node  回车进入交互模式 .exit 退出交互模式 ...

  10. VUE路由过度效果vs缓存

    app页面 router.js