JAVA JDBC2

1.分页

select.....from
(select ......,rownum rn from tablename)
where rn between ? and ?

2.事务
2.1创建一张表

 SQL>create table account(
 id number primary key,
 money number not null,
 name varchar(10) not null
  );

2.2把表相关的操作 进行封装AccountDao
2.3事务
a. 在jdbc中操作的数据只是提交了事物之后的数据
b.Connection对象默认完成一个数据库的操作自动提交事务
如果不要自动提交事务就需要操作

 con.setAutoCommit(false);

c.数据层------>关于数据库的增删改查的一些操作
业务层
------->正常的功能处理
------->转账业务:A---->转账----->B
A记录修改的数据
涉及到两次数据层的操作
-------->如:注册业务
对密码的加密
往数据库中增加一条记录
-------->有的时候业务可能就是一次数据层的操作
甚至简单到就是一个DAO的操作
当然业务也可能不与数据层发生任何操作
d事务完成转账操作
d.1 A------>转账给------>B
在这个过程中如果A---->减少钱的完成了
B-----增加钱出错了
我们就要求A,B两个操作,要么都成功要么都失败,放在一个事务中
而Connection默认事物自动提交,每个操作都是一个单独的事务
要在同一个事物中操作,就必须多个关于数据(dao)的操作必须是同
一个连接
d.2要保证同一个线程操作中一定是同一个Connection
修改JdbcUtil ---->ThreadLocal 操作
Connection的关闭,必须在一个业务完成之后进行关闭
d.3业务处理开始之前,开始事务
业务处理之后,提交事务
业务处理有异常,回滚事务
最后关闭Connection

将来有很多的业务都会遇到这样的情况 (就是一个业务操作多个dao)
这个时候我们就需要,包这些dao包装到一个事务中,要么全部成功
要么全部失败

如果每个业务都这样去写,比较繁琐。我们希望用代理的模式去解决
这个问题

4.代理模式
java中的代理是基于接口编程的,业务要写成接口。
我们也建议所有的操作无论是dao还是业务都应该
首先写成接口
面向方向的编程AOP
希望关心业务的人员只关心业务操作
关心事务的人员只关心事务操作
每个人只关心自己要做的那个方面(真实开发中要分模块、分层次、甚至
你只要关心你熟悉的那块)
4.1静态代理
a. 创建一个代理类和被代理类实现同一个接口
(并且把被代理类的实例作为自己的成员 非必要)
b.静态代理本身也是一种架构模式
c.静态代理的缺点
要做的辅助操作(事务、日志等)在每个业务方法中都需要进行调用
4.2 动态代理
a.动态代理处理器 必须实现java.lang.reflect.InvocationHandler接口
b.把目标对象(要生成代理的对象)作为成员
c.实现接口需要重写invoke
该方法会拦截所有的目标对象的方法
d.产生代理对象,可以直接利用代理处理类,也可以单独写一个类
e.缺点:目标对象的所有方法都会被拦截处理
将来根据方法对下给你来控制

5.用代理模式来完成事务的操作
转账业务
不需要事务的的情况(将来通过注解来说明石佛付需要事务以及用什么事务 声明到接口中)把事务的提交等操作包装到专门的类中

6.抽象DAO操作----->提炼公用的Dao
关于所有的表都会对应一些操作
我们都会把这些抽取到对应的DAO当中
那么存在大量重复的操作,是否可以抽取出通用的部分,供大家继承使用
如果通过对某个表已经足够使用,那么就不需要继承都可以了。

把DAO的操作也先写成接口,把通用的操作提炼出来
如:根据主键查询、查询所有、增加、删除、修改记录等

7.jdbc其它
7.1 DatabaseMetaData
7.2 ResultSetMetaData JdbcDemo4
7.3批处理 JdbcDemo5
create table t(
id number primary key
);
7.4 插入日期的操作 JdbcDemo6
create table datetest(
id number primary key,
birthday date
);

===========================================
8.扩展内容 orm对象关系映射
表—>类
列—>属性
记录—>对象
a.假设表名和类名相同
  列名和属性名相同
public int void save(Object object)
该方法就能往object对象所对应的表中插入一条记录
b.表名和类名不相同怎么办?
属性名和列名不相同怎么办?
可以使用接口、配置文件来指定
现在流行的是使用注解

大家可以尝试自己完成 根据主键查询、删除等小的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值