SQL dinâmico é a geração dinâmica de SQL.
se tag
Suponha que exista um requisito: ao consultar o usuário, quando o nome do usuário não é igual ao "admin", também precisamos de uma senha de 123456.
Os dados no banco de dados são:
Mybatisconfig.xml
<? xml versão = "1.0" Encoding = "utf-8"?> <! Ambientes -> <TypeAliases> <typeAlias type = "jike.book.pojo.jikeUser" alias = "jikeUser"/> <typeAlias type = "jike.book.pojo.author" alias = "autor"/> </typeAlias> <ambientes Defult = "Development"> <ambiente id = "" type = "jdbc"> </transactionManager> <dataSource type = "pooled"> <propriedade name = "driver" value = "com.mysql.jdbc.driver"/> <names name = "url" value = "jdbc: mysql: // ushost: 3306/jike" "/> <ldbc" "> <BoTer"> <Book "> <Dower"> <Book "> <Dower"> <Dearn> <Perty> <Perty> <Perty "> <Dearn> <Deern Name" Nome = ") value = "****"/> </DataSource> </ambiente> </ambientes> <Mappers> <mapper Resource = "jike/book/map/jikeuser.xml"/> </mappers> </figuration>
JikeUser.xml
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype mapperpublic "-// mybatis.org//dtd mapepper 3.0 // en" "http://mybatis.org/dtd/mybatis-3mpp.dtd"> <MaPerg/names) ResultType = "JikeUser" ParameterType = "JikeUser"> Selecione * FROM Jikebook.jikeUserwhere 1 = 1 <se test = "nome de usuário! = 'admin'" e senha =#{senha} </f>Classe de teste:
pacote jike.book.test; importar jike.book.pojo.jikeUser; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; importação org.apache.ibatis.session.session.SessionFactory; importação; org.apache.ibatis.session.sqlSessionFactoryBuilder; importar java.io.ioException; importar java.io.reader; importar java.util.list;/*** datetime: 2016/9/6 13: 36* function:* Idea:*/public class TestSql {public Path Maid Main (String Maid Maior (String (36* Função:* Idea:*/public Resource = "jike/book/map/mybatisconfig.xml"; leitor leitor = null; sqlsession session; try {reader = Resources.getResourCeasReader (Resource);} Catch (ioException e) {E.PrintStackTrace ();} sqlsFactory sqMel. SqlSessionFactoryBuilder (). Build (leitor); session = sqlmapper.opensssion (); jikeuser jikeUser = new jikeuser (); jikeUser.setPassword ("123456"); list <JikeUser> usertike. {System.out.println ("nome de usuário:"+user.getUserName ());} session.close ();}}O resultado em execução é:
Escolha a tag
Suponha que atualmente tenhamos um requisito: consulte o usuário, se o nome do usuário não estiver vazio, adicione a condição do nome do usuário, se o ID não estiver vazio, adicione a condição de identificação, caso contrário, defina a senha não vazia, o que é uma escolha múltipla.
Mybatisconfig.xml não muda, adicione:
<select id = "SelectJikeUserChoose" resultType = "jikeUser" parameterType = "jikeUser"> selecione * de jikeUser onde 1 = 1 <fice> <w test = "username! = null"> e nome de usuário como #{username} </when> <ber/iD = "id! NULL </sido> </CHOY> </leclect>Classe de teste: suponha que o nome de usuário não esteja vazio:
pacote jike.book.test; importar jike.book.pojo.jikeUser; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; importação org.apache.ibatis.session.session.SessionFactory; importação; org.apache.ibatis.session.sqlSessionFactoryBuilder; importar java.io.ioException; importar java.io.reader; importar java.util.list;/*** datetime: 2016/9/6 13: 36* function:* Idea:*/public class TestSql {public Path Maid Main (String Maid Maior (String (36* Função:* Idea:*/public Resource = "jike/book/map/mybatisconfig.xml"; leitor leitor = null; sqlsession session; try {reader = Resources.getResourCeasReader (Resource);} Catch (ioException e) {E.PrintStackTrace ();} sqlsFactory sqMel. SqlSessionFactoryBuilder (). Build (leitor); session = sqlmapper.opensssion (); jikeUser JikeUser = new jikeUser (); jikeUser.setUsername ("ien"); list <nikeUser> userList = session.selectList ("selectJikeSerChose", jikeUser> jikeSlist = session.ElectList ("selectJikeSerChose", jikeUser> jikeSlist =setList ("SelectJikeSerChose", jikeUser> jikeSlist =setList ("SelectJikeSerChose", jikeUser> jikeSt = session.ErtList ("SelectJikeSerChose", JikeUser> JikeSer = session. {System.out.println ("nome de usuário:"+user.getUserName ());} session.close ();}}O resultado é:
Supondo que a condição do nome de usuário não esteja definida, ou seja, comente JikeUser.SetUserName ("iene");:
Onde marcador, defina o marcador
A consulta acima na escolha é que não podemos determinar se e na condição de subconecção está escrita ou não, por isso adicionamos 1 = 1. E onde só podemos julgar se deve ser adicionado.
<select id = "selectjikeUserwhere" resultType = "jikeUser" parameterType = "jikeUser"> selecione * de jikeUser <where> <se test = "userName!
A atribuição inteligente de tags definida removerá automaticamente o excesso ","
<update id = "updatejikeUserset" parametertype = "jikeUser"> atualize jikeUser <Set> <se test = "nome de usuário! = null"> userName =#{userName}, </if> <se teste = "senha!Dados antes da operação:
operar:
Resultados da operação:
<update id = "updateUserTrim" parameterType = "jikeUser"> atualize jikeUser <trim prefix = "set" sufixoverrides = "," suffix = "where id = #{id}"> <se teste = "nome de usuário! "> senha =#{senha}, </if> </avim> </putat>foreach tag
Geralmente usado para consulta de loop ou atribuição de loop
<select id = "selectjikeUserForEach" resultType = "JikeUser" ParameterType = "List"> Selecione * FROM JikeUser <where> id em <foreach item = "item" index = "index" collection = "list" (/"(" separador = "," Close = ")">#{item} </paraaneght>teste:
O acima exposto é uma explicação detalhada do SQL dinâmico do Mybatis se, escolha, onde, defina, aparar e para os exemplos de tags apresentados a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a tempo. Muito obrigado pelo seu apoio ao site wulin.com!