Gestion des ensembles de résultats MySQL

1. Lorsque les noms de colonnes de la table renvoyée par la requête diffèrent des propriétés de la classe d'entité (resultType).

Le paramètre resultType permet d'associer le résultat de la requête à un objet Pojo, mais nécessite une correspondance stricte entre les noms des colonnes de la base de données et les attributs de la classe. Lorsque cette correspondance n'est pas possible, il est nécessaire d'uitliser un resultMap pour établir une liaison explicite entre les noms de colonnes et les propriétés de l'objet. Le resultMap doit ensuite mapper ces données vers l'objet final.

Dans le cas où la colonne de la base de données (user_id) ne correspond pas à l'attribut de la classe (userId), le mappage automatique échoue. Pour résoudre cela, il faut configurer un resultMap qui relie ces éléments.

Voici la configuration mise à jour dans OrdersMapper.xml :

<?xml version="1.0" encoding="UTF-8" ?>

<!-- Le namespace permet d'isoler les requêtes et est utilisé pour la génération dynamique des mappers -->
<mapper namespace="com.example.mapper.OrdersMapper">

	<!-- Définit le mappage entre les colonnes de la base et les attributs de la classe -->
	<resultMap type="Order" id="orderMapping">
		<!-- Définit la clé primaire -->
		<id property="orderId" column="id" />

		<!-- Mappe les autres attributs -->
		<result property="userId" column="user_id" />
		<result property="orderNumber" column="number" />
		<result property="creationDate" column="createtime" />
		<result property="description" column="note" />
	</resultMap>

	<!-- Récupère tous les enregistrements de commande -->
	<select id="getAllOrders" resultMap="orderMapping">
		SELECT id, user_id, number, 
		createtime, note FROM orders
	</select>
</mapper>

2. Récupérer la clé primaire générée automatiquemant après une insertion

<!-- Enregistre un utilisateur -->
<insert id="createUser" parameterType="com.example.pojo.User">
	<!-- Récupère l'identifiant généré -->
	<selectKey keyProperty="userId" order="AFTER"
		resultType="Integer">
		<!-- Fonction MySQL retournant l'id de la dernière insertion -->
		SELECT LAST_INSERT_ID()
	</selectKey>
	INSERT INTO users
	(username, birthdate, gender, address) VALUES
	(#{username}, #{birthdate}, #{gender}, #{address})
</insert>

La fonction LAST_INSERT_ID() retourne la valeur de l'identifiant auto-incrementé généré par MySQL.

3. Gérer plusieurs critères de recherche provenant de classes distinctes en créant un objet personnalisé.

Étiquettes: MySQL MyBatis mapping clé auto-incrémentée POJO

Publié le 5 septembre à 17h55