模拟javaBean方式
我们出去做开发,可能永远不是最好的,但只要在规定时间给出效果就可以了,但如果能弄得最好,当然那个...
在打印的东西上按下alt+/ 选择sys
可以把map---javaBean 相互转换
只是是?=x不能
x=?
对
泛型集合进行迭代操作,答应它的值
方法上定义泛型,类上面定义泛型
类上定义可以让两个方法上的泛型统一起来.
静态方法要用泛型不能依靠类上定义的泛型,只能自己玩
取出泛型里面的实际类型参数
开始
struts吧
对浏览器的每个请求服务器端都要用一个程序进行处理
MVC
什么事struts,谈谈你对struts的
理解
按照mvc方式,其实就是一个大大的servlet
马士兵的视频太得瑟了,但入门很好,能提高兴趣
第一讲 时长55:52 主要内容:struts2的介绍、前台表单数据接受的三种形式
第二讲 时长77:38 主要内容:前台表单数据接受的三种形式
第三讲 时长15:54 主要内容:Struts2配置文件简介
第四讲 时长80:34 主要内容:struts.xml文件的配置、包、名称空间、web站点的安全配置
--->>>删除性质的看视频 张冰struts 转换为博客
struts入门
配置-->>网上文章太多,基本,最好方式从
例子里面解压一个空白的jar文件
struts路径问题
result返回时的分析
以我现在浮躁的心态应该看巴巴运动网
思考:看视频入门后,我还需要再看视频吗?NO!文档才是第一手资料,看文档,这是高手进阶的必须要走的,马士兵反复强调的,他的视频都可以不看,但文档必须,只要你能静心下来慢慢test
巴巴运动网
环境搭建:
分阶段搭建环境
搭建jpa
---直接在站点根目录下
---mysql
---在src下面建立,要求类路径下面建立
---完成后测试
?为什么用Integer不用Int
引入spring环境
--悲剧了,断点等待
jdbc
三层
架构的好处,只关心
接口,不管实现
实现一个接口只能比接口的
异常少
SQL异常时编译异常,必须要处理,抛来抛去就没什么
意义,怎么处理异常
运行时候异常,抛出给上层代码,通知上层代码出错了又不污染接口的目的
上层代码可以选择处理,或者不处理
只依赖接口但实现也依赖上了.
每个类不要依赖具体类
throw throws 区别
静态不能引用非静态的
工厂模式对于解耦合是非常有效的,但是工厂越来越多,管理起来就很麻烦了,我们可以使用注册类模式来管理越来越多的工厂和其它资源
如果想偷懒不想处理异常,可以runtimeException
事物处理
这就能保证是原子性的不能拆分的
conn.setAutoCommit();
conn.commit():
InnoDB测试事物失败就可以看一下表的引擎对不对
修改mysql的引擎为INNODB,可以使用
外键,事务等功能,性能高。
修改my.ini,在[mysqld]下加上
Sql代码
1.default-storage-engine=INNODB
default-storage-engine=INNODB
保存,
重启。
中间出现
错误了,但并不要所有的事物都回滚.
数据库里面对应支持-->>保存点
SavePoint sp=null;
sp=con.setPoint();
跨数据库怎么办?
工资卡-->>招商
银行
信用卡--->>工行
需要JTA容器实现事物
分两阶段提交
第一阶段:给数据库发请求,如果有数据库要求回滚,那都回滚
第二阶段:
可能不在一台服务器上,是分布式的.
隔离级别
两个事物同时操作这个,相当于并发一样
读 未提交
已经提交
可重复读
串行化
幻读-->>表锁定,保证表的数据不表,在这个用户使用它时
重复读-->>两次读的数据部一样,第一次查,
第二次再查,当然是在事物里面
脏读-->>可以读到别人未提交的数据,但如果别人rollback,那就有问题了
conn.setTransaction(Connection.)
没设置缺省跟数据库有关系
select @@tx_isolation;
设置数据库的级别
各个厂商也不一定按照这个来,oracle只实现两个,自己扩展了一个
存储过程-->>
在两层架构的时候,很重要,现在三层架构的时候基本很少使用,做为JDBC需要了解一下
存数过程很复杂,调用它很简单
java
程序员大部分对sql掌握不好
批量操作:
发sql语句还是比con建立这个好得多,消耗成本
插入100万次
怎么优化-->>
包不能太大,否则
内存溢出,发的时候可能也会拆成一些小的包,多少条合适可能需要测试
不是一条发过去,按照1000条打一个包发过去,网络通信成本就降低很多
{//循环体
ps.addBatch()
}ps.executeBatch();
具体是否有节约时间,测试即可
靠,百分之30的效率------
具体要根据数据库,还有驱动的
版本有很大关系,甚至还有可能降低.....
不过用的可能性比较小,
hibernate会利用这种特性优化
可滚动结果集
rs.next();
实现分页-->>这种方式效率很低,放到内存中一个个找,如果数据量很大,就会发生溢出
看来自己数据库学的很烂啊
可更新结果集-->>查询时候更新
很少这样做,如果想更新直接用update弄
可感知的更新结果集
mysql这个驱动没实现,能够感应到的话效率可能不高
对同一个id有的驱动你get两次会出错
怎么知道你支持不支持,通过数据库元信息可以知道数据库相关特性
DatebaseMetaDate dbmd=conn.getMetaData();
对咱们没多大用,框架就很重要了,不然他怎么知道.
hibernate方言你不给的话,他自己会检测....
灵活性高的方法,可以详细了解这些
利用结果集将查询结果封装为map
con,ps,rs -->>MetaDate
rs能正确识别,它毕竟查了数据库,ps就要看驱动了
查询特别多可以用这个-->>存到map里面
返回结果不只一个-->>变形成list就ok
最终不放list要放User对象-->>变形为Object
创建连接,最终关掉
经测试性能大部分时间浪费在连接这块上面了
不能用this.静态属性,它本省不属于这个对象,属于类
有很多问题,必须保证调用代码的人要释放连接
你还是用close,但我是把它放到池里面了
组合优先于继承
继承的方式实现代理--中介
组合的方式实现代理--中介
-----动态代理-----
继承mysql的从connection
但方法是不是public,就存在问题
突然
发现自己java基础好像忘记的差不多了.....
看视频,目前明白,那么以后呢?所以必须深入思考,然后
编码实现,不然就是个问题....
修改代码成本比较高
重新编译,打包,运行.
配置文件只用重启