Apprenez le SQL dynamique MyBatis
Tutoriel SQLPrésentation des puissantes fonctionnalités de SQL MyBatis SQL
Recommandé (gratuit) : Tutoriel SQL
SQL dynamique
L'une des fonctionnalités puissantes de MyBatis est son SQL dynamique. Si vous avez de l'expérience dans l'utilisation de JDBC ou d'autres frameworks similaires, vous comprendrez la difficulté de fusionner des instructions SQL en fonction de différentes conditions. Par exemple, lors de l'épissage, assurez-vous de ne pas oublier d'ajouter les espaces nécessaires et veillez à supprimer la virgule du dernier nom de colonne de la liste. Profitez de la fonctionnalité SQL dynamique pour vous débarrasser complètement de cette douleur.
Bien qu'il n'était pas facile d'utiliser le SQL dynamique dans le passé, MyBatis a amélioré cette situation en fournissant un langage SQL dynamique puissant qui peut être utilisé dans n'importe quelle instruction de mappage SQL.
Les éléments SQL dynamiques sont similaires aux processeurs de texte basés sur JSTL ou XML. Dans les versions précédentes de MyBatis, de nombreux éléments prenaient du temps à comprendre. MyBatis 3 a grandement simplifié les types d'éléments. Il ne vous reste plus qu'à apprendre la moitié des éléments originaux. MyBatis utilise de puissantes expressions basées sur OGNL pour éliminer la plupart des autres éléments.
Préparation
Créez d'abord la classe d'entité Utilisateur
public class User { private Integer id; private String username; private String userEmail; private String userCity; private Integer age;}
Créez la table utilisateur
CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(255) DEFAULT NULL, user_email varchar(255) DEFAULT NULL, user_city varchar(255) DEFAULT NULL, age int(11) DEFAULT NULL, PRIMARY KEY (id))
if
Définir la méthode d'interface
public List<User> findByUser(User user);
La définition Mapper.xml correspondant à l'interface est la suivante
<select id="findByUser" resultType="com.example.mybatis.entity.User"> select id, username, user_email userEmail, user_city userCity, age from user where <if test="username != null and username != ''"> username = #{username} </if> <if test="userEmail != null and userEmail != ''"> and user_email = #{userEmail} </if> <if test="userCity != null and userCity != ''"> and user_city = #{userCity} </if></select>
Si le test sur la balise if est vrai, alors l'instruction SQL dans la balise if sera Splicing.
Si le nom d'utilisateur, userEmail et userCity ne sont pas vides, alors le SQL sera épissé comme suit
select id, username, user_email userEmail, user_city userCity, age from user where username = ? and user_email = ? and user_city = ?
Si seul le nom d'utilisateur n'est pas vide, alors le SQL sera épissé comme suit follow
select id, username, user_email userEmail, user_city userCity, age from user where username = ?
Cependant, cette méthode présente un inconvénient. Supposons que le nom d'utilisateur soit vide à ce moment-là, userEmail et userCity ne sont pas vides.
Analysons le code SQL dynamique. Maintenant, aucune valeur n'est attribuée au nom d'utilisateur, c'est-à-dire username==null, donc le code "username=#{username}" ne sera pas ajouté à l'instruction SQL, donc le Dynamic SQL épissé final ressemble à ceci :
select id, username, user_email userEmail, user_city userCity, age from user where and user_email = ? and user_city = ?
where est directement suivi de et, ce qui est une erreur de syntaxe évidente. Dans ce cas, le where
qui suit immédiatement and
doit être supprimé. Pour résoudre ce problème, vous pouvez utiliser la balise where
.
where
Modifiez le SQL ci-dessus par le
<select id="findByUser" resultType="com.example.mybatis.entity.User"> select id, username, user_email userEmail, user_city userCity, age from user <where> <if test="username != null and username != ''"> username = #{username} </if> <if test="userEmail != null and userEmail != ''"> and user_email = #{userEmail} </if> <if test="userCity != null and userCity != ''"> and user_city = #{userCity} </if> </where> </select>
Si la balise where
dans la balise if
remplit les conditions, alors la balise where
sera fusionnée dans une instruction Where. Si le SQL épissé avec la balise if
a une instruction and au début, alors le et sera supprimé. En utilisant cette méthode, les mots-clés inutiles dans SQL seront automatiquement supprimés, donc généralement si les balises et où les balises sont utilisées en combinaison.
trim
trim
Les attributs prefix
et suffix
de la balise seront utilisés pour générer l'instruction SQL réelle, qui sera épissée avec la déclaration à l'intérieur de la balise .
Si la valeur spécifiée dans l'attribut prefixOverrides
ou suffixOverrides
est rencontrée avant ou après la déclaration, MyBatis les supprimera automatiquement. Lorsque vous spécifiez plusieurs valeurs, n'oubliez pas de laisser un espace après chaque valeur pour vous assurer qu'elle ne sera pas connectée au SQL ultérieur.
préfixe : Ajouter un préfixe à l'instruction SQL épissée
suffixe : Ajouter un suffixe à l'instruction SQL épissée
prefixOverrides : Si prefixOverrides
est rencontré avant l'instruction SQL épissée, MyBatis les supprimera automatiquement
suffixOverrides : Si suffixOverrides
est rencontrés après l'instruction SQL épissée, MyBatis les supprimera automatiquement
Utilisez la balise trim
ci-dessous pour implémenter la fonction de la balise where
<select id="findByUser" resultType="com.example.mybatis.entity.User"> select id, username, user_email userEmail, user_city userCity, age from user <trim prefix="where" prefixOverrides="and"> <if test="username != null and username != ''"> username = #{username} </if> <if test="userEmail != null and userEmail != ''"> and user_email = #{userEmail} </if> <if test="userCity != null and userCity != ''"> and user_city = #{userCity} </if> </trim> </select>
Si le nom d'utilisateur est vide, userEmail et userCity ne sont pas vides, alors la balise if
L'instruction SQL épissée est la suivante
and user_email = #{userEmail} and user_city = #{userCity}
Parce que la balise trim
est définie avec prefixOverrides="and", et le SQL ci-dessus a un et instruction devant, donc l'instruction ci-dessus et l'instruction doivent être supprimées, et parce que trim
L'étiquette est définie avec préfixe="where", vous devez donc ajouter une instruction Where devant l'instruction SQL épissée
Enfin, l'instruction SQL de la balise trim
est épissée comme suit
where user_email = #{userEmail} and user_city = #{userCity}
choisir
Parfois, nous ne voulons pas appliquer à toutes les instructions conditionnelles, mais je veux juste en choisir une. Pour cette situation, MyBatis fournit l'élément Choose, qui ressemble un peu à l'instruction switch en Java. La balise
<select id="findByUser" resultType="com.example.mybatis.entity.User"> select id, username, user_email userEmail, user_city userCity, age from user <where> <choose> <when test="username != null and username != ''"> username = #{username} </when> <when test="userEmail != null and userEmail != ''"> and user_email = #{userEmail} </when> <when test="userCity != null and userCity != ''"> and user_city = #{userCity} </when> </choose> </where> </select>
set
set est utilisée pour l'opération de mise à jour et générera automatiquement des instructions SQL basées sur la sélection des paramètres.
L'interface est définie comme suit
public int updateUser(User user);
La définition Mapper.xml correspondante de l'interface est la suivante
<update id="updateUser" parameterType="com.example.mybatis.entity.User"> update user <set> <if test="username != null and username != ''"> username=#{username}, </if> <if test="userEmail != null and userEmail != ''"> user_email=#{userEmail}, </if> <if test="userCity != null and userCity != ''"> user_city=#{userCity}, </if> <if test="age != null"> age=#{age} </if> </set> where id=#{id} </update>
foreach
La balise foreach peut être itérée Générer une série de valeurs
*pour SQL dans l'instruction*
接口定义如下所示
public List<User> getUsersByIds(List<Integer> ids);
接口对应的 Mapper.xml 定义如下所示
<!-- collection: 指定要遍历的集合 默认情况下 如果为Collection类型的,key为collection; 如果为List类型的,key为list 如果是数组类型,key为array 可以通过@Param("ids")来指定key item: 将当前遍历的元素赋值给指定的变量 open: 给遍历的结果添加一个开始字符 close: 给遍历的结果添加一个结束字符 separator: 每个元素之间的分隔符 --><select id="getUsersByIds" resultType="com.example.mybatis.entity.User"> select * from user where id in <foreach collection="list" item="id" open="(" close=")" separator=","> #{id} </foreach></select>
用于批量插入
接口定义如下所示
public int addUserList(List<User> users);
接口对应的 Mapper.xml 定义如下所示
<insert id="addUserList" parameterType="com.example.mybatis.entity.User"> insert into user (username, user_email, user_city, age) values <foreach item="user" collection="list" separator=","> (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age}) </foreach></insert><!--返回自增主键--><insert id="addUserList" parameterType="com.example.mybatis.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into user (username, user_email, user_city, age) values <foreach item="user" collection="list" separator=","> (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age}) </foreach></insert><!--还可以这样写--><!-- 这种方式需要数据库连接属性设置allowMultiQueries=true 这种分号分隔多个SQL还可以用于其他的批量操作,如修改、删除 --><insert id="addUserList" parameterType="com.example.mybatis.entity.User"> <foreach item="user" collection="list" separator=";"> insert into user (username, user_email, user_city, age) values (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age}) </foreach></insert><!--如果是Oracle数据库,则需要这样写--><insert id="addUserList" parameterType="com.example.mybatis.entity.User"> <foreach item="user" open="begin" close="end;" collection="list"> insert into user (username, user_email, user_city, age) values (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age}); </foreach></insert>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.

Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.

Interprétation des balises SQL dynamiques MyBatis : explication détaillée de l'utilisation des balises Set MyBatis est un excellent cadre de couche de persistance. Il fournit une multitude de balises SQL dynamiques et peut construire de manière flexible des instructions d'opération de base de données. Parmi elles, la balise Set est utilisée pour générer la clause SET dans l'instruction UPDATE, qui est très couramment utilisée dans les opérations de mise à jour. Cet article expliquera en détail l'utilisation de la balise Set dans MyBatis et démontrera ses fonctionnalités à travers des exemples de code spécifiques. Qu'est-ce que Set tag Set tag est utilisé dans MyBati

Solution : 1. Vérifiez si l'utilisateur connecté dispose des autorisations suffisantes pour accéder ou utiliser la base de données, et assurez-vous que l'utilisateur dispose des autorisations appropriées ; 2. Vérifiez si le compte du service SQL Server est autorisé à accéder au fichier spécifié ou ; dossier et assurez-vous que le compte dispose des autorisations suffisantes pour lire et écrire le fichier ou le dossier ; 3. Vérifiez si le fichier de base de données spécifié a été ouvert ou verrouillé par d'autres processus, essayez de fermer ou de libérer le fichier et réexécutez la requête ; . Essayez en tant qu'administrateur, exécutez Management Studio en tant que etc.

MyBatisGenerator est un outil de génération de code officiellement fourni par MyBatis, qui peut aider les développeurs à générer rapidement des JavaBeans, des interfaces Mapper et des fichiers de mappage XML conformes à la structure des tables de base de données. Dans le processus d'utilisation de MyBatisGenerator pour la génération de code, la définition des paramètres de configuration est cruciale. Cet article commencera du point de vue des paramètres de configuration et explorera en profondeur les fonctions de MyBatisGenerator.

Explication détaillée du cache de premier niveau MyBatis : Comment améliorer l'efficacité de l'accès aux données ? Au cours du processus de développement, un accès efficace aux données a toujours été l’une des priorités des programmeurs. Pour les frameworks de couche de persistance comme MyBatis, la mise en cache est l'une des méthodes clés pour améliorer l'efficacité de l'accès aux données. MyBatis fournit deux mécanismes de mise en cache : le cache de premier niveau et le cache de deuxième niveau. Le cache de premier niveau est activé par défaut. Cet article présentera en détail le mécanisme du cache de premier niveau MyBatis et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre

Explication détaillée de la configuration des requêtes un-à-plusieurs de MyBatis : Pour résoudre les problèmes de requêtes associés courants, des exemples de code spécifiques sont nécessaires. Dans le travail de développement réel, nous rencontrons souvent des situations dans lesquelles nous devons interroger un objet d'entité maître et ses multiples objets d'entité esclave associés. . Dans MyBatis, la requête un-à-plusieurs est une requête d'association de base de données courante avec une configuration correcte, l'interrogation, l'affichage et le fonctionnement des objets associés peuvent être facilement réalisés. Cet article présentera la méthode de configuration des requêtes un-à-plusieurs dans MyBatis et comment résoudre certains problèmes de requêtes courants associés.
