#mysql #mybatis
#mysql #mybatis
Вопрос:
Я хочу вернуть список удаленных сведений о строке в контроллер
<delete id = "delete-record", parameter-type = "hash-map">
DELETE FROM <Table Name>
WHERE id = #{id};
</delete>
в приведенном выше сегменте я не могу найти какой-либо возвращаемый тип
Ответ №1:
Используйте RETURNING
предложение и select
сопоставление с flushCache
:
<select id="removeSomeStuff" parameterType="map" resultType="WhateverType" flushCache="true">
delete from some_stuff where id = #{id}
RETURNING *
</select>
Приведенный выше запрос возвращает набор результатов, эквивалентный select * from some_stuff
, и вы можете использовать любой параметр сопоставления (например, resultMap
или resultType
) для получения объектов.
Ответ №2:
если вы используете Mariadb > 10.0.5, вы можете использовать ключевое слово, ВОЗВРАЩАЮЩЕЕ, например:
DELETE FROM `data`
WHERE `timestamp` BETWEEN '2019-03-08 02:11:45' AND '2019-03-18 03:20:45'
RETURNING id,`name`,`state`;
смотрите:https://mariadb.com/kb/en/library/delete /
Пример
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
теперь УДАЛИТЕ
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]>
Ответ №3:
mybatis может помочь нам сделать это автоматически
<delete id="deleteDemo">
DELETE FROM Table_Name
WHERE ID = #{id}
</delete>
смотрите Mapper.java вот так:
int deleteDemo(@Param("id") String id);
это вернет количество затронутых записей.
mybatis может найти этот номер из jdbc.
<update>
таким же образом.
если вы хотите немного улучшить, узнайте о useAffectedRows
в jdbc
Комментарии:
1. Он спрашивает, что получает удаление, но вы говорите, сколько .