MyBatis est un projet open source d'Apache. En 2010, ce projet a été déplacé de la Fondation du logiciel Apache à Google Code et a été renommé Mybatis. Ce qui suit est d'introduire le mappage avancé MyBatis, de SQL dynamique et d'obtenir un contenu de clé primaire automatique. Pour plus de détails, veuillez vous référer à cet article.
1. SQL dynamique
Je crois que tout le monde rencontrera toujours un problème lors de l'utilisation de MyBatis pour faire fonctionner la base de données. Si nous avons maintenant une liste d'auteur de la liste sur l'auteur, nous devons interroger les informations du blog de l'auteur correspondant dans la base de données sur la base des informations existantes de l'auteur dans la liste d'auteur. Ensuite, le moyen le plus simple de penser est de traverser la liste d'auteur et d'obtenir les informations correspondantes pour interroger la base de données.
pour (int i = 0; i <auteurList.size (); i ++) {… // Code de base de données de requête // select * from blog où auteur = # {auteur, jdbcType = varchar}}Pensez-y, si la longueur de l'auteur est n, alors nous devons interroger la base de données n fois. Si nous utilisons cette méthode, la surcharge du programme consiste non seulement à interroger, mais aussi à supprimer l'instance de connexion dans le pool de connexion de la base de données, à établir une connexion de base de données et à renvoyer l'instance de base de données dans le pool de connexion de la base de données. Supposons que ces trois actions prennent un total de 0,001 seconde. Ensuite, si vous utilisez des méthodes de traversée pour interroger, il faudra 0,001n seconde de plus. Si vous devez interroger 1 000 fois, ce sera 1 seconde de plus. Ceci est insupportable pour les programmeurs, car ce n'est qu'une requête circulaire et ne comptant pas comme autre code commercial.
Alors, y a-t-il une meilleure façon? La réponse est oui, dont l'une est dynamique SQL:
Téléchargez d'abord le code:
<select id = "dynamicForEachTest" resultType = "com.blog.blog" ParameterType = "java.util.list"> SELECT * FROM BLOG WHERE AUTOR dans <ForEach Collection = "list" index = "index" item = "item" open = "(" séparateur = "," close = ")"> # {item} </ foreach> </lect>TEM représente l'alias lorsque chaque élément de l'ensemble est itéré.
L'index spécifie un nom pour représenter la position à laquelle chaque itération est atteinte pendant le processus d'itération.
ouvert signifie où commence la déclaration,
Le séparateur indique quel symbole est utilisé comme séparateur entre chaque itération.
Close indique ce qui se termine avec afin que la valeur de retour puisse être acceptée à l'aide de la liste <bolg>.
Cependant, l'instruction foreach dans Dynamic SQL utilise la chose la plus réelle dans les instructions d'insertion et est généralement utilisée dans les clauses.
2. Mappage avancé
Lors de l'utilisation de MyBatis, la classe d'entité ResultType = com.blog.Author est généralement utilisée pour accepter les résultats de la requête.
Ou utilisez ResultType = java.util.map pour renvoyer le nom de la colonne de la base de données en tant que clé et la valeur d'enregistrement comme valeur.
Mais cette fois, ResultMap est nécessaire, ce qui permet une combinaison libre de valeurs de retour pour gérer des requêtes plus complexes.
Ou téléchargez simplement le code d'abord:
SQL:
<select id = "getblogs" resultMap = "blogs" ParameterType = "map"> sélectionner a.authorid, a.uthorname, b.blogid, b.blognamefrom auteur un blog de jointure de gauche B sur a. AUTORID = b. Auteur où a. autorid = # {autorid, jdbcType = Integer} </lect>Configuration MyBatis:
<resultmap id = "blogs" type = "com.bloh.blog"> <id propriété = "AuthorId" colonnel = "AuthorId"> <result Property = "Authorname" Column = "AuthorName"> <id Property = "Blogid" Column = "Blogid" /> <Result Property = "BLOGNAM Property = "Blogname" /> </ ResultMap>
Classe d'entité de blog
Classe publique Bolg {Private Integer AuthorId; Private String Authorname; List privé <ost> PostsList; // Setter Getter}Classe d'entité postale
Classe publique Post {Blogd privé entier; Blogid de chaîne privée; // Setter Getter}Cela vous permet d'accepter une requête complexe avec une entité.
Voici la fonction de chaque attribut:
Je n'entrerai pas dans les détails des autres propriétés et configurations des requêtes MyBatis ordinaires.
ResultMap est utilisé à la place de ResultType, indiquant le format renvoyé par le résultat de la requête
L'ID dans ResultMap a deux fonctions principales:
Index similaires pour améliorer les performances de la requête
Distinguer différents résultats
Par conséquent, il est préférable de ne pas omettre ID. S'il n'y a pas de clé primaire, utilisez un champ qui peut plutôt distinguer les enregistrements.
Le résultat est le nom de variable défini dans la classe d'entité, et la colonne est le nom de colonne de la base de données
La collection est une collection de listes, cartes, etc.
PostsList est le nom de la variable de liste définie dans la classe d'entité de blog
OFTYPE est la classe d'entité de l'objet dans la liste des objets.
3. Obtenez l'ID auto-croissant:
S'il y a la situation suivante, après avoir inséré l'enregistrement de la base de données, vous souhaitez obtenir la clé principale de l'enregistrement d'insertion et utiliser le code commercial suivant
Ensuite, MyBatis fournit également un support correspondant pour cette situation (l'insertion par lots n'est pas prise en charge):
MySQL est l'ID original de son auto-croissant; En supposant que le nom de champ de la clé primaire auto-croissante est ID
<insert id = "insert" useGeneratedKeys = "true" keyproperty = "id" ParameterType = "user"> insérer dans <include refid = "table_name" /> (name, age) valeurs (# {name}, # {age}) </ insert>Il y a deux attributs supplémentaires que l'insertion ordinaire useGeneratedKeys = "true", ce qui signifie qu'il renvoie l'ID d'auto-incitation lorsqu'il est activé.
keyproperty = "id" signifie le nom de la clé primaire de retour.
Ensuite, vous pouvez utiliser les instructions suivantes pour la recevoir dans le code commercial:
Supposons que la classe d'entité est utilisateur
User userNew = userMapper.insert (utilisateur);
userNew.getId // est l'ID incrémenté automatique après insertion
En fait, la clé primaire automatique de MySQL peut être obtenue par select last_insert_id ();
Il y a donc une autre façon de l'écrire:
<insert id = "insert" ParameterType = "user"> <SelectKey resultType = "int" order = "after" keyproperty = "id"> select last_insert_id () as id </ SelectKey> insérer dans le nom, AgeValues (# {name}, # {age}) </ insert>C'est exactement l'opposé de la méthode de MySQL pour obtenir des clés primaires. MySQL est le tableau qui alloue la valeur d'auto-croissance après l'insertion de l'insertion, tandis qu'Oracle obtient la valeur d'auto-croissance avant d'effectuer l'insertion SQL. Avant d'exécuter l'insert SQL, une valeur de clé primaire doit être spécifiée à l'enregistrement à insérer. Par conséquent, vous devez obtenir la séquence d'auto-croissance à "avant", puis l'injecter dans la carte des paramètres par SelectKey. Assumer l'auto-croissance ou ID
<insert id=" insert " useGeneratedKeys="true" keyProperty="id" parameterType="xxxx" ><selectKey resultType="int" order="BEFORE" keyProperty="id">SELECT SEQ_TABLE.NEXTVAL FROM dual</selectKey>INSERT INTO id,name,ageVALUES(#{id} #{name}, #{age} ) </sère>L'ID est ici l'ID d'incrémentation automatique obtenue par SelectKey.
La méthode de réception est la même que MySQL. Lors de l'obtention de la clé primaire d'auto-incrémentation, il est préférable d'utiliser la réception de l'entité.
Ce qui précède est le mappage avancé MyBatis, le SQL dynamique et l'obtention de clés primaires auto-axées qui vous sont présentées. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!