UserDao
修改项目:
- 把UserDao修改为接口,然后把原来的UserDao修改类名为UserDaoImpl
- 修改UserService中对UserDao的实例:private UserDao userDao=DaoFactory
DAO模式
-
DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来。DAO在数据库与业务逻辑(Server)之间。
- 实体域,即操作的对象,例如我们操作的表时user表,那么就需要先写一个user类;
- DAO模式需要先提供一个DAO接口;
- 然后再提供一个DAO接口的实现类;
- 再编写一个DAO工厂,server通过工厂来获取DAO实现。
时间类型:
数据库类型与java中类型的对应关系
DATE-->java.sql.Date
TIME-->java.sql.Time
TIMESTAMP-->java.sql.Timestamp
域对象(domain)中的所有属性不能出现java.sql包下的东西!既不能使用java.sql.Date;
ResultSet#getDate()返回的是java.sql.Date()
PreparedStatement#setDate(int , Date),其中第二个参数也是java.sql.Date
时间类型的转换:
java.util.Date--->java.sql.Date、Time、Timestamp
把util的Date转化为毫秒值
使用毫秒值创建sql的Date、Time、Timestamp
java.sql.Date、Time、Timestamp--->java.util.Date
这一步不需要处理,因为java.sql.Date就是java.utilDate;
java.util.Date date=new java.util.Date();
long l =date.getTime();
java.sql.Date sql.Date=new java.sql.Date(l);
SQL包下相关时间的方法:
java.sql.ResultSet#java.sqlDate.getDate()
java.sql.PreparedStatement#setDate(int col, java.sql.Date date)
例如:user.setBirthday(rs.getDate("birthday"));其中rs.getDate()方法返回的是java.sql.Date,而User的birthday必须是java.util.Date类型。把sql包的Date赋给util包下的Date,这是子类给父类,不用强转!!!
例如:pstmt.setDate(3,user.getBirthday()),其中user.getBirthday()返回的是Date,而setDate() 方法的参数类型是sql包下的Date,这说明需要把utilDate转换成SQLDate。这需要处理类型转换问题!!!
pstmt.setDate(3, new java.sql.Date(user.getBirthday().getTime()))