Dynamic SQL est la génération dynamique de SQL.
Si tag
Supposons qu'il y ait une exigence: lors de l'interrogation de l'utilisateur, lorsque le nom d'utilisateur n'est pas égal "Admin", nous avons également besoin d'un mot de passe de 123456.
Les données de la base de données sont:
Mybatisconfig.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype ConfigurationPublic "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config -> <typealiases> <tycias type = "jike.book.pojo.jikeUser" alias = "jikeuser" /> <tycias type = "jike.book.pojo.author" alias = "auteur" /> </ transactionmanares> Type = "JDBC"> </ TransactionManager> <DataSource Type = "Poolled"> <propriété name = "Driver" value = "com.mysql.jdbc.driver" /> <propriété name = "url" value = "jdbc:" username "Value =" root "/ jikebook" /> <propriété = "usiname" value = "root" Value = "****" /> </ DataSource> </ Environment> </ Environments> <Mappers> <Mapper Resource = "Jike / Book / Map / Jikeuser.xml" /> </ Mappers> </ Configuration>
Jikeuser.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype MapperPublic "- // Mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <maper namespace = " resultType = "Jikeuser" ParameterType = "Jikeuser"> SELECT * FROM JIKEBOOK.JikeUserwhere 1 = 1 <if test = "username! = 'admin'"> et mot de passe = # {mot de passe} </ if> </lect> </ mapper>Classe de test:
package jike.book.test; importer jike.book.pojo.jikeuser; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.ssion.sqlsessionfactory; org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.Reader;import java.util.List;/*** DateTime: 2016/9/6 13:36* Function: * Idea: */public class TestSQL {public static void main(String[] args) {// resource path String Ressource = "Jike / Book / Map / MybatisConfig.xml"; Reader Reader = NULL; SESSION SQLSESSION; TRY {Reader = Resources.getResourceAsReader (Resource);} Catch (ioException e) {e.printStackTrace ();} SqlSessionFactory SqlMapper = New SqlSessionFactoryBuilder (). Build (lecteur); session = sqlmapper.opencession (); jikeuser jikeuser = new Jikeuser (); jikeuser.Setpassword ("123456"); list <jikeuser> userList = session.selectList ("SelectSql", JikeUser); pour (Jikeuser: UserSter) (SelectSQL ", JikeUser); {System.out.println ("nom d'utilisateur:" + user.getUserName ());} session.close ();}}Le résultat en cours est:
Choisir la balise
Supposons que nous ayons actuellement une exigence: interrogez l'utilisateur, si le nom d'utilisateur n'est pas vide, ajoutez la condition du nom d'utilisateur, si l'ID n'est pas vide, ajoutez la condition d'ID, sinon, définissez le mot de passe non vide, ce qui est un choix multiple.
Mybatisconfig.xml ne change pas, ajouter:
<select id = "selectJikeuserChoose" resultType = "Jikeuser" ParameterType = "Jikeuser"> SELECT * FROM JIKEUSER WHERE 1 = 1 <COSION> <W TEST = "Username! = Null"> Et le nom d'utilisateur comme # {Username} </ When> <When test = "id! = 0"> et id = # {id} </ WHOR null </ sinon> </ choix> </lect>Classe de test: Supposons que le nom d'utilisateur n'est pas vide:
package jike.book.test; importer jike.book.pojo.jikeuser; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.ssion.sqlsessionfactory; org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.Reader;import java.util.List;/*** DateTime: 2016/9/6 13:36* Function: * Idea: */public class TestSQL {public static void main(String[] args) {// resource path String Ressource = "Jike / Book / Map / MybatisConfig.xml"; Reader Reader = NULL; SESSION SQLSESSION; TRY {Reader = Resources.getResourceAsReader (Resource);} Catch (ioException e) {e.printStackTrace ();} SqlSessionFactory SqlMapper = New SqlSessionFactoryBuilder (). Build (lecteur); session = sqlMapper.OpenSession (); Jikeuser Jikeuser = new Jikeuser (); jikeuser.selectlist ("SELECTJIKEUSERCHOOSE", JikeUser); pour (Jikeuser: UserSh {System.out.println ("nom d'utilisateur:" + user.getUserName ());} session.close ();}}Le résultat est:
En supposant que la condition du nom d'utilisateur n'est pas définie, c'est-à-dire commenter jikeuser.sesername ("yen");:
Où le marqueur, définissez le marqueur
La requête ci-dessus dans le choix est que nous ne pouvons pas déterminer si et dans la condition de sous-connexion sont écrits ou non, nous ajoutons donc un 1 = 1. Et où nous ne pouvons que juger si cela doit être ajouté.
<select id = "selectJikeUserwhere" resultType = "Jikeuser" ParameterType = "Jikeuser"> SELECT * FROM Jikeuser <où> <if test = "username! = null"> Et le nom d'utilisateur comme # {nom d'utilisateur} </ if> <if test = "id! = null"> et id = # {id} </ if> </ whereL'affectation intelligente de la balise set supprimera automatiquement l'excès ","
<update id = "updateJikeuseSet" ParameterType = "Jikeuser"> Mise à jour jikeuser <set> <if test = "username! = null"> username = # {username}, </ if> <if test = "mot de passe! = null"> mot de passe = # {mot de passe>Données avant l'opération:
fonctionner:
Résultats de l'opération:
<update id = "UpdateSerTrim" ParameterType = "Jikeuser"> Mise à jour Jikeuser <Trim Prefix = "set" suffixOverrides = "," suffix = "où id = # {id}"> <if test = "username! = null and username! = ''"> username = # # {username}, </ if> <if Test = "Moink! = Null! = Null! = '=' Username, ', </ If> "> mot de passe = # {mot de passe}, </ if> </prim> </ update>tag foreach
Généralement utilisé pour la requête en boucle ou l'attribution de boucle
<select id = "selectJikeUserForEach" resultType = "jikeuser" ParameterType = "list"> select * from jikeuser <où> id dans <foreach item = "item" index = "index" collection = "list" open = "(" séparateur = "," close = ")"> # {item} </ foreach> </ where> </lect>test:
Ce qui précède est une explication détaillée de la dynamique MyBatis SQL si, choisissez, où, définissez, coupez et foreach des exemples de balises qui vous sont présentées par l'éditeur. 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!