Mybatis adalah kerangka kerja kegigihan Java yang mengaitkan objek dengan prosedur tersimpan atau pernyataan SQL melalui deskriptor XML atau anotasi.
MyBatis adalah perangkat lunak gratis yang didistribusikan di bawah Apache Licence 2.0 dan merupakan versi cabang dari IBATIS 3.0. Tim pemeliharaannya juga termasuk anggota startup Ibatis.
Tidak seperti kerangka pemetaan objek-relasional lainnya, MyBatis tidak mengaitkan objek Java dengan tabel basis data, melainkan metode Java dengan pernyataan SQL. MyBatis memungkinkan pengguna untuk mengambil keuntungan penuh dari berbagai fungsi basis data, seperti prosedur tersimpan, tampilan, berbagai kueri kompleks, dan fitur eksklusif dari suatu basis data. Jika Anda ingin beroperasi pada database lama, database tidak teratur, atau memiliki kontrol penuh atas eksekusi SQL, MyBatis adalah pilihan yang baik.
Dibandingkan dengan JDBC, MyBatis menyederhanakan kode yang relevan: pernyataan SQL dapat dieksekusi dalam satu baris kode. MyBatis menyediakan mesin pemetaan yang secara deklaratif memetakan hasil eksekusi pernyataan SQL dengan pohon objek. Pernyataan SQL dapat dihasilkan secara dinamis dengan menggunakan bahasa ekspresi seperti XML bawaan, atau menggunakan plug-in yang terintegrasi dengan kecepatan Apache.
Mybatis terintegrasi dengan Spring Framework dan Google Guice, yang menyelamatkan pengembang dari masalah ketergantungan.
Mybatis mendukung caching data deklaratif. Ketika pernyataan SQL ditandai sebagai "dapat di -cache", semua data yang diperoleh dari database ketika pertama kali dieksekusi akan disimpan dalam cache. Ketika pernyataan ini dieksekusi di masa depan, hasilnya akan dibaca dari cache alih -alih memukul database lagi. MyBatis menyediakan implementasi cache berbasis Java Hashmap secara default, serta konektor default untuk koneksi dengan Oscache, Ehcache, Hazelcast, dan memcached. Mybatis juga menyediakan API untuk implementasi cache lainnya.
Poin penting
Setelah belajar selama periode ini, proses utama untuk mybatis tidak dapat menjadi langkah berikut
1. Dapatkan sessionFactory dari file konfigurasi XML, dan kemudian hasilkan sesi yang sesuai dari sessionFactory.
2. Gunakan objek sesi untuk menyelesaikan operasi CRUD yang sesuai (penambahan, penghapusan, modifikasi dan kueri) dan kontrol transaksi yang sesuai pada data bisnis.
3. Tutup sesi yang sesuai setelah digunakan untuk menghindari konsumsi sumber daya yang berlebihan
4. Gunakan file XML Mapper yang sesuai untuk mengonfigurasi operasi peta yang sesuai antara JavaBean entitas bisnis dan tabel database.
Persiapan sebelum perang:
1. Lingkungan Pengembangan Eclipse Javaee IDE, JDK 1.6, Database MySQL 5.5
2. Unduh paket JAR yang sesuai untuk digunakan nanti
Mybatis-3.2.3.zip setelah dekompresi, keluarkan mybatis-3.2.3.jar, => unduhan alamat: http://code.google.com/p/mybatis/ (paket inti mybatis)
mybatis-generator-core-1.3.1.jar => alamat unduh: http://code.google.com/p/mybatis/wiki/generator (MyBatis secara otomatis menghasilkan paket file konfigurasi)
mysql-connector-java-5.1.26-bin.jar => alamat unduhan: http://dev.mysql.com/downloads/connector/j/ (paket driver JDBC MySQL)
Langkah Konstruksi
Selanjutnya, Anda dapat membuat proyek proyek Java yang disebut mybatisdemo di bawah gerhana, dan membuat struktur paket dan struktur folder yang sesuai seperti yang ditunjukkan pada gambar di bawah ini, di mana config dan mapper masing -masing folder.
Program Demo Runner yang sesuai dan objek Javabean disimpan di bawah paket David.mybatis.demo dan paket David.mybatis.model, dan paket toples pihak ketiga yang baru diunduh disimpan dalam folder Lib.
Setelah membuat direktori berikut, kami dapat menambahkan paket JAR yang sesuai seperti yang ditunjukkan pada gambar di bawah ini
Setelah selesai, jalankan SQL berikut untuk menetapkan struktur tabel yang diperlukan untuk demo, termasuk 3 tabel, pengunjung (tabel pengunjung), situs web (tabel situs web), dan saluran (tabel saluran)
/*Create Visitor*/CREATE TABLE Visitor( Id INT(11) NOT NULL AUTO_INCREMENT, Name VARCHAR(1000) NOT NULL, Email VARCHAR(1000) NOT NULL, Status INT NOT NULL DEFAULT 1, CreateTime DateTime, PRIMARY KEY(Id))/*Create website table*/CREATE TABLE Website( Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(1000) NOT NULL, VisitorId INT REFERENCES Pengunjung (id), status int not null default 1, createTime datetime)/*Buat tabel saluran*/buat saluran tabel (id int nol kunci primer auto_increment, name varchar (1000) bukan nol, situs web referensi int referensi (id), status int null default 1, createTime datetime)
Setelah semua ini selesai, kita akan mulai melakukannya ~
Seperti disebutkan di awal, semua konfigurasi MyBatis berasal dari file konfigurasi XML. Kita perlu membuat file konfigurasi baru bernama mybatis_demo_config.xml di folder konfigurasi. Hal ini adalah salah satu operasi inti yang perlu kita operasikan nanti.
Saat mengkonfigurasi file ini, Anda harus memperhatikan elemen -elemen di simpul <Configuration> yang memiliki persyaratan pesanan hierarkis dan tidak dapat diubah sesuka hati. Jika tidak, pengecualian akan terjadi saat memuat file konfigurasi XML, menghasilkan operasi selanjutnya yang gagal.
Untuk deskripsi simpul tertentu, Anda dapat memeriksa http://mybatis.github.io/mybatis-3/zh/configuration.html#. Di sini kita hanya berbicara tentang node yang lebih umum digunakan, tipealiase, lingkungan, pemetaan.
1. Typealiases => Node alias. Anda dapat mengatur properti node ini sehingga alias ini digunakan sebagai ganti nama yang sepenuhnya memenuhi syarat dalam file konfigurasi.
Misalnya <typealias type = "david.mybatis.model.visitor" alias = "pengunjung" />
2. Lingkungan => Node Lingkungan, Mengkonfigurasi Informasi Terkait Koneksi Data
3. Mappers => Konfigurasikan pernyataan pemetaan SQL.
Konfigurasi paling sederhana adalah sebagai berikut:
<?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> <typeAliases> <typeAlias Type = "david.mybatis.model.visitor" alias = "pengunjung" /> </yypealiases> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <TransactionManager type = "jdbc"> < /transactionManager> <DataSource type = "pooled"> <Propert Name = "poord =" motife "Malue." MOLITE. "MO." ? UseUnicode = true & characterencoding = utf8 untuk mendukung penyisipan Cina-> <nama properti = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis_db?" Name = "" Name "" "Name" "Name =" "" "" "" "" "" "" "" "" "" name "name =" "" " /> </dateSource> </vervence> </survirments> <mappers> <mapper resource = "mapper/vistaMappers.xml"/> </mappers> </configuration>
Buat kelas baru yang disebut mybatisutils di bawah paket david.mybatis.demo, yang menyimpan metode untuk mendapatkan sqlsession dan menutup sqlsession, yang diekstraksi untuk memfasilitasi beberapa penggunaan kembali.
paket david.mybatis.demo; import java.io.inputstream; impor org.apache.ibatis.io.Resources; impor org.apache.ibatis.session.sqlsession; import org.apache.ibatis.Sessies.sqlsessiesFactory; import org.apache.apache.iBatis.Sesesies david.mybatis.model.crud_enum; kelas publik mybatisutils {private static final string config_path = "config/mybatis_demo_config.xml"; /** Dapatkan tautan akses basis data*/ public static SQLSession getSQLSession () {SQLSession session = null; coba {inputStream stream = Resources.GetResourCeAsstream (config_path); // Lingkungan basis data yang sesuai dapat dibaca sesuai dengan lingkungan yang sesuai yang dikonfigurasi // SQLSessionFactory Factory = SQLSessionFactoryBuilder baru (). Build (// Stream, "Development"); SQLSessionFactory factory = SQLSessionFactoryBuilder baru () .build (stream); session = factory.opensession (); } catch (Exception e) {// todo: handle Exception E.PrintStackTrace (); } sesi kembali; } / * * Dapatkan tautan akses basis data * / public static void closeSession (sesi sqlSession) {session.close (); } /** Pesan Rekaman Operasi Pengembalian* / Public Static Void Showmessages (tipe crud_enum, int count) {switch (type) {case add: System.out.println ("tambahkan" + count + "Record."); merusak; hapus kasus: System.out.println ("Dihapus" + Hitung + "Catatan."); merusak; Pembaruan Kasus: System.out.println ("Diperbarui" + Hitung + "Catatan."); merusak; kueri kasus: System.out.println ("Cocok" + Hitung + "Records."); merusak; Daftar Kasus: System.out.println ("Total" + Count + "Records."); merusak; default: break; }}}Buat kelas baru bernama pengunjung di bawah paket David.mybatis.model untuk menggunakannya sebagai yang sesuai atau pemetaan.
Paket david.mybatis.model; import java.text.simpledateFormat; import java.util.date; pengunjung kelas publik {private int id; nama string pribadi; email string pribadi; status int pribadi; createTime tanggal pribadi; pengunjung publik () {// TODO Konstruktor yang dihasilkan secara otomatis Stub createTime = new Date (); } pengunjung publik (nama string, string email) {this.name = name; this.email = email; this.status = 1; this.createTime = new Date (); } public int getId () {return id; } public void setName (name string) {this.name = name; } public string getName () {return name; } public void seteMail (string email) {this.email = email; } public String geteMail () {return email; } tanggal publik getCreateTime () {return createTime; } @Override Public String ToString () {// TODO Metode yang dihasilkan otomatis Stub return string.Format ("{id: %d, name: %s, createTime: %s}", id, name, new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"). Format (creatime); }}Buat vis vis Visitormapper.xml baru di bawah paket david.mybatis.demo untuk memetakan pernyataan SQL yang sesuai.
Di sini Anda harus mencatat bahwa namespace => david.mybatis.demo.ivisitoroperation harus dikaitkan dengan nama file aktual di bawah paket yang sesuai. Jika tidak, file pemetaan yang sesuai tidak berhasil dimuat.
<mapper namespace = "david.mybatis.demo.ivisitorOperation"> <pilih id = "basicQuery" parameTerType = "int" resultType = "pengunjung"> Pilih * dari pengunjung di mana id =#{id} dan status> 0 pesanan oleh id </pilih> </mapper> Selanjutnya jalankan program berikut
public static void testBasicQuery (int id) {SQLSession session = mybatisutils.getsqlsession (); coba {pengunjung pengunjung = (pengunjung) session.selectone ("david.mybatis.demo.ivisitoroperation.basicquery", id); Mybatisutils.closession (sesi); System.out.println (pengunjung); } catch (exception e) {// todo: handle exception}} Hasil eksekusi paling sederhana keluar
Ini adalah helloword dari seri mybatis ~