1. Kueri
Selain kueri satu catatan, di sini kami mencoba untuk menanyakan satu set catatan.
Tambahkan metode berikut ke antarmuka iUsermapper:
Daftar <User> getUsers (nama string);
Tambahkan user.xml:
<resultMap type = "user" id = "userlist"> <!-type adalah nama lengkap atau alias dari kelas yang mengembalikan elemen daftar-> <id kolom = "id" properti = "id" /> <column hasil = "name" properti = "name" /> <hasil kolom = "usia" = "usia" /<hasil kolom hasil = "name" "ALAMAT =" ALAMAT = "ALAMAT /> <" ALAMAT = "ALAMAT /ADVADS =" ALAMAT = "ALAMAT =" ALAMES = "ADVEST =" ALLAMES = "ADVENT =" ADVEST = "ADVACH =" ADVEST = "ADVEST =" ADVERS = "ADVEST =" ADVERS = "ADVERS =" ALADIP = "ALADIR" parameterType = "string" resultMap = "userList"> <!-RACKMAP adalah daftar pengguna yang ditentukan di atas-> pilih * dari `user` di mana nama seperti #{name} </pilih>Metode Uji:
@Test public void queryListTest () {SQLSession sesion = sqlSessionFactory.opensession (); coba {iusermapper mapper = session.getMapper (iusermapper.class); Daftar <User> user = mapper.getUsers ("%a%"); // % mewakili karakter apa pun dalam SQL. untuk (pengguna pengguna: pengguna) {log.info ("{}: {}", user.getName (), user.getAddress ()); }} akhirnya {session.close (); }} Jika kueri tabel konjungsi dikembalikan, objek senyawa perlu diproses dengan kata kunci asosiasi.
Jika pengguna menerbitkan artikel, setiap pengguna dapat mempublikasikan beberapa artikel, dan mereka memiliki hubungan satu-ke-banyak.
(1) Buat tabel artikel dan masukkan data uji:
- jatuhkan tabel jika ada tabel drop jika ada `artikel`; - Buat tabel bernama 'artikel' Buat tabel `artikel` (` id` int not null auto_increment, `user_id` int not null,` title` varchar (100) bukan nol, `konten` teks bukan nol, kunci primer (` id`)) engine = innodb auto_increment = 1 default charset = UTF8; - Tambahkan beberapa catatan tes Sisipkan ke `artikel` nilai ('1', '1', 'title1', 'content1'), ('2', '1', 'title2', 'content2'), ('3', '1', 'title3', 'content3'), ('4', '1', 'title', 'content4');(2) com.john.hbatis.model.article class:
artikel kelas publik {private int id; Pengguna Pribadi; judul string pribadi; konten string pribadi; // getters dan setter dihilangkan}(3) Tambahkan iusermapper:
Daftar <Artikel> getArticlesByUserId (int id);
(4) Tambahkan user.xml:
<resultMap type = "com.john.hbatis.model.article" id = "articlelist"> <id kolom = "a_id" properti = "id" /> <column hasil = "title" properti = "title" /> <hasil kolom = "content" properti = "konten" /> <asosiasi properti = "User" User "ID" USER "> <! properti = "id" /> <colom hasil = "name" properti = "name" /> <colom hasil = "alamat" properti = "alamat" /> < /asosiasi> < /resultMap> <pilih id = "getarticlesbyuserid" parameterType = "int" o. o.dress = "o.dress a. a.user_id = u.id dan u.id =#{id} </pilih>(5) Metode Uji:
@Test public void getArticleSbyUserIdtest () {SQLSession sesi = sqlSessionFactory.opensession (); coba {iusermapper mapper = session.getMapper (iusermapper.class); Daftar <Artikel> artikel = mapper.getArticleSbyUserId (1); untuk (artikel artikel: artikel) {log.info ("{} - {}, penulis: {}", artikel.gettitle (), artikel.getContent (), artikel.getUser (). getName ()); }} akhirnya {session.close (); }} Terlampir:
Selain mendefinisikan pemetaan bidang dan atribut dalam tag Association, Anda juga dapat menggunakan kembali hasil Pengguna:
<asosiasi properti = "pengguna" javatype = "user" resultMap = "userlist" />
2. Ditambahkan
Tambahkan metode berikut ke antarmuka iUsermapper:
int adduser (pengguna pengguna);
User.xml tambahkan:
<masukkan id = "addUser" parameTerType = "user" useGeneratedKeys = "true" keyproperty = "id"> <!- UsegeneratedKeys Menentukan kunci utama yang Mybatis menggunakan database untuk secara otomatis menghasilkan dan mengisinya pada properti yang ditentukan oleh KeyProperty. Jika tidak ditentukan, objek return tidak bisa mendapatkan nilai yang dihasilkan -> masukkan ke dalam pengguna (nama, usia, alamat) nilai (#{name},#{usia},#{alamat}) </masukkan>Metode Uji:
@Test public void addusertest () {user user = pengguna baru ("lucy", 102, "happy district"); Sesi sqlsession = sqlSessionfactory.opensession (); coba {iusermapper mapper = session.getMapper (iusermapper.class); int terpengaruh = mapper.adduser (pengguna); session.commit (); // default tidak secara otomatis dikirimkan. Call session.getConnection (). GetAutocommit () untuk melihat log.info ("{} catatan baru dimasukkan dengan sukses yang id: {}", terpengaruh, user.getid ()); } akhirnya {session.close (); }}3. UPDATE
Metode Penambahan Antarmuka:
int updateUser (pengguna pengguna);
User.xml tambahkan:
<update id = "updateUser" parameTerType = "user"> update `user` atur name =#{name}, usia =#{usia}, alamat =#{alamat} di mana id =#{id} </update>Metode Uji:
@Test public void updateUserTest () {SQLSession session = sqlSessionFactory.opensession (); coba {iusermapper mapper = session.getMapper (iusermapper.class); Pengguna pengguna = mapper.getUserbyId (8); user.setAddress ("Distrik yang puas"); int terpengaruh = mapper.updateUser (pengguna); // Selain atribut yang akan dimodifikasi, atribut lain dari pengguna juga harus ditetapkan, jika tidak atribut ini akan diperbarui oleh database ke nilai awal (null atau 0, dll.). Anda dapat menanyakannya terlebih dahulu, tetapi ini akan meningkatkan interaksi yang tidak perlu dengan database. Kondisi berikut dapat menghindari masalah ini. log.info ("jumlah yang terpengaruh: {}", terpengaruh); session.commit (); } akhirnya {session.close (); }}4. Hapus
Metode Penambahan Antarmuka:
int deleteUser (int id);
User.xml tambahkan:
<delete id = "deleteUser" parameTerType = "int"> hapus dari `user` di mana id =#{id} </delete>Metode Uji:
@Test public void deleteUserTest () {SQLSession sesi = sqlSessionFactory.opensession (); coba {iusermapper mapper = session.getMapper (iusermapper.class); int terpengaruh = mapper.deleteUser (8); log.info ("jumlah yang terpengaruh: {}", terpengaruh); session.commit (); } akhirnya {session.close (); }}