动态创建触发器

1 篇文章 0 订阅
1 篇文章 0 订阅

触发器小记


触发器在我认识当中是通过数据库直接建立的,最近接到一个开发任务,需要动态创建触发器建立在代码中;大写的一脸懵逼啊~~~~ 现在对这次开发做一次记录。好记心不如烂笔头,每天进步一点点。

在其中涉及到查询数据库表信息,其中涉及到两条关于数据库的语句:

  • 查询数据库的表名
SELECT
	table_name 
FROM
	information_schema.TABLES 
WHERE
	table_schema = 'db'
  • 查询某个表的所有字段 
SELECT
	COLUMN_NAME 
FROM
	information_schema.COLUMNS 
WHERE
	TABLE_SCHEMA = 'db' 
	AND TABLE_NAME = #{tableName}

这两条语句也走了小弯路,查询技术还是不是很精准,对症下药--------- 

下面到本章的重点-------------------------动态创建触发器

模板:

DROP TRIGGER
IF
	EXISTS userTriger;
CREATE TRIGGER userTriger AFTER INSERT ON `user` FOR EACH ROW
BEGIN
	DECLARE
		dataJson text;
	
	SET dataJson = (
		SELECT
			GROUP_CONCAT(
				CONCAT( '{' ),
				CONCAT( '"id":"', new.id, '",' ),
				CONCAT( '"code":"', new.CODE, '",' ),
				CONCAT( '"name":"', new.NAME ),
				CONCAT( '}' ) 
			) 
		);
	INSERT INTO user_test ( CODE, NAME )
	VALUES
	( new.CODE, dataJson );
END;

首先调研了能否在mybatis中创建触发器,厉害了我的哥,还真可以...于是看到了希望。那就继续撸吧,按照模板进行动态创建吧,开始kakaka.....的撸代码了。写的还算顺利...

动态遍历List<Map<String,String>>

<foreach item="items" collection="list" separator=","  index="index">
       <foreach item="value" index="key" collection="items" separator="," >
            CONCAT('"${value}":"',new.${key},'",')
       </foreach>
</foreach>

拼接还算顺利想想还可以的写完工呀。自己测试了一把,--------------SUCCESS------------,创建成功了Yean.触发一下生成数据瞅瞅,哎呀我去,,,多了个逗号。沉思..................  未完待续...

接下来讲一下我去掉多余的逗号之路,,,最传统的截取字符串在拼接。

于是乎就搜索了mysql中如何截取字符串。

 LEFT(dataJson,CHAR_LENGTH(CAST(dataJson AS CHAR))-1)

CHAR_LENGTH    一定要用这个因为当字符串中有汉字是长度就不是想象的样子了。之后就是在拼接起来了。

补存一点:更新,新增用new.field 而删除是old.field

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值