补充了JDBC的日期类型的处理,批量录入。介绍DAO模式(以及dao 之上的service层)
一、JDBC时间类型的处理
数据库 | 获取日期时间的法 | java |
---|---|---|
Date | java.sql.Date date=结果集.getDate() | LocalDate |
Time | java.sql.Time time=结果集.getTime() | LocalTime |
DateTime | java.sql.Timestamp timestamp=结果集.getTimestamp() | LocalDateTime |
二、使用步骤
1.需要先在连接串上增加属性
rewriteBatchedStatements=true
2.代码如下(示例):
public static void main(String[] args) {
String sql = "insert into tb_date(date1,time1,datetime1) values(?,?,?)";
long start = System.currentTimeMillis();
// for (int i = 1; i <= 5000; i++) {
// DbHelper.update(sql, LocalDate.now(), LocalTime.now(), LocalDateTime.now());
// }
add();
long end = System.currentTimeMillis();
System.out.println(end - start);
}
/**
* 批量录入
*/
public static void add() {
Connection connection = null;
PreparedStatement statement = null;
boolean result = false;
try {
connection = DbHelper.getConn();
connection.setAutoCommit(false);//关闭自动提交命令
String sql = "insert into tb_date(date1,time1,datetime1) values(?,?,?)";
statement = connection.prepareStatement(sql);//预编译
for (int i = 1; i <= 50000; i++) {
statement.setObject(1, LocalDate.now());
statement.setObject(2, LocalTime.now());
statement.setObject(3, LocalDateTime.now());
statement.addBatch();//向批处理中添加命令
if (i % 500 == 0) {
statement.executeBatch();//执行一次批处理
statement.clearBatch();//清空数据
System.out.println("执行:" + i);
}
}
connection.commit();//提交事务
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
DbHelper.closeAll(connection, statement, null);
}
}
三、Dao模式
工程结构如下图:
主要代码块如下:
public class LoginDaoImpl implements LoginDao {
@Override
public List<Map<String,Object>> login(User user) {
String sql="select *from tb_user where user_name=? and login_password=?";
return DbHelper.query(sql,user.getUser_name(),user.getLogin_password());
}
@Override
public List<Map<String, Object>> query() {
String sql="select *from tb_user order by user_id desc";
return DbHelper.query(sql);
}
}
public class UserServiceImpl implements UserService {
LoginDao loginDao=new LoginDaoImpl();
@Override
public boolean login(User user) {
List<Map<String,Object>> list = loginDao.login(user);
if (list.size()>0){
return true;
}else {
return false;
}
}
@Override
public List<Map<String, Object>> query() {
return loginDao.query();
}
}
public class Test1 {
public static void main(String[] args) {
UserService userService=new UserServiceImpl();
boolean i = userService.login(new User("嗯嗯", "12345"));
System.out.println(i);
List<Map<String, Object>> query = userService.query();
System.out.println(query);
}
}
总结
重点理解Dao模式(加了service层),分析如下:
dao:即业务层,dao接口和dao实现类, dao只操作一个实体对象,因此一个dao对应一个实体对象。
entity:实体类,封装属性和getter,setter方法,构造方法
service:即数据访问层,service接口和service实现类, Service层是为了处理包含多个实体对象(即对多个表的数据操作)时,进行事务管理(声明式事务管理)。Service层(其接口的实现类)被注入多个实体对象,以完成其数据操作。
test:测试类,测试功能。
util:工具类,封装增、删、改、查、批处理、获取自增列方法
更新于2023-4-1