Je souhaite renvoyer la liste des détails des lignes supprimées au contrôleur
<delete id = "delete-record", parameter-type = "hash-map"> DELETE FROM <Table Name> WHERE id = #{id}; </delete>
dans le segment ci-dessus, je ne trouve aucun type de retour
p>
3 Réponses :
si vous utilisez Mariadb> 10.0.5, vous pouvez utiliser le mot-clé RETURNING comme:
MariaDB [test]> DELETE FROM `data` WHERE `timestamp` BETWEEN '2019-03-08 02:11:45' AND '2019-03-18 03:20:45' RETURNING id,`name`,`state`; +----+---------+-------+ | id | name | state | +----+---------+-------+ | 4 | Light_A | 1 | | 5 | Light_A | 1 | | 6 | Light_A | 0 | | 7 | Light_B | 0 | | 8 | Light_B | 1 | | 9 | Light_B | 1 | | 10 | Light_B | 0 | +----+---------+-------+ 7 rows in set (0.001 sec) MariaDB [test]>
voir: https://mariadb.com/kb/en/library/delete/
Exemple
MariaDB [test]> CREATE TABLE `data` ( -> `id` int(11) unsigned NOT NULL AUTO_INCREMENT, -> `timestamp` timestamp NULL DEFAULT NULL, -> `name` varchar(16) DEFAULT NULL, -> `state` int(11) DEFAULT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4; Query OK, 0 rows affected (0.023 sec) MariaDB [test]> INSERT INTO `data` (`id`, `timestamp`, `name`, `state`) -> VALUES -> (1, '2019-03-07 11:16:32', 'Light_A', 0), -> (2, '2019-03-07 12:36:32', 'Light_A', 1), -> (3, '2019-03-07 13:15:12', 'Light_A', 0), -> (4, '2019-03-08 02:11:45', 'Light_A', 1), -> (5, '2019-03-08 02:18:45', 'Light_A', 1), -> (6, '2019-03-08 02:22:45', 'Light_A', 0), -> (7, '2019-03-18 03:14:45', 'Light_B', 0), -> (8, '2019-03-18 03:16:45', 'Light_B', 1), -> (9, '2019-03-18 03:18:45', 'Light_B', 1), -> (10, '2019-03-18 03:20:45', 'Light_B', 0), -> (11, '2019-03-19 17:20:12', 'Light_B', 0), -> (12, '2019-03-19 17:22:12', 'Light_B', 1), -> (13, '2019-03-19 17:23:12', 'Light_B', 0); Query OK, 13 rows affected (0.009 sec) Records: 13 Duplicates: 0 Warnings: 0
maintenant SUPPRIMER
DELETE FROM `data` WHERE `timestamp` BETWEEN '2019-03-08 02:11:45' AND '2019-03-18 03:20:45' RETURNING id,`name`,`state`;
mybatis peut nous aider à faire cela automatiquement
int deleteDemo(@Param("id") String id);
voir Mapper.java comme ceci:
<delete id="deleteDemo"> DELETE FROM Table_Name WHERE ID = #{id} </delete>
il renverra le nombre d'enregistrements affectée.
mybatis peut trouver ce numéro à partir de jdbc.
est de la même manière.
si vous voulez Améliorez un peu, découvrez useAffectedRows
dans jdbc
Utilisez la clause RETURNING
et le mappage select
avec flushCache
:
<select id="removeSomeStuff" parameterType="map" resultType="WhateverType" flushCache="true"> delete from some_stuff where id = #{id} RETURNING * </select>
La requête ci-dessus renvoie le résultat set équivalent à select * from some_stuff
et vous pouvez utiliser n'importe quelle option de mappage (par exemple resultMap
ou resultType
) pour obtenir des objets.