MyBatis est un excellent cadre de couche de persistance qui prend en charge les requêtes SQL simples, les procédures stockées et la cartographie avancée. MyBatis élimine les paramètres manuels de presque tous les code et paramètres JDBC et l'encapsulation de recherche de l'ensemble de résultats. MyBatis peut utiliser du XML ou des annotations simples pour la configuration et la cartographie originale, les interfaces de cartographie et les Pojos de Java (Old Java objets) en enregistrements dans la base de données.
Maintenant que Mybatis devient de plus en plus populaire, tout le monde connaît ses avantages, donc je ne dirai pas grand-chose, je parle simplement des points clés.
MyBatis fournit des fonctions SQL dynamiques. Nous pouvons utiliser <f> <quand> <où> <sinon> <foreach> et ainsi de suite, afin que nous puissions écrire SQL dynamique généré selon les conditions. Cependant, au milieu, il y a un petit malentendu de la balise <f> que nous utilisons souvent, qui tombera si nous nous accidentellement. Permettez-moi de vous donner un exemple normal:
<select id = "findactiveblogwithTitlelike" ParameterType = "blog" resultType = "Blog"> SELECT * FROM Blog Where State = 'active' <if test = "title! = null"> and title Like # {title} </ if> </ Select>Dans l'exemple ci-dessus, lorsque le titre n'est pas égal à NULL, les conditions de la balise <f> seront épissées, de sorte que l'instruction SQL sera dynamique.
Mais quand nous jugeons toutes les conditions, écrivez-vous de cette façon:
<select id = "findactiveblogwithTitlelike" ParameterType = "blog" resultType = "Blog"> SELECT * FROM Blog Where <if test = "userId! = Null"> State = 'Active' </ if> <if test = "title! = Null"> and title comme # {title} </ if> </ select>Pas de problème, non? Au moins, il est syntaxiquement bon, au moins il peut générer un SQL normalement.
Cependant, je ne sais pas si vous avez remarqué que lorsque toutes les conditions sont nulles, que se passe-t-il?
Sélectionnez * dans le blog où
L'avez-vous vu? Un tel SQL peut-il être exécuté avec succès?
La réponse est bien sûr no.
Alors que dois-je faire? N'oubliez pas que lorsque vous écrivez Dynamic SQL, déterminez d'abord si toutes les conditions se produiront si toutes les conditions ne sont pas vraies, et s'il n'y en aura qu'une seule où mais pas de conditions. Ensuite, tout ce que vous avez à faire est d'ajouter une balise <où> pour envelopper toutes les conditions.
<select id = "findactiveblogwithTitlelike" ParameterType = "blog" resultType = "blog"> sélectionner * dans le blog <où> <if test = "userId! = null"> State = 'active' </ if> <if test = "title! = null"> Et le titre comme # {title} </ if> </ where> </lect>De cette façon, lorsque toutes les conditions ne sont pas vraies, où ne seront pas énoncées.
Pour le moment, l'ami intelligent a découvert que si la première condition n'est pas vraie et que la deuxième condition est vraie, SQL deviendra-t-il comme ça?
Sélectionnez * dans le blog où et titre comme # {title}Ne vous inquiétez pas, lorsque vous utilisez la balise <f> pour entourer les conditions, elle supprimera automatiquement et.
Ce qui précède est le petit piège de l'utilisation de balises SQL dynamiques par l'éditeur pour vous présenter par mybatis. 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!