《学习内容》:
//=======前端学习内容========
1.JS的历史
2.JS的引入方式
3.JS的运算符
4.JS的for if 语句
/*/
//========Java学习内容=========
1.直播课—-JDBC封装第二天
《代码内容》:
/* 封装ORM框架
===============================================================================================
思考One——?策略设计模式————
如果我写这个接口是为了来把数据集中的数据存储到对象中 那么——参数??——>肯定需要给我一个数据集 返回值,整个过程是需要把数据集的信息存储在对象中的 那么返回的肯定是一个对象(类型不确定) 那么—-》泛型或者Object
=================================================================================================
思考Two——那么如果设计一个可以查各种表格的数据的方法—-他的参数是什么?只有中间一块不一样,所以肯定需要传一个策略进去
返回值问题???—->因为他的类型每个表格都不一样,都不确定,那么我返回值给他一个Object类型或者泛型
/
经过上面的思路分析后,在Dao层进行了首次的优化,设计的那个方法可以查询任何表格的一条信息
//===================================================================================//
package dao;import domain.Atm;import orm.RowMapper;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;public class AtmDao {/*** 基本的JDBC代码来查询一条信息**/private String driver = "com.mysql.cj.jdbc.Driver";private String url = "jdbc:mysql://localhost:3306/atm?serverTimezone=CST&characterEncoding=utf8";private String user = "root";private String password = "at123123";/**经过我的封装后,我这个牛皮的方法可以查询任何一个表格的一条信息,参数你需要给我一个策略进去*/private Object QueryOne(String sql,RowMapper rm,Object... objs){Object obj = null;try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);PreparedStatement pstat = conn.prepareStatement(sql);for (int i = 0; i < objs.length; i++) {pstat.setObject(i+1,objs[i]);}ResultSet rst = pstat.executeQuery();if (rst.next()){/**写到这里发现每次把数据库中的数据集存储的对象不一样* 那么 用--->策略模式 给定一个接口来--->匿名内部类实现具体如何组装这个对象* */obj = rm.RowMapperObj(rst);}} catch (Exception e) {e.printStackTrace();}return obj;}//查询多条信息private List<Atm> QueryList(){Atm atm = null;ArrayList<Atm> lists = new ArrayList<>();try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);String sql = "SELECT UNAME,UPASSWORD,UBAL FROM USER";PreparedStatement pstat = conn.prepareStatement(sql);ResultSet rst = pstat.executeQuery();while (rst.next()){atm = new Atm(rst.getString("uname"),rst.getString("upassword"),rst.getFloat("ubal"));lists.add(atm);}} catch (Exception e) {e.printStackTrace();}return lists;}public static void main(String[] args) {AtmDao atmDao = new AtmDao();List<Atm> atms = atmDao.QueryList();for (Atm atm:atms){System.out.println(atm);}}}
经过第一次的封装后,觉得每个表格都可以查,放在AtmDao里面不太合适,再次封装,重写了多条获取,调用
//===================================================================================//
单独写在了SqlSession类中
package orm;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;public class SqlSession {private String driver = "com.mysql.cj.jdbc.Driver";private String url = "jdbc:mysql://localhost:3306/atm?serverTimezone=CST&characterEncoding=utf8";private String user = "root";private String password = "at123123";/**经过我的封装后,我这个牛皮的方法可以查询任何一个表格的多条信息,参数你需要给我一个策略进去*/private <T> List<T> QueryAll(String sql, RowMapper rm, Object... objs){ArrayList<T> lists = new ArrayList<>();try {Class.forName(driver);Connection conn = DriverManager.getConnection(url, user, password);PreparedStatement pstat = conn.prepareStatement(sql);for (int i = 0; i < objs.length; i++) {pstat.setObject(i+1,objs[i]);}ResultSet rst = pstat.executeQuery();while (rst.next()){/**写到这里发现每次把数据库中的数据集存储的对象不一样* 那么 用--->策略模式 给定一个接口来--->匿名内部类实现具体如何组装这个对象* */lists.add(rm.RowMapperObj(rst));}} catch (Exception e) {e.printStackTrace();}return lists;}/**这样写查询任何表格的一条信息就更简单了,直接调用上面的方法取集合的第一个索引位置**/public <T>T QueryOne(String sql, RowMapper rm, Object... objs){return (T)this.QueryAll(sql,rm,objs).get(0);}}
学习总结:
学懂的:
今天晚上的直播课比昨天晚上要复杂很多,中间自己分神了一下,到改泛型那一块有点没听明白,脑子当时有点乱,
下课后反复翻看源码,和直播回放,自己练习,发现这次的封装是用了策略设计模式和泛型,代码倒是没有多少,感觉最
妙的还是实现策略,匿名内部类那里组装对象的时候。
JS的引入,运算符,if for语句,js对比java是弱类型语言,他的语法更抽象,灵活性更高,基本前面的内容和Java差不多。
有问题的地方:
JS没有进行练习,打算前面的语法暂时没有什么可以练的,学习到函数再进行练习。
一开始改泛型类 ,返回一个T类型 返回atm的时候多态(T)atm没有看明白,这时候类型不是确定了ATM吗
,不知道为什么还得把他转成T类型,其他地方没有问题。**
