Dynamic SQL adalah generasi dinamis SQL.
Jika tag
Misalkan ada persyaratan: Saat menanyakan pengguna, ketika nama pengguna tidak sama dengan "admin", kami juga memerlukan kata sandi 123456.
Data dalam database adalah:
Mybatisconfig.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <asments> <perealia> <perealia <! -> <yypealiases> <typealias type = "jike.book.pojo.jikeuser" alias = "jikeUser"/> <typealias type = "jike.book.pojo.author" alias = "penulis"/> </yypealiases> <lingkungan default = "pengembangan"> <"pengembangan"> <"pengembangan"> </typealiases> <lingkungan default = "pengembangan"> <"pengembangan"> <"pengembangan"> <"Development"> </typealiases> type = "jdbc"> </pransactionManager> <DataSource type = "pooled"> <name properti = "driver" value = "com.mysql.jdbc.driver"/> <name properti = "url" value = "jdbc: mysql: // localhost: 3306/jikeBook"/> <"name" "name" "name" "name" "name" "name" "" "" "name" name local a root "name local a root" value = "****"/> </dateSource> </vesenvesent> </urvironments> <mappers> <mapper resource = "jike/book/peta/jikeuser.xml"/> </mappers> </configuration>
Jikeuser.xml
<? xml versi = "1.0" encoding = "utf-8"?> <! Doctype mapperpublic "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-papper resultType = "jikeuser" parameTerType = "jikeUser"> pilih * dari jikebook.jikeuserwhere 1 = 1 <if test = "username! = 'admin'"> dan kata sandi =#{kata sandi} </if> </ pilih> </mapper>Kelas Tes:
Paket jike.book.test; impor jike.book.pojo.jikeuser; impor org.apache.ibatis.io.Resources; impor org.apache.ibatis.session.sqlsession; import org.apache.ibatis.Sessiespyfacyfactory; impor org.apache.apache.ibatis.sessiessiespacesyfactory; impor org.apache.apache org.apache.ibatis.Session.SQLSessionFactoryBuilder; impor java.io.ioException; impor java.io.reader; Sumber//Sumber Data (Fungsi Mainia (*/Ide (*/Ide (*/Kelas Publik Tes Kelas Publik {Public Static Static Static Static Static Static Public [ resource="jike/book/map/MyBatisConfig.xml";Reader reader=null;SqlSession session;try {reader= Resources.getResourceAsReader(resource);} catch ( IOException e ) {e.printStackTrace();}SqlSessionFactory sqlMapper=new SQLSessionFactoryBuilder (). Build (pembaca); session = sqlmapper.opensession (); jikeuser jikeuser = new jikeuser (); jikeuser.setpassword ("123456"); Daftar <Jikeuser> UserList = session.selectList ("SelectSQUSQUSQUUS (JikeUser) JoCeUser = Sesi Sesi. {System.out.println ("UserName:"+user.getUserName ());} session.close ();}}Hasil berjalan adalah:
Pilih Tag
Misalkan kita saat ini memiliki persyaratan: query pengguna, jika nama pengguna tidak kosong, tambahkan kondisi nama pengguna, jika ID tidak kosong, tambahkan kondisi ID, jika tidak, atur kata sandi tidak kosong, yang merupakan pilihan ganda.
Mybatisconfig.xml tidak berubah, tambahkan:
<select id="selectJiKeUserChoose" resultType="JiKeUser" parameterType="JiKeUser">select * from jikeuser where 1=1<choose><w test="userName!=null">and userName like #{userName}</when><when test="id!=0">and id =#{id}</when><otherwise>and password is not NULL </setines> </ticle> </ pilih>Kelas Tes: Asumsikan bahwa nama pengguna tidak kosong:
Paket jike.book.test; impor jike.book.pojo.jikeuser; impor org.apache.ibatis.io.Resources; impor org.apache.ibatis.session.sqlsession; import org.apache.ibatis.Sessiespyfacyfactory; impor org.apache.apache.ibatis.sessiessiespacesyfactory; impor org.apache.apache org.apache.ibatis.Session.SQLSessionFactoryBuilder; impor java.io.ioException; impor java.io.reader; Sumber//Sumber Data (Fungsi Mainia (*/Ide (*/Ide (*/Kelas Publik Tes Kelas Publik {Public Static Static Static Static Static Static Public [ resource="jike/book/map/MyBatisConfig.xml";Reader reader=null;SqlSession session;try {reader= Resources.getResourceAsReader(resource);} catch ( IOException e ) {e.printStackTrace();}SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);session=sqlMapper.openSession();JiKeUser jiKeUser=new JiKeUser();jiKeUser.setUserName("YEN");List<JiKeUser> userList=session.selectList("selectJiKeUserChoose",jiKeUser);for ( JiKeUser user:userList ) {System.out.println ("UserName:"+user.getUserName ());} session.close ();}}Hasilnya adalah:
Dengan asumsi bahwa kondisi nama pengguna tidak ditetapkan, yaitu, komentar keluar jikeuser.setusername ("yen");:
Dimana penanda, atur spidol
Kueri di atas dalam pilihan adalah bahwa kami tidak dapat menentukan apakah dan dalam kondisi sub-koneksi ditulis atau tidak, jadi kami menambahkan 1 = 1. Dan di mana kita hanya bisa menilai apakah itu harus ditambahkan.
<pilih id = "selectJikeUserwhere" resultType = "jikeUser" parameTerType = "jikeuser"> pilih * dari jikeuser <where> <if test = "username! = null"> dan nama pengguna seperti #{username} </if> <if test = "id! = null"> id = #{if username} </if> </if test = "id = null"> id = #{if {if> </if test = "Tugas Tag Intelligent yang ditetapkan akan secara otomatis menghapus kelebihan ","
<update id = "updateJikeUserset" parameTerType = "jikeUser"> update jikeuser <set> <if test = "username! = null"> username =#{username}, </if> <if test = "password! = null"> password =#{{kata sandi}, </if> </set> where id =#{if> {if> {if> {if> {if>Data sebelum operasi:
beroperasi:
Hasil Operasi:
<update id = "updateUsertrim" parameTerType = "jikeuser"> update jikeuser <trim prefix = "set" suffixoverrides = "," suffix = "where id = #{id}"> <if test = "userName! = null dan username! = '' '"> userName = #{nol}, null dan null dan USERNAME! "> kata sandi =#{kata sandi}, </if> </ trim> </dendate>tag foreach
Biasanya digunakan untuk permintaan loop atau penugasan loop
<SELECT ID = "SELECTJIKEUSERFOREACH" RRESSTYPE = "JIKEUSER" PARAMETERTYPE = "LIST"> SELECT * dari JikeUser <Where> ID di <freeach item = "item" index = "index" collection = "list" open = "(" puparator = "," close = ")">#{item} </foreach> </where> </where>tes:
Di atas adalah penjelasan terperinci dari SQL dinamis Mybatis IF, pilih, di mana, set, trim, dan contoh tag foreach yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!