java 公用的增删改查

  使用公共的增删改查,可以节省时间,也可以减少代码量。


在BaseDao 接口中:


public interface BaseDao {
	/**
	 * 通用的增刪改方法
	 * @param sql
	 * @param param
	 * @return
	 */
public int excutesql(String sql,Object[]param);
/**
 * 通用的改方法
 * @param sql     需要查詢的sql語句
 * @param classt  需要返回的字符集
 * @param param   參數
 * @return
 */
public List excuteQuery(String sql, Class classt,Object...param);
}

在BaseDaoImpl中:

public class BaseDaoImpl implements BaseDao{
/**
 * 通用的增删改的方法
 */
	public int exetesql(String sql, Object[] param) {
//获取连接
		Connection connection = JDBCUtil.connection();
		try {

			PreparedStatement p = connection.prepareStatement(sql);
		//设置参数
			for(int i=0;i<param.length;i++){
				p.setObject(i+1, param[i]);
			}
			int i=p.executeUpdate();
			return i;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
/**
 * 通用的查询方法
 */
public List excuteQuery(String sql, Class classt, Object... param) {
	List list = new ArrayList();
 //1.获取链接
	Connection connection = JDBCUtil.connection();
	try {
//2.批处理
		PreparedStatement p = connection.prepareStatement(sql);
//3.设置参数
		if(null!=param){
			for(int i=0;i<param.length;i++){
				p.setObject(i+1, param[i]);
				
			}
		}
	//4.获取结果集
		ResultSet r= p.executeQuery();
	//5.获取对象
	  Object obj;
	//6.获取字节码对象里面的属性
     Field[] fields = classt.getFields();
    //7。得到结果集的字段数,字段名
     ResultSetMetaData metaData = r.getMetaData();
    // System.out.println("");
     //8.循环输出
     int columnCount = metaData.getColumnCount();//9.获取列的总数
     System.out.println(columnCount);
     while(r.next()){
    	obj = classt.newInstance();
    	//10.循环列
    	for(int i=1;i<= columnCount; i++){
              //11.获取列
    		String columnLabel = metaData.getColumnLabel(i);//别名
    		String columnName = metaData.getColumnName(i);//列名
    		
    		System.out.println("columnLabel: "+columnLabel);
    		System.out.println("columnName: "+columnName);
    	//	12.根据属性名称获取对应的属性
    		if(null!=columnLabel){
    		Field df = classt.getDeclaredField(columnName);
    	
    		if(null!=df){
    			df.setAccessible(true);//13.将私有的打开
    			df.set(obj, r.getObject(columnLabel));//14.设值,设列名
    		}
    		}
    	}
    	//15.添加到list里面
    	list.add(obj);
     }
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (InstantiationException e) {
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		e.printStackTrace();
	} catch (SecurityException e) {
		e.printStackTrace();
	} catch (NoSuchFieldException e) {
		e.printStackTrace();
	}
	
	return list;
}

在JDBCUtil工具类:

public class JDBCUtil {
static String NAME="root";
static String PASS="root";
static String URL="jdbc:mysql://127.0.0.1:3306/mysql";
static String DRIVER="com.mysql.Driver";
static
{
	//1.读取properties文件
	InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
	//2.获取一个properties对象
	Properties properties = new Properties();
	//3.判断不为空
	if(resourceAsStream!=null)
	{
		try {
			properties.load(resourceAsStream);
			NAME=properties.getProperty("NAME");
			PASS=properties.getProperty("PASS");
			URL=properties.getProperty("URL");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  public static Connection connection()
  {
	  Connection con=null;
	  try {
		Class.forName("DRIVER");
		con=DriverManager.getConnection(URL, NAME, PASS);
		
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	  
	return con;
}

jdbc.properties配置文件:

name=root
pass=root
url=jdbc:mysql://127.0.0.1:3306/mysql
driver=com.mysql.jdbc.Driver
如果我需要查询数据库的 Commodity表时:1.CommodityDao 接口先继承BaseDao类,里面可以什么都不用写
public interface CommodityDao extends BaseDao {
}
2.在CommodityDaoImpl 实现类中也继承相应的接口

public class CommodityDaoImpl extends BaseDaoImpl implements CommodityDao{
}
3.在service层调用dao层
public interface CommodityService {
public List<CommodityEntity> getCommodityList();}
public class CommodityServiceImpl implements CommodityService {
	
	CommodityDao commodityDao=new CommodityDaoImpl();

	public List<CommodityEntity> getCommodityList(){
		String sql="select * from CommodityEntity";
		 List<CommodityEntity> list = commodityDao.excuteselect(sql, CommodityEntity.class, new Object[]{});
		return list;
	}
4.最后直接在action层掉用service层就可以了
// 调用service,调用对应的方法
	CommodityService commodityService = new CommodityServiceImpl();





  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值