黑马程序员技术交流社区
标题:
Dao编程
[打印本页]
作者:
Jeik
时间:
2014-11-6 17:59
标题:
Dao编程
DAO结构编程理解:
我们不妨想想jdbc结构,jdbc作为sun公司定义的一套接口规范,旗下很多公司都实现 了jdbc接口,即jdbc的实现类 ==数据库。我们知道数据库很多种。由于是这种定义接口规范的方式,可以让编程人员操作jdbc的时候方便的实现数据库的切换。
DAO结构层次如下:
1.dao接口。这里定义了要实现的功能
2.daoImp 接口的实现类
3.daoBeanFactory 用来动态获取daoImp
4.daoConfig.properties 配置文件
案例代码:完成一个用户的crud编程
import java.util.List;
import cn.jdbc.entity.DaoUser;
public interface UserDao {
public abstract void add(DaoUser user);
public abstract void deleteById(int id);
public abstract void update(String sql);
public abstract DaoUser findById(int id);
public abstract List<DaoUser> findAll();
}
package cn.jdbc.daoImp;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import cn.jdbc.dao.UserDao;
import cn.jdbc.entity.DaoUser;
import cn.utils.JdbcUtil;
public class UserDaoImp implements UserDao {
//测试用的 规范是要建立测试类的
public static void main(String[] args) throws ParseException{
/**复习知识点date的用法
* 1.Date和String类型的转换
* a.构建simpleDateFormat对象sdf(即格式)
* b.通过sdf.parse(String) 来将一个字符串转换成date对象
* c.通过sdf.format(Date)将Date转成一个字符串
* 2.java.util.Date和java.sql.Date的转换
* a.sql.Date date=new sql.Date(new util.Date().getTime() )
* 结合1,2就可以将一个字符串按某种要求的格式,通过Util.Date插入到数据库中的sql.Date字段*/
UserDaoImp udi=new UserDaoImp();
/*DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
//sdf.parse("1988-02-23") 这是java.util.Date 类型在。getTime() 变成long
Date s=new Date(sdf.parse("1990-12-06").getTime());
DaoUser user=new DaoUser(2,"zhansan",s);
udi.add(user);*/
//udi.deleteById(1);
//DaoUser user=udi.findById(2);
//System.out.println(user.getName());
udi.update("update daoUser set birthday=to_date('1991-06-18','yyyy-MM-dd')" +
" where id=1");
}
@Override
public void add(DaoUser user) {
Connection conn=JdbcUtil.getConnection();
PreparedStatement ps=null;
String sql="insert into daoUser values(?,?,?)";
try {
ps=conn.prepareStatement(sql);
ps.setInt(1, user.getId());
ps.setString(2,user.getName());
ps.setDate(3,user.getDate());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.freeSource(null, ps, conn);
}
}
@Override
public void deleteById(int id) {
Connection conn=JdbcUtil.getConnection();
Statement st=null;
String sql="delete daoUser where id="+id;
try {
st=conn.createStatement();
st.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.freeSource(null, st, conn);
}
}
@Override
public List<DaoUser> findAll() {
return null;
}
@Override
public DaoUser findById(int id) {
Connection conn=JdbcUtil.getConnection();
Statement st=null;
ResultSet rs=null;
String sql="select * from daoUser where id="+id;
try {
st=conn.createStatement();
rs=st.executeQuery(sql);
if(rs.next()){
DaoUser user=new DaoUser();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setDate(rs.getDate("birthday"));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.freeSource(null, st, conn);
}
return null;
}
@Override
public void update(String sql) {
Connection conn=JdbcUtil.getConnection();
Statement st=null;
try {
st=conn.createStatement();
st.executeUpdate(sql);
} catch (SQLException e) {
throw new RuntimeException(e);
}finally{
JdbcUtil.freeSource(null, st, conn);
}
}
}
package cn.jdbc.daoBeanFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import cn.jdbc.dao.UserDao;
public class UserDaoBeanFactory {
//从配置文件中动态的选择dao的实现类。实现类dao和某个imp绑定
public static UserDao getInstance(){
InputStream ins=UserDaoBeanFactory.class.getClassLoader().
getResourceAsStream("daoConfig.properties");
Properties prop=new Properties();
UserDao userDao=null;
try {
prop.load(ins);
userDao=(UserDao) Class.forName(prop.getProperty("daoImp")).newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
return userDao;
}
}
package cn.jdbc;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import cn.jdbc.dao.UserDao;
import cn.jdbc.daoBeanFactory.UserDaoBeanFactory;
import cn.jdbc.entity.DaoUser;
public class DaoTest {
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
//这里通过factory实现了接口和实现类的解耦,
//当我们由于需求需要变更dao的实现类时候,只需在配置文件修改即可
UserDao userDao=UserDaoBeanFactory.getInstance();
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date(df.parse("1993-06-18").getTime());
userDao.add(new DaoUser(3,"zhaoliu",date));
}
}
复制代码
作者:
肌肉男小虎
时间:
2014-11-6 21:52
路过
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2