dao+service实现增删改查详解

一、Service处理
概念:Service(Biz) 业务层 用户完成的一个功能,操作 就是业务。
业务的完成都是靠调用DAO中的方法。
可能调用一个DAO中的多个方法,可能调用多个DAO中的多个方法

二:先创建表:

create table emp(
id number(10) primary key,
name varchar2(30),
salary number(10,2),
age number(3)
)

三:创建实体类:用来映射建立的数据库

public class Emp {

private int id;
private String name;
private double salary;
private int age;
}
在这里书写属性的get、set方法以及有参无参构造函数

四:书写dao层:步骤:先写增删改查的接口。再实现接口

接口的好处:	
public interface EmpDAO {
//插入员工信息
public void insertEmp(Emp emp);
//删除员工
public void deleteEmp(int id);
//修改员工信息
public void updateEmp(Emp emp);
//查询所有员工
public List<Emp> selectAllEmps();
//模糊查询
public Emp fuzzySelect(int id);
//模糊查询
List<Emp> selectByKey(String name);
//分页查询
List<Emp> selectByPage(int pageIndex);
}

实现接口:
先实现dao接口 然后在实现的接口中书写实现的代码
该代码是基础代码 是可以优化的

public class EmpDAOImpl implements EmpDAO{
@Override
public void insertEmp(Emp emp) {
	Connection conn = null;
	PreparedStatement pstm = null;
	try{
		conn = JDBCUtil.getConnection();
		String sql="insert into emp values(?,?,?,?)";
		pstm = conn.prepareStatement(sql);
		pstm.setInt(1, emp.getId());
		pstm.setString(2,emp.getName());
		pstm.setDouble(3, emp.getSalary());
		pstm.setInt(4, emp.getAge());
		pstm.executeUpdate();
	}catch(Exception e){
		e.printStackTrace();
		throw new RuntimeException("注册员工出现异常");
	}finally{
		JDBCUtil.close(null, pstm);
	}
}

@Override
public void deleteEmp(int id) {
	Connection conn = null;
	PreparedStatement pstm = null;
	try{
		conn = JDBCUtil.getConnection();
		String sql="delete from emp where id=?";
		pstm = conn.prepareStatement(sql);
		pstm.setInt(1, id);
		pstm.executeUpdate();
	}catch(Exception e){
		e.printStackTrace();
		throw new RuntimeException("删除员工DAO出现异常");
	}finally{
		JDBCUtil.close(null, pstm);
	}
}

@Override
public void updateEmp(Emp emp) {
	Connection conn = null;
	PreparedStatement pstm = null;
	try{
		conn = JDBCUtil.getConnection();
		String sql="update emp set name=?,salary=?,age=?  where id=?";
		pstm = conn.prepareStatement(sql);
		pstm.setString(1, emp.getName());
		pstm.setDouble(2, emp.getSalary());
		pstm.setInt(3, emp.getAge());
		pstm.setInt(4, emp.getId());
		pstm.executeUpdate();
	}catch(Exception e){
		e.printStackTrace();
		throw new RuntimeException("修改DAO出现异常");
	}finally{
		JDBCUtil.close(null, pstm);
	}
}

@Override
public List<Emp> selectAllEmps() {
	Connection conn = null;
	PreparedStatement pstm = null;
	ResultSet rs = null;
	List<Emp> emps = new ArrayList<Emp>();
	try{
		conn = JDBCUtil.getConnection();
		String sql="select * from emp";
		pstm = conn.prepareStatement(sql);
		rs = pstm.executeQuery();
		while(rs.next()){
			Emp emp = new Emp();
			emp.setId(rs.getInt(1));
			emp.setName(rs.getString(2));
			emp.setSalary(rs.getDouble(3));
			emp.setAge(rs.getInt(4));
			emps.add(emp);
		}
		return emps;
	}catch(Exception e){
		e.printStackTrace();
		throw new RuntimeException("查询所有DAO出现异常");
	}finally{
		JDBCUtil.close(conn, pstm, rs);
	}
}
public Emp fuzzySelect(int id){
		Connection conn=null;
		PreparedStatement psmt=null;
		ResultSet rs=null;
		try{
			conn = JDBCUtil.getConnection();
			String sql="select *  from stu where id=?";
			psmt=conn.prepareStatement(sql);
			psmt.setInt(1, id);
			rs=psmt.executeQuery();
			 
			 Emp e = new Emp();
			while(rs.next()){
				 e.setId(rs.getInt(1));
				 e.setName(rs.getString(2));
				 e.setSalary(rs.getDouble(3));
				 e.setAge(rs.getInt(4));
				
			}
			return e;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}finally{
			JDBCUtil.close(conn, psmt,rs);
		}
	}

@Override
public List<Emp> selectByKey(String name) {
	Connection conn=null;
	PreparedStatement psmt=null;
	ResultSet rs=null;
	try{
		conn=JDBCUtil.getConnection();
		String sql="select * from emp where name like ?";
		psmt = conn.prepareStatement(sql);
		psmt.setString(1,"%"+name+"%" );
		rs = psmt.executeQuery();
		List<Emp> list = new ArrayList<Emp>();
		while(rs.next()){
			Emp employees = new Emp();
			employees.setId(rs.getInt(1));
			employees.setName(rs.getString(2));
			employees.setSalary(rs.getDouble(3));
			employees.setAge(rs.getInt(4));
			list.add(employees);
		}
		return list;
	}catch(Exception e){
		e.printStackTrace();
		return null;
	}
}

@Override
public List<Emp> selectByPage(int pageIndex) {
	Connection conn=null;
	PreparedStatement pamt=null;
	ResultSet rs=null;
	try{
		conn=JDBCUtil.getConnection();
		String sql="select * from(select t.*,rownum as rn from telbook t) where rn >= ? and  rn<= ? ";
	    pamt=conn.prepareStatement(sql);
	    pamt.setInt(1,(pageIndex-1)*3+1);
	    pamt.setInt(2,pageIndex*3);
	    rs=pamt.executeQuery();
	    List<Emp> list = new ArrayList<Emp>();
	    while(rs.next()){
	    	Emp employees = new Emp();
	    	employees.setId(rs.getInt(1));
	    	employees.setName(rs.getString(2));
	    	employees.setSalary(rs.getDouble(3));
	    	employees.setAge(rs.getInt(4));
	    	list.add(employees);
	    }
	    return list;
	}catch(Exception e){
	 e.printStackTrace();
	 throw new RuntimeException("查询异常");
	}finally{
		JDBCUtil.close(conn, pamt, rs);
	}
}
}

五:dao层写完之后就要书写service层了
和上面步骤一样 先书写接口

public interface EmpService {
//添加员工信息
public void AddEmp(Emp es);
//删除员工信息
public void removeEmp(int id);
//修改员工信息
public void modifyEmp(Emp emp);
//查询所有员工
public List<Emp> queryAll();
//模糊查询
List<Emp> selectByKey(String name);
//分页查询
List<Emp> selectByPage(int pageIndex);
}

然后实现service接口

public class EmpServiceImpl implements EmpService{
private EmpDAO ed = new EmpDAOImpl();
@Override
public void AddEmp(Emp emp) {
try{
TransactionManager.begin();
ed.insertEmp(emp);
TransactionManager.commit();
}catch(Exception e){
e.printStackTrace();
TransactionManager.rollback();
}
}

@Override
public void removeEmp(int id) {
	try{
		TransactionManager.begin();
		ed.deleteEmp(id);
		TransactionManager.commit();
	}catch(Exception e){
		e.printStackTrace();
		TransactionManager.rollback();
	}
}

//修改信息
@Override
public void modifyEmp(Emp emp) {
	try{
		TransactionManager.begin();
		ed.updateEmp(emp);
		TransactionManager.commit();
	}catch(Exception e){
		e.printStackTrace();
		TransactionManager.rollback();
	}
}

@Override
public List<Emp> queryAll() {
	return ed.selectAllEmps();
}


@Override
public List<Emp> selectByKey(String name) {
	List<Emp> list = ed.selectByKey(name);
	return list;
}

@Override
public List<Emp> selectByPage(int pageIndex) {
	List<Emp> list = ed.selectByPage(pageIndex);
	return list;
}	
}

到这里就书写完成了,但是注意的是:在实现service接口的时候用了事务
以下是事务实现的代码
六:事务的意义和好处

Service中的事务
Oracle:保证数据一致性 事务:保证一组sql语句执行的完整性 一起成功或失败
Service:保证业务操作的完整性。
保证实现业务的一组DAO方法要不一起成功,要不一起失败。
事务控制的位置:在Service的方法中
事务控制的方式:
JDBC默认的事务控制:自动提交 不建议使用容易出错
手工事务控制:不自动提交 换成手工控制
关闭原有的自动提交:Connection.setAutoCommit(false);
手工提交:Connection.commit();
手工回滚:Connection.rollback();
注意:
增删改操作,要进行事务控制
查询操作可以控制也可以不控制 建议不控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值