一次AOP开发

        接到一个需求,在某操作(这个是gen代码自动生成的,比如导入)后,需要对这个操作进行记录,并且可以根据记录信息将本次导入影响数据进行删除。需要应用记录操作的表大概有100多个。

        分析:

        1,首先想记录操作的表要有一个批次号字段,其次要有一个另外的表记录这个批次号。

        2,可以使用AOP编程来实现,AOP解决了记录的时机和位置,还需要使用反射获取切入点的信息,从而进行加料操作。

下面是一些遇到问题的解决方法

1,切入点表达式

2,JoinPoint接口和Signature接口​​​​​​​

AOP注解开发常规步骤

2,自定义注解

自定义注解

4,时间格式化到毫秒(Java 和 sql 的不同)

Java和Mysql时间格式化

5,可能存在的并发bug:

后询问得知并发量并不高,为了保险还是简单用一个用户名+哈希 定义一个用户当前操作。

6,Mybatis $和#的实际使用场景,如果表名不确定,需要传参进去(这个传参的参数是我自己生成的,不是前端页面传进来的),需要使用${},不要使用#{}

7,正则:未解决的一个问题,使用代码硬撸实现了,这提醒我要收集一批常见正则拿来即用那种。

8,获取表字段,这个mysq很简单,desc即可,我现在用的数据库有点麻烦,非主流,国产数据库人大金仓,底层应该是pgsql,解决方法如下:

    <select id="ipBatch" parameterType="java.lang.String" resultType="java.util.Map">
        select c.relname, col_description(a.attrelid, a.attnum) as comment, format_type(a.atttypid, a.atttypmod) as type,
               a.attname as name, a.attnotnull as notnull from pg_class as c, pg_attribute as a where a.attrelid = c.oid and a.attnum > 0
                                                                                                  and c.relname = #{tbname};
    </select>

贴的XML代码,各参数名简单修改了下,tbname是我传进去的表名

9,mybatis的注解和XML使用权衡

简单增删改查用注解,复杂连表用XML

10,事务传播性

前置通知不融合到原始方法事务中,后置通知融入到原始方法事务中。因为前置通知发生时原始方法还没有发生,后置通知会影响原始方法事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值