Day43
前几天偷懒了,今天要学够5个小时,加油。
javaEE项目的三层结构
-
先创建书城需要的数据库和表
-
编写数据库对应的JAVABEAN对象(下面就是javabean类)
package com.atguigu.pojo;
/**
* @Author nextGame
* @Date 2021/5/2 12:16
* @Version 1.0
*/
public class User {
//这里设置为Integer为了后面可以用来比较,对象是否为空,判断该值是否为空,int不行
private Integer id;
private String username;
private String password;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
-
3-1编写工具类utils
package com.atguigu.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcUtils {
private static DruidDataSource dataSource;
static {
try {
Properties properties = new Properties();
// 读取 jdbc.properties属性配置文件
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
// 从流中加载数据
properties.load(inputStream);
// 创建 数据库连接 池
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接池中的连接
* @return 如果返回null,说明获取连接失败<br/>有值就是获取连接成功
*/
public static Connection getConnection(){
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭连接,放回数据库连接池
* @param conn
*/
public static void close(Connection conn){
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}3-2编写测试jdbc
package com.atguigu.test;
import com.atguigu.utils.JdbcUtils;
import org.junit.Test;
import java.sql.Connection;
public class JdbcUtilsTest {
-
编写BaseDao
package com.atguigu.dao.impl;
import com.atguigu.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* 这里用abstract将BaseDao定义成抽象类,给别人使用的,不需要实例。
* QueryRunner类:
* update(connection,sql,params):执行任何增删改
* query(connection,sql,ResultHandler,params):执行任何查询语句
* ResultHandler接口
* BeanHandler:将结果集的第一行,封装成对象,并返回 new BeanHanler<>(XX.class)
* BeanListHandler:将结果集的所有行,封装成对象的集合,并返回 new BeanListHandler<>(XX.class)
* ScalarHandler:将结果集中的第一行第一列,以Object形式返回 new ScalarHandler()
* @author 喜
*/
public abstract class BaseDao {
//使用DbUtils操作数据库
private QueryRunner queryRunner =new QueryRunner();
/**
* update() 方法用来执行:Insert\Update\Delete语句
*
* @return 如果返回-1,说明执行失败<br/>返回其他表示影响的行数
*/
public int update(String sql,Object...args){
Connection connection = JdbcUtils.getConnection();
try {
int update = queryRunner.update(connection, sql, args);
return update;
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.close(connection);
}
return -1;
}
/**
* 查询返回一个javaBean的sql语句
*
* @param type 返回的对象类型
* @param sql 执行的sql语句
* @param args sql对应的参数值
* @param <T> 返回的类型的泛型
* @return
*/
public <T> T queryForOne(Class<T> type,String sql,Object...args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql,new BeanHandler<T>(type),args);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.close(connection);
}
return null;
}
/**
* 查询返回多个javaBean的sql语句
