1. Pengantar Mybatis
Mybatis adalah kerangka kerja lapisan kegigihan yang sangat baik yang mendukung pertanyaan SQL biasa, prosedur tersimpan dan pemetaan lanjutan.
Mybatis menghilangkan pengaturan manual hampir semua kode dan parameter JDBC dan enkapsulasi pencarian dari set hasil.
Mybatis dapat menggunakan XML sederhana atau anotasi untuk konfigurasi dan pemetaan mentah, antarmuka pemetaan dan pojos Java (objek java tua biasa) ke dalam catatan dalam database.
JDBC -> DBUTILS (Auto -Encapsulation) -> MyBatis -> Hibernate
Mybatis menulis SQL di XML dan kemudian mengakses database.
2. Mulailah dengan mybatis
2.1. Buat proyek Java baru
Tambahkan Jar Driver MyBatis dan MySQL: Mybatis-3.1.1.jar, MySQL-Connector-Java-5.1.7-Bin.jar
2.2. Buat tabel baru
Buat database mybatis; gunakan mybatis; buat pengguna tabel (id int primer auto_increment, name varchar (20), usia int); masukkan ke dalam nilai pengguna (nama, usia) ('tom', 12); masukkan ke dalam nilai pengguna (nama, usia) ('jack', 11);2.3. Tambahkan file konfigurasi mybatis conf.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype Configuration Public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration<" config.dtd"> <configation>< "configry>" config.dtd"> " id = "Development"> <TransactionManager type = "jdbc" /> <datasource type = "pooled"> <properti name = "driver" value = "com.mysql.jdbc.driver" /> <name properti = "name" name = "mysql: // localhost: 330 /myl" name = "" name = "" "" "" "" "name =" "" "" "" "" "" name = "" "" name = "kata sandi" value = "root"/> </dateSource> </urvepert> </preensment> </configuration>
2.4. Tentukan kelas entitas yang sesuai dengan tabel
Pengguna kelas publik {private int id; nama string pribadi; private int age; // get, atur Metode}2.5. Tentukan file pemetaan SQL usermapper.xml yang mengoperasikan tabel pengguna
<? Xml Version = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper namespace = "com.atguigu.mybatis_test.test1.usermapper"> <pilih id = "getUser" parameTerType = "int" resultType = "com.atguigu.mybatis_test.test1.user"> Pilih * dari pengguna di mana id =#{id} </select.test1.user "2.6. Daftarkan file usermapper.xml di file conf.xml
<mappers> <mapper resource = "com/atguigu/mybatis_test/test1/usermapper.xml"/> </pappers>
2.7. Kode Tes Penulisan: Jalankan Pernyataan Pilih yang Ditentukan
tes kelas publik {public static void main (string [] args) melempar ioException {string resource = "conf.xml"; // muat file konfigurasi mybatis (ini juga memuat file pemetaan yang terkait) pembaca pembaca. SQLSessionFactoryBuilder (). Build (pembaca); // Buat sesi SQLSessionQLSession yang dapat mengeksekusi SQL dalam file pemetaan = sessionfactory.opensession (); // pemetaan SQL identifikasi string Pernyataan = "com.atguigu.mybata.bean.usermapper"+. " sqluser user = session.selectone (pernyataan, 1); System.out.println (pengguna);}}3. Operasikan CRUD dari tabel Pengguna
3.1.xml Implementasi
3.1.1. Tentukan file XML Pemetaan SQL:
<insert id = "insertUser" parameTerType = "com.atguigu.iatis.bean.user"> Sisipkan ke pengguna (name, usia) value (#{name},#{usia}); </sert> <hapus id = "deleteUser" ParameterType = "int"> hapus dari pengguna di mana id =#{deleteUser "ParameterType =" int "> hapus dari pengguna di mana id =#{{{parameterpareuser" ParameTerping = "int"> Delete dari pengguna di mana id =#{{{deleteUser "ParameTerType =" int " parameterType = "com.atguigu.iatis.bean.user"> UPDATE PENGGASA PENGGAS NAME =#{name}, usia =#{usia} di mana id =#{id} </update> <select id = "selectUser" Parameterpe = "int" hanchtype = "com.atguigu.iBatis.user" ParameTerpe = "int" int "com.atatguigu id = "selectAllUsers" resultType = "com.atguigu.iatis.bean.user"> pilih * dari pengguna </pilih>3.1.2. Daftarkan file pemetaan ini di config.xml
<mapper Resource = "com/atguigu/ibatis/bean/usermapper.xml"/>
3.1.3. Dipanggil di Dao
pengguna publik getUserbyId (int id) {sqlSession session = sessionfactory.opensession (); user user = session.selectone (URI+". SelectUser", id); return user;}3.2. Implementasi Anotasi
3.2.1. Tentukan antarmuka untuk pemetaan SQL
public interface UserMapper {@Insert("insert into users(name, age) values(#{name}, #{age})")public int insertUser(User user);@Delete("delete from users where id=#{id}")public int deleteUserById(int id);@Update("update users set name=#{name},age=#{age} where id=#{id}")public int updateUser (pengguna pengguna);@select ("pilih * dari pengguna di mana id =#{id}") pengguna publik getUserById (int id);@select ("select * from user") Daftar publik <User> getAllUser ();}3.2.2. Daftarkan antarmuka pemetaan ini di konfigurasi
<mapper/>
3.2.3. Dipanggil di Dao
Pengguna publik getUserbyId (int id) {SQLSession session = sessionFactory.opensession (); usermapper mapper = session.getmapper (userMapper.class); pengguna pengguna = mappper.getUserbyId (id); kembalikan pengguna;}4. Beberapa tempat yang dapat dioptimalkan
4.1. Konfigurasi untuk menghubungkan ke database dapat ditempatkan dalam file properti secara terpisah.
## db.properties<br><properties resource="db.properties"/><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" />4.2. Tentukan Alias untuk Kelas Entitas dan Sederhanakan Referensi dalam Pemetaan SQL File XML
<yypealiases> <typealias type = "com.atguigu.iatis.bean.user" alias = "_ user"/> </yypealiases>
4.3. Anda dapat menambahkan file konfigurasi log4j di bawah SRC untuk mencetak informasi log
1. Tambahkan toples:
log4j-1.2.16.jar
2.1. log4j.properties (Metode 1)
LOG4J.PROPERTIES, LOG4J.ROOTLOGGER = DEBUG, CONSOLE#CONSOLELOG4J.APPENDER.CONSOLE = org.apache.log4j.consoleAppenderLog4j.Appender.console.layout = orgache.log4j.patternlayoutlaylog4j.apping.apper.apper. %-5p [ %c] - %m%nlog4j.logger.java.sql.resultset = infolog4j.logger.org.apache = infolog4j.logger.java.sql.connection = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql
2.2. log4j.xml (Metode 2)
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype Log4j: Sistem Konfigurasi "LOG4J.DTD"> <log4j: konfigurasi xmlns: log4j = "http://jakarta.apache.org/log4j/"> <"http://jakarta.apache. value = "%-5p%d {mm-dd hh: mm: ss, ss}%m (%f:%l) /n" /> < /layout> < /appender> <logger name = "java.sql"> <level value = "debug" /> < /logger> <logger name = "org.apache.apache.apache.apache.apache.apache.apache.apache" /debug " /> < /logger> <Logger name =" org.apache.apache.apache.apache /> </togger> <soot> <level value = "debug" /> <appender-ref ref = "stdout" /> < /root> < /log4j: configuration>5. Menyelesaikan konflik antara nama lapangan dan nama atribut kelas entitas
5.1. Siapkan meja dan bidang
CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VARCHAR(20),order_price FLOAT);INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);5.2. Tentukan kelas entitas
pesanan kelas publik {private int id; private string orderno; private float harga;}5.3. Menerapkan kueri GetOrderById (ID):
Metode 1: Tentukan alias dalam pernyataan SQL
<pilih id = "selectorder" parameTerType = "int" resultType = "_ order"> pilih ID order_id, order_no orderno, order_price harga dari pesanan di mana order_id =#{id} </pilih>Metode 2: Melalui <RancesMap>
<pilih id = "selectorderResultMap" parameTerType = "int" resultMap = "orderResultMap"> pilih * dari pesanan di mana order_id =#{id} </select> <resultMap type = "_ _ ord" order = "ordeReSultMap"> <id properti = "id colum =" order_id "/> <" orderReRing = "colume =" colume = "colume =" colume = "colume =" colume = "order" colum = "order =" orderner = "order" colume = "order" colume = "ID" ID "ID" ID "ID" properti = "harga" kolom = "order_price"/> <result properti = "price" column = "order_price"/> <rancesmap>6. Implement kueri tabel asosiasi
6.1. Asosiasi satu-ke-satu
6.1.1. Mengusulkan persyaratan
Informasi kelas kueri berdasarkan ID kelas (informasi dengan guru)
6.1.2. Buat tabel dan data
Buat Table Teacher (T_ID int Key Primary Auto_increment, t_name varchar (20)); Buat kelas tabel (c_id int utama auto_increment, c_name varchar (20), teacher_id int); ubah kelas tabel tambahkan kendala fk_teacher_id kunci asing (guru_id) guru (t_id); Masukkan ke nilai guru (t_name) ('ls1'); masukkan ke nilai guru (t_name) ('ls2'); masukkan ke kelas (c_name, guru_id) nilai ('bj_a', 1); masukkan ke dalam kelas (c_name, guru_id) nilai ('bj_b', 2);6.1.3. Tentukan kelas entitas:
guru kelas publik {private int id; name string pribadi;} kelas kelas publik {private int id; nama string pribadi; guru guru privat;}6.1.4. Tentukan file pemetaan SQL classmapper.xml
<!--Method 1: Nested results: Use nested result maps to process a subset of duplicate joint results SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1--><select id="getClass3" parameterType="int" resultMap="ClassResultMap3">select * from class c, teacher t,student s where c.teacher_id = t.t_id dan c.c_id = s.class_id dan c.c_id = 1-> <pilih id = "getClass3" parameterType = "int" resultMap = "classResultMap3"> Select * dari kelas C, guru t, siswa di mana c.teacher_id = t.t_id dan c.c_id = s.ids = s. dan student s di mana c.teacher_id = t.t_id dan c.c_id = s.id = c.c_id =#{id} </select> <resultMap type = "_ class" id = "classResultMap3"> <id properti = "id" kolom = "c_id"/> <properti hasil = "nama" kolom = "c_id"/> <Properti Asosiasi = "Teacher" Kolom = "Teacher_id" Javatype = "Id" _ _ "Properti" Properti = "Teacher" = "Teacher_ID" JAVATYPE = "ID" _ _ "> <" Properti "Properti =" Teacher "=" Teacher_id "javatype =" ID "_ _ _" Properti = "Teacher =" Teacher_id "ID" ID "ID" ID "<" ID "" ID "" ID "KOLOMPER" TURUR "TOURTER" ID "ID" ID "ID" ID "ID" _ " kolom = "t_name"/> <properti result = "name" column = "t_name"/> </association> <!-ofType menentukan jenis objek dalam koleksi siswa-> <collection properti = "Siswa" ofType = "_ Student"> <id Properti = "id" kolom = "S_ID"/<hasil Hasil Properti = "Name": "Name =" S_NOME/ID "S_ID"/</> </name "name" name: "name" name "name" name "name" name "name" name "name" name "name" name " Kueri: Mengembalikan tipe kompleks yang diharapkan dengan mengeksekusi pernyataan pemetaan SQL lain Pilih * dari kelas di mana c_id = 1; pilih * dari guru di mana t_id = 1 // 1 adalah nilai guru_id yang diperoleh dengan kueri sebelumnya Select * dari siswa di mana class_id = 1 // 1 adalah nilai bidang C_ID yang diperoleh dengan kueri pertama -> <pilih id = "Gets4 adalah Klaps4." resultMap = "classResultMap4"> pilih * dari kelas di mana c_id =#{id} </selection> <resultMap type = "_ class" id = "classResultMap4"> <id properti = "id" column = "c_id"/> <hasil hasil = "nama" kolom = "c_name"/> <Property "Columure =" Columny = "JAG" COLUMN = "JAV =" C_NAME "/> <Property" COLUMER = " SELECT = "GETTEACHER2"> </association> <collection properti = "siswa" ofType = "_ student" kolom = "c_id" select = "getStudent"> </colly> </resultMap> <pilih id = "getTeacher2 ParameterType =" int "resultType =" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ id = "getStudent" parameTerType = "int" resultType = "_ student"> SELECT S_ID ID, nama S_NAME dari siswa di mana class_id =#{id} </pilih>6.1.5. Tes
@Testpublic void testOO() {SqlSession sqlSession = factory.openSession();Classes c = sqlSession.selectOne("com.atguigu.day03_mybatis.test5.OOMapper.getClass", 1);System.out.println(c);}@Testpublic void testOO2() {SqlSession sqlSession = factory.opensession (); kelas c = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass2", 1); System.out.println (c);}6.2. Asosiasi satu-ke-banyak
6.2.1. Mengusulkan persyaratan
Meminta informasi kelas yang sesuai menurut ClassID, termasuk siswa dan guru
6.2.2. Buat tabel dan data:
CREATE TABLE student(s_id INT PRIMARY KEY AUTO_INCREMENT,s_name VARCHAR(20),class_id INT);INSERT INTO student(s_name, class_id) VALUES('xs_A', 1);INSERT INTO student(s_name, class_id) VALUES('xs_B', 1);INSERT INTO student(s_name, class_id) VALUES('xs_C', 1);INSERT INTO student(s_name, nilai class_id) ('xs_d', 2); masukkan ke dalam nilai siswa (s_name, class_id) ('xs_e', 2); masukkan ke dalam nilai siswa (s_name, class_id) ('xs_f', 2);6.2.3. Tentukan kelas entitas
siswa kelas publik {private int id; name string pribadi;} kelas kelas publik {private int id; nama string pribadi; guru guru privat; daftar pribadi <spulher> siswa;}6.2.4. Tentukan file pemetaan SQL classmapper.xml
<!--Method 1: Nested results: Use nested result maps to process a subset of duplicate joint results SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1--><select id="getClass3" parameterType="int" resultMap="ClassResultMap3">select * from class c, teacher t,student s where c.teacher_id = t.t_id dan c.c_id = s.class_id dan c.c_id = 1-> <pilih id = "getClass3" parameterType = "int" resultMap = "classResultMap3"> Select * dari kelas C, guru t, siswa di mana c.teacher_id = t.t_id dan c.c_id = s.ids = s. dan student s di mana c.teacher_id = t.t_id dan c.c_id = s.id = c.c_id =#{id} </select> <resultMap type = "_ class" id = "classResultMap3"> <id properti = "id" kolom = "c_id"/> <properti hasil = "nama" kolom = "c_id"/> <Properti Asosiasi = "Teacher" Kolom = "Teacher_id" Javatype = "Id" _ _ "Properti" Properti = "Teacher" = "Teacher_ID" JAVATYPE = "ID" _ _ "> <" Properti "Properti =" Teacher "=" Teacher_id "javatype =" ID "_ _ _" Properti = "Teacher =" Teacher_id "ID" ID "ID" ID "<" ID "" ID "" ID "KOLOMPER" TURUR "TOURTER" ID "ID" ID "ID" ID "ID" _ " kolom = "t_name"/> <properti result = "name" column = "t_name"/> </association> <!-ofType menentukan jenis objek dalam koleksi siswa-> <collection properti = "Siswa" ofType = "_ Student"> <id Properti = "id" kolom = "S_ID"/<hasil Hasil Properti = "Name": "Name =" S_NOME/ID "S_ID"/</> </name "name" name: "name" name "name" name "name" name "name" name "name" name "name" name " Kueri: Mengembalikan tipe kompleks yang diharapkan dengan mengeksekusi pernyataan pemetaan SQL lain Pilih * dari kelas di mana c_id = 1; pilih * dari guru di mana t_id = 1 // 1 adalah nilai guru_id yang diperoleh dengan kueri sebelumnya Select * dari siswa di mana class_id = 1 // 1 adalah nilai bidang C_ID yang diperoleh dengan kueri pertama -> <pilih id = "Gets4 adalah Klaps4." resultMap = "classResultMap4"> pilih * dari kelas di mana c_id =#{id} </selection> <resultMap type = "_ class" id = "classResultMap4"> <id properti = "id" column = "c_id"/> <hasil hasil = "nama" kolom = "c_name"/> <Property "Columure =" Columny = "JAG" COLUMN = "JAV =" C_NAME "/> <Property" COLUMER = " SELECT = "GETTEACHER2"> </association> <collection properti = "siswa" ofType = "_ student" kolom = "c_id" select = "getStudent"> </colly> </resultMap> <pilih id = "getTeacher2 ParameterType =" int "resultType =" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ id = "getStudent" parameTerType = "int" resultType = "_ student"> SELECT S_ID ID, nama S_NAME dari siswa di mana class_id =#{id} </pilih>6.2.5. Tes
@Testpublic void testom () {sqlsession sqlsession = factory.opensession (); kelas c = sqlSession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getclass3", 1); System.out.println (c);@classion); = factory.opensession (); kelas c = sqlSession.selecTone ("com.atguigu.day03_mybatis.test5.oomapper.getClass4", 1); System.out.println (c);}7. SQL Dinamis dan Kueri Fuzzy
7.1. Persyaratan
Menerapkan Pengguna Kueri Multi-Kondisi (nama pencocokan fuzzy, usia antara nilai minimum yang ditentukan dan nilai maksimum).
7.2. Siapkan Database dan Tabel
Buat tabel d_user (id int primer auto_increment, nama varchar (10), usia int (3)); masukkan ke dalam nilai d_user (nama, usia) ('tom', 12); masukkan ke d_user (nama, usia) nilai ('bob', 13); Sisipkan ke D_User (Nama, Usia) Nilai ('jack', 18); 7.3.ConditionUser (Kelas Entitas Bersyarat) Nama String Pribadi; Private Int Minage; Private Int Maxage;7.4. Pengguna Tabel Entitas Kelas
private int id; name string pribadi; private int usia;
7.5.usermapper.xml (file peta)
<? Xml Version = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> namespace = "com.atguigu.day03_mybatis.test6.usermapper"> <pilih id = "getUser" parameterType = "com.atguigu.day03_mybatis.test6.conditionuser" resultType = "com.atguigu.day03_mybatis.user.type. usia> =#{minage} dan usia <=#{maxage} <if test = 'name! = "%null%"'> dan nama seperti#{name} </if> </ pilih> </mapper>7.6.usertest (tes)
Public Class UserTest {public static void main (string [] args) melempar ioException {reader reader = Resources.getResourCeasReader ("conf.xml"); SQLSessionFactory SesionFactory = SQLSessionFactoryBuilder (). Build (reader); SQLSESSION = SQLSESSION = SQLSESSIONSIONAL = SQLSESSIONSIONCORY = SQLSESSIONSIONCORY (). "com.atguigu.day03_mybatis.test6.usermapper.getUser"; Daftar <User> daftar = sqlSession.selectlist (pernyataan, conditionuser baru ("%a%", 1, 12)); System.out.println (daftar);}}Tag SQL Dinamis Tersedia di Mybatis
8. PANGGILAN PROSEDUR YANG STORED
8.1. Membuat permintaan
Query Jumlah pria atau wanita, jika masuk 0, betina sebaliknya laki -laki
8.2. Siapkan tabel basis data dan prosedur tersimpan:
Buat tabel p_user (id int primer auto_increment, name varchar (10), sex char (2)); masukkan ke p_user (nama, jenis kelamin) nilai ('a', "pria"); masukkan ke p_user (name, sex) values ('b', "female"); masukkan ke p_user (nama, jenis kelamin) nilai ('c', "pria"); #Create Prosedur tersimpan (cari jumlah laki -laki atau perempuan, jika yang masuk adalah 0, betina adalah laki -laki) pembatas $ membuat prosedur mybatis.ges_user_count (dalam sex_id int, out user_count int) jika sex uch_e = 0 who count (*) dari mybatis.p_user; Dari mybatis.p_user di mana p_user.sex = 'laki -laki' ke user_count; end if; end $#call Prosedur tersimpan pembatas; set @user_count = 0; hubungi mybatis.ges_user_count (1, @user_count); pilih @user_count;8.3. Buat kelas entitas tabel
Pengguna kelas publik {private string id; nama string pribadi; private string sex;}8.4.usermapper.xml
<mapper namespace = "com.atguigu.mybatis.test7.usermapper"> <!-kueri mendapatkan jumlah pria atau wanita. Jika yang masuk adalah 0, maka wanita sebaliknya laki-laki. id = "getCountMap"> <parameter properti = "sex_id" mode = "di" jdbctype = "integer"/> <parameter properti = "user_count" mode = "out" jdbctype = "integer" // </parameterMap> </mapper>
8.5. Tes
Peta <string, integer> parammap = hashmap baru <> (); parammap.put ("sex_id", 0); session.selectone (pernyataan, parammap); integer usercount = parammap.get ("user_count"); System.out.println (usercount);9. cache mybatis
9.1. Mengerti cache mybatis
Sama seperti kebanyakan kerangka kerja lapisan kegigihan, Mybatis juga memberikan dukungan untuk cache L1 dan L2.
1. Level 1 Cache: Hashmap Cache Lokal Berdasarkan PerpetualCache, ruang lingkup penyimpanannya adalah sesi. Setelah sesi menyiram atau menutup, semua cache dalam sesi akan dihapus.
2. Mekanisme cache sekunder sama dengan cache primer. Secara default, ia juga menggunakan perpetualcache dan penyimpanan hashmap. Perbedaannya adalah bahwa ruang lingkup penyimpanannya adalah mapper (namespace), dan dapat menyesuaikan sumber penyimpanan, seperti ehcache.
3. Untuk mekanisme pembaruan data cache, ketika ruang lingkup tertentu (sesi cache tingkat pertama/namespaces cache tingkat kedua) dilakukan dalam operasi C/U/D, semua cache dalam selects di bawah cakupan ini akan dihapus secara default.
9.2.Mybatis level 1 cache
9.2.1. Permintaan berdasarkan tugas
Permintaan objek catatan pengguna yang sesuai berdasarkan ID.
9.2.2. Siapkan tabel dan data basis data
Buat Tabel C_USER (ID int Key Primary Auto_increment, Name Varchar (20), usia int); masukkan ke dalam nilai C_USER (nama, usia) ('Tom', 12); masukkan ke dalam nilai C_USER (nama, usia) ('jack', 11);9.2.3. Buat kelas entitas tabel
Pengguna kelas publik mengimplementasikan serializable {private int id; nama string pribadi; private int usia;9.2.4.usermapper.xml
<? Xml Version = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper namespace = "com.atguigu.mybatis.test8.usermapper"> <pilih id = "getUser" parameTerType = "int" resultType = "_ cuser"> pilih * dari c_user di mana id =#{id} </ pilih> <update id = "updateAser" ParameType = "{{id} </pilih> <update id =" updateAser "ParameType =" {{id} </silsilah> <update id = "updateAser" parameType = "{{{id} </silsilah> <update id =" update "parameType =" {{{id} </soaleT> usia =#{usia} di mana id =#{id} </update> </mapper>9.2.5. Pengujian
/** Cache Level 1: Artinya, cache tingkat sesi (aktif secara default)*/@testpublic void testCache1 () {sqlSession sesion = mybatisutils.getSession (); string pernyataan = "com.atguigu.mybatis.test8.usermapper.getuser"; userguigu.selSelSe.mybatis.test8.usermapper.getUser "; userser = Sesi); Cache Level 1 akan digunakan secara default*//*user = session.selectone (pernyataan, 1); System.out.println (pengguna);*//*1. Itu pasti sesi yang sama. Jika objek sesi telah ditutup (), tidak mungkin untuk menggunakannya*//*sesi = mybatisutils.getSession (); user = session.selectone (pernyataan, 1); System.out.println (pengguna);*//*2. Kondisi kueri sama*//*user = session.selectone (pernyataan, 2); System.out.println (pengguna);*//*3. Session.clearcache () belum dieksekusi untuk membersihkan cache*//*session.clearcache (); user = session.selectone (pernyataan, 2); System.out.println (pengguna);*//*4. Tidak ada operasi yang telah ditambahkan, dihapus dan dimodifikasi (operasi ini akan membersihkan cache)*//*session.update ("com.atguigu.mybatis.test8.usermapper.updateUser", pengguna baru (2, "pengguna", 23)); user = session.selectone (pernyataan, 2); out.out.out.print "); User = session.selectone (pernyataan, 2); System.out.out.printe)); User = session.selectone (pernyataan, 2); System.out.out.printe)); User = SESSION.SEDECTONE (pernyataan, 2); out.out.oUnt.print"); User = SESSION.SEDECTONE (pernyataan, 2); System.out.out.pas9.3.Mybatis level 2 cache
9.3.1. Tambahkan <cache> di usermapper.xml
<mapper namespace = "com.atguigu.mybatis.test8.usermapper"> <cache/>
9.3.2. Pengujian
/** Tes Level 2 Cache*/@TestPublic void testCache2 () {string pernyataan = "com.atguigu.mybatis.test8.usermapper.getUser"; SQLSession sesi = mybatisutils.getSession (); pengguna pengguna = sesi. 1); sesi.9.3.3. Catatan Tambahan
1. Semua pernyataan pilih dalam file pernyataan pemetaan akan di -cache.
2. Peta Semua Sisipkan, Perbarui, dan Hapus Pernyataan dalam File Pernyataan akan menyegarkan cache.
3. Cache akan diceritakan kembali menggunakan algoritma yang paling tidak baru digunakan (LRU, yang paling tidak baru digunakan).
4. Cache akan disegarkan sesuai dengan interval waktu yang ditentukan.
5. Cache akan menyimpan 1024 objek
<cacheeviction = "fifo" // strategi daur ulang adalah pertama, pertama-keluar flushinterval = "60000" // Waktu refresh otomatis 60ssize = "512" // cache hingga 512 objek referensi readonly = "true" // Baca saja "
10. Integrasi Musim Semi Mybatis
10.1. Tambahkan stoples
【Mybatis】
mybatis-3.2.0.jar
mybatis-spring-1.1.1.jar
log4j-1.2.17.jar
【musim semi】
Spring-aop-3.2.0.release.jar
Spring-beans-3.2.0.release.jar
Spring-Context-3.2.0.release.jar
Spring-core-3.2.0.release.jar
Spring-Expression-3.2.0.release.jar
Spring-jdbc-3.2.0.release.jar
spring-test-3.2.4.release.jar
spring-tx-3.2.0.release.jar
aopalliance-1.0.jar
CGLIB-NODEP-2.2.3.jar
Commons-logging -.1.1.jar
【Paket Driver MySQL】
mysql-connector-java-5.0.4-bin.jar
10.2. Tabel Basis Data
Buat tabel s_user (user_id int auto_increment kunci utama, user_name varchar (30), date user_birthday, user_salary double)
10.3. Kelas Entitas: Pengguna
Pengguna kelas publik {private int id; nama string pribadi; tanggal ulang tahun tanggal pribadi; gaji ganda pribadi; // set, dapatkan metode}10.4.dao Interface: usermapper (xxxmapper)
antarmuka publik usermapper {void save (pengguna pengguna); void update (pengguna pengguna); void delete (int id); user findById (int id); daftar <user> findAll ();}10.5.SQL File Pemetaan: usermapper.xml (nama yang sama dengan antarmuka mengabaikan huruf besar dan huruf besar)
<? Xml Version = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> namespace = "com.atguigu.mybatis.test9.usermapper"> <resultMap type = "user" id = "userResult"> <hasil kolom = "user_id" properti = "id"/> <hasil kolom = "User_name" Properti = "name"/<hasil kolom = "user_birthday" property "" name "/> <hasil kolom =" user_birthday "property"/name = "name"/> <result column = "user_birthday" property "ucmery"/name " kolom = "user_salary" properti = "gaji"/> <resultMap> <!-Dapatkan ID setelah memasukkan data-> <masukkan id = "simpan" keycolumn = "user_id" keyproperty = "id" useGeneratedKeys = "true"> masukkan ke dalam S_USER (user_name, user_birthday, user_salary) value ( #{name}, #{ulang tahun}, #{gaji}) </insert> <update id = "update"> update s_userset user_name = #{name}, user_birthday = #{ulang tahun}, user_name = #{name}, user_birthday = #{ulang tahun}, user_sale = #{name}, user_birthday = #{ulang tahun}, user_sale = #saly = {name}, user_birthday = #{ulang tahun}, User_sale = #saly = name {User_birthday = #{ulang tahun}, User_sale =sary #{id} </barui> <delete id = "delete"> hapus dari s_userwhere user_id = #{id} </delete> <pilih id = "findById" resultMap = "userResult"> dari s_userwhere user_id = "{id} </select> <sfout id =" findAll "hancur diwhere =" {{ID} </Pilih> <Select ID = "FindMap" Usermap = "{{ID} </PILIHAN> <SELECT ID =" FINDOLL " S_USER </SELECT> </Papper>10.6.SPRING Konfigurasi File: beans.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http:/xmlschema" xmlns: p = "http:/xmlspance "xmlns: context =" http://www.springframework.org/schema/context "xmlns: tx =" http://www.springframework.org/schema/tx "xsi: schemalocation =" http: //schema amework.org/schema/beansshttp://www.springframework.org/schema/beans/spring-weans-3.2.xsdhttp://www.springframework.org/schema/context/sprin g-context-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! 1. Data source: DriverManagerDataSource --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value = "jdbc: mysql: // localhost: 3306/mybatis"/> <name properti = "nama pengguna" value = "root"/> <name properti = "kata sandi" value = "root"/> </bean> <!-2. Pabrik SQLSession Mybatis: SQLSessionFactoryBeandataSource / TypealiSespackage-> <bean id = "sqlSessionFactory"> <nama properti = "DataSource" ref = "DataSource" /> <nama properti = "TypealIseSpackage" value = "com.atigu.spring_mybatis2.domain"/> </ bean> <!-3. Mybatis secara otomatis memindai untuk memuat file pemetaan SQL: MappersCannerConfigurersqlSessionFactory/Basepackage-> <bean> <properti nama = "Basepackage" value = "com.atigu.spring_mybatis2.mapper"/> <nama properti = "sqlSessionfactory" red "sqlsession" red "sqlsespory" sqlsession "red" sqlsession "sqlsessies" sqlsession "red" sqlsession " Manajemen Transaksi: DataSourCetransActionManager-> <bean id = "txManager"> <name properti = "DataSource" ref = "DataSource"/> </bean> <!-5. Gunakan transaksi deklaratif-> <tx: transaksi-manager-manager = "txManager"/</bean>
10.7.Mybatis File Konfigurasi: mybatis-config.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"> <baturation> afterpraturasi <! tidak perlu-> <!-Setel file konfigurasi eksternal-> <!-atur nama kategori-> <!-atur lingkungan koneksi database-> <!-Pemetaan file-> </konfigurasi>
10.8. Tes
@Runwith (springjunit4classrunner.class) // Gunakan framework tes springtest @contextConfiguration ("/beans.xml") // muat konfigurasi kelas publik smtest {@autowired // user users userMapper; @testpublic void save () {User = User = User = User = @testpublic void () {User = User = User = User = User = @testpublic. Date ()); user.setname ("mary"); user.setsalary (300); usermapper.save (user); system.out.println (user.getid ());}@testpublic void update () {user user = userMapper.findbyId (2); User.setsalary (2000); {userMapper.delete(3);}@Testpublic void findById() {User user = userMapper.findById(1);System.out.println(user);}@Testpublic void findAll() {List<User> users = userMapper.findAll();System.out.println(users);}}Di atas adalah pengantar cepat untuk mybatis (analisis singkat dan sederhana dan mudah dimengerti) yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!