首先 我们学习了JDBC的过程 以下用查询来举例(开发过程中查询用的最多)
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");//这里强调,mysql8.0以后有cj,其余的不用加cj
//2.获取连接
Connection conn= DriverManager.getConnection("mysql:jdbc://localhost:3306/mydemo?utc=","username","password");//localhost可以换成要连接的数据库的ip地址 mydemo表示要连接的库名
//3.定义sql
String sql="select * from user where username=? and password=?";
//4.获取pstmt对象
PreparedStatement preparedStatement=conn.prepareStatement(sql);
//5.给?赋值
preparedStatement.setObject(1,"ww");//1表示第一个参数
preparedStatement.setObject(2,"123");//2表示第二个参数
//6.执行sql
ResultSet rs=preparedStatement.executeQuery();
if(rs.next()){//rs.next()方法:若扫描到值 指针往下移一位并且返回true否则直接返回false
System.out.println("查询到数据");
}
else{
System.out.println("没查询到任何数据!");
}
理解了JDBC的过程 就很好理解BaseDao了 BaseDao的本意是为了封装数据层一些固定的格式的代码 直接更改配置文件的参数即可利用这个“底座”对不同表格完成不同的功能
public class BaseDao {
//定义属性
private static String USERNAME;
private static String PASSWORD;
private static String Driver;
private static String URL;
private static Connection con;
//类加载时自动调用
static {
loadDriver();
}
protected BaseDao() {
}
//加载配置文件的内容赋给各个属性
public static void loadDriver() {
Properties prop = new Properties();
try {
prop.load(new FileInputStream("D:\\basedao\\src\\main\\resources\\driver.properties"));
} catch (IOException e) {
e.printStackTrace();
}
Driver = prop.getProperty("driver");
USERNAME = prop.getProperty("username");
PASSWORD = prop.getProperty("password");
URL = prop.getProperty("url");
}
//注册驱动和获取连接
public static Connection getConnection() {
if (con != null) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return con;
}
private ResultSet rs;
//查询方法 把JDBC的456步封装
public ResultSet query(String sql, Object params[]) {
try {
PreparedStatement pstat = getConnection.prepareStatement(sql);
for (int i = 1; i <= params.length; i++) {
pstat.setObject(i, params[i - 1]);
}
rs = pstat.executeQuery();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return rs;
}
}
既然有了BaseDao了 那么我们在查看数据库中某个表内容的时候 比如我们要查最常见的user表
那么我们就需要一个集合来存储查到的每个user的信息 ArrayList比较适合 因为便于查找某个user
所以我们就编写一个UserinfoDao类来继承BaseDao类
public class UserinfoDAO extends BaseDao{
public List<Userinfos> change(String sql,Object[] params){//change方法把查询的结果放入list中并返回
ResultSet rs=query(sql,params);//直接调用查询方法
List<Userinfos> users=new ArrayList<Userinfos>();//本次的实体类为Userinfos类,有userid、username、birthday三个属性
try {
while (rs.next()){
Userinfos us=Userinfos.builder()
.userid(rs.getLong("userid"))
.username(rs.getString("username"))
.birthday(rs.getDate("birthday"))
.build();//采用语法糖格式给该对象赋属性值
users.add(us);//将该对象添加到list中去
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return users;
}
//查询所有的方法
public List<Userinfos> findAll(){
String sql="select * from user";
return change(sql,new Object[]{});
}
//根据id查询的方法
public Userinfos findById(Long id){
String sql="select * from user where userid=?";
List<Userinfos> uss=change(sql,new Object[]{id});
return uss.isEmpty()?null:uss.get(0);
}
}
test: