J'ai récemment étudié le design orienté objet. Lors de l'utilisation d'objets de domaine, l'existence de classes pratiques dans la base de données semble gênante, J'espérais recevoir la valeur obtenue de la base de données directement sous la forme d'un objet de domaine: frowning2:
J'étudie toujours, alors j'ai essayé d'utiliser MyBatis comme une solution, Je voudrais savoir s'il existe un bon moyen d'obtenir la valeur de la base de données: bow:
Obtenez la classe MeetingRoom à l'aide de MyBatis
public class MeetingRoom {
private int id;
private String name;
...
}
@Mapper
public interface MeetingRoomMapper {
MeetingRoom findById(int roomId);
}
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.spring.tutorial.MeetingRoomMapper">
<select id="findById" resultType="com.spring.tutorial.MeetingRoom">
SELECT
room_id as id,
room_name as name
FROM
meeting_room
WHERE
room_id = #{room_id}
</select>
</mapper>
Si vous spécifiez la valeur de retour de findById de la classe Mapper et de MeetingRoom comme ResultType du fichier Mapper, elle sera renvoyée sous la forme de MeetingRoom. De plus, étant donné que le nom de la colonne et le nom de la propriété doivent correspondre, ils sont spécifiés dans la clause AS.
Remplacez l'ID MeetingRoom de type int par la classe Id.
public class MeetingRoom {
//Changer en objet de valeur
private Id id;
private String name;
...
}
public class Id {
private static final int MIN = 1;
private Integer value;
Id(int value) {
if (value < MIN) throw new IllegalArgumentException("Valeur illégale. valeur:" + value);
this.value = value;
}
...
}
Utilisez ResultMap pour définir la classe Id et la classe MeetingRoom.
<resultMap id="IdMap" type="com.spring.tutorial.Id" >
<id property="value" column="room_id" />
</resultMap>
<resultMap id="MeetingRoomMap" type="com.spring.tutorial.MeetingRoom">
<result property="name" column="room_name" />
<association property="id" resultMap="IdMap"/>
</resultMap>
<select id="findById" resultMap="MeetingRoomMap">
SELECT * FROM meeting_room WHERE room_id = #{room_id}
</select>
Remplacez le ResultType de SELECT par ResultMap et spécifiez le ResultMap de MeetingRoom. Utilisez ** association ** pour utiliser ResultMap dans ResultMap. Lorsqu'il y a un résultat dans la propriété du même objet, soyez prudent car une erreur se produira si vous ne décrivez pas l'association ci-dessous: point_up_2_tone1:
Le contenu du type d'élément "resultMap" doit correspondre "(constructeur?, Id *, résultat *, association *, collection *, discriminateur?)".
MyBatis est bon car vous n'avez pas besoin d'augmenter le nombre de classes pratiques dans la base de données: détendu:
Principes de conception de système utiles sur le terrain mybatis - Fichier XML du mappeur