1. PENDAHULUAN DAN KONFIGURASI MYBATIS+SPRING+MYSQL
1.1 Pengantar Mybatis
Mybatis adalah kerangka kerja lapisan kegigihan yang dapat menyesuaikan SQL, prosedur tersimpan, dan pemetaan lanjutan. Mybatis menghilangkan sebagian besar kode JDBC, pengaturan parameter manual dan pengambilan hasil. MyBatis hanya menggunakan XML dan anotasi sederhana untuk mengonfigurasi dan memetakan tipe data dasar, antarmuka peta, dan POJOS ke catatan database. Dibandingkan dengan solusi ORM "One-Stop" seperti Hibernate dan Apache OJB, Mybatis adalah implementasi ORM "semi-otomatis".
Paket JAR yang perlu digunakan: mybatis-3.0.2.jar (paket inti mybatis). mybatis-spring-1.0.0.jar (dikombinasikan dengan musim semi).
Alamat unduhan:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2mybatis+pegas+konfigurasi sederhana MySQL
1.2.1 Bangun Lingkungan Musim Semi
(1) membuat proyek web Maven;
(2) Tambahkan file kerangka kerja dan konfigurasi;
(3) Tambahkan paket stoples yang diperlukan (Spring Framework, Mybatis, Mybatis-Spring, Junit, dll.) Ke pom.xml;
(4) ubah file konfigurasi web.xml dan spring;
(5) Tambahkan halaman JSP dan pengontrol yang sesuai;
(6) Tes.
Untuk referensi: http://limingnihao.iteye.com/blog/830409. Bangun Proyek SpringMVC dengan Maven dari Eclipse
1.2.2 Membangun database MySQL
Buat database manajemen pemilihan kursus siswa.
Tabel: Tabel Siswa, Tabel Kelas, Tabel Guru, Tabel Kursus, Tabel Kursus Siswa.
Hubungan logis: Setiap siswa memiliki kelas; Setiap kelas sesuai dengan guru kelas; Setiap guru hanya dapat menjadi guru kelas satu kelas;
Gunakan SQL berikut untuk membangun database, pertama -tama buat tabel siswa, dan masukkan data (lebih dari 2 item).
Untuk SQL lebih lanjut, silakan unduh file sumber proyek di Resource/SQL.
/* Buat database*/ buat database student_manager; Gunakan Student_Manager; / ***** Buat tabel Siswa *****/ Buat tabel Student_tbl (Student_id Varchar (255) Kunci utama, Student_name varchar (10) bukan nol, student_sex varchar (10), tanggal student_birthday, class_id varchar (255)); /*Masukkan data siswa*/ masukkan ke dalam student_tbl (student_id, student_name, student_sex, student_birthday, class_id) nilai (123456, 'xxx', 'wanita', '1980-08-01', 121546)
Buat file konfigurasi mysql.properties yang digunakan untuk terhubung ke mySQL.
jdbc.driverclassname = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // localhost: 3306/student_manager? user = root & password = limingnihao & useunicode = true & characterencoding = utf-8
1.2.3 Bangun Lingkungan Mybatis
Pesanannya santai, dan pesanan saat ini adalah karena Anda dapat memodifikasi file tertulis sesedikit mungkin.
1.2.3.1 Buat Kelas Entitas: StudentEntity
StudentEntity kelas publik mengimplementasikan Serializable {private static final long serialversionuid = 3096154202413606831l; Classentity Classentity pribadi; kencan swasta studentbirthday; Private String StudentID; Private String StudentName; Private String Studentsex; Public ClassEntity getClassentity () {return classEntity; } tanggal publik getStudentBirthday () {return studentbirthday; } public String getStudentId () {return studentId; } public String getStudentName () {return studentName; } public String getStudentSex () {return studentsex; } public void setClassEntity (classEntity classEntity) {this.classentity = classEntity; } public void setStudentBirthday (tanggal studentbirthday) {this.studentbirthday = studentBirthday; } public void setStudentId (String StudentId) {this.studentId = studentId; } public void setStudentName (String StudentName) {this.studentName = StudentName; } public void setStudentSex (String StudentSex) {this.studentsex = StudentSex; }} 1.2.3.2 Buat Antarmuka Akses Data
Antarmuka DAO yang sesuai dari kelas siswa: StudentMapper.
Public Interface StudentMapper {Public Studententity Getstudent (String StudentID); Studententity Publik GetStudentAndClass (String StudentID); Daftar Publik <Sahasiswa StudentEntity> getStudentall (); public void Insertstudent (Studententity Entity); public void deletestudent (studententity entity); public void updateestudent (Studententity Entity); }1.2.3.3 Buat File Pernyataan Pemetaan SQL
Kelas Siswa SQL Pernyataan File StudentMapper.xml
Tag Hasil: Pemetaan bidang dan atribut tabel.
Pilih Tag: Query SQL.
<? 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"> <mapper nonpapper = "comybatis-3-mapper.dtd"> <resultMap type = "studentEntity" id = "studentResultMap"> <id properti = "studentId" kolom = "student_id"/> <hasil properti = "studentname" kolom = "student_name"/> <hasil properti = "StudentSex", Studentsex "/> <hasil hasil =" StudentBirthday "columtsex =" Studentsex "/> </" hasil Studentbirthday "columtsex =" poudex_birpy " -> <pilih id = "getStudent" parameTerType = "string" resultType = "studentEntity" resultMap = "studentResultMap"> <! [cdata [pilih * dari student_tbl st di mana st.student_id = #{studentId}]] </pilih> <!-query daftar siswa-> <pilih id = " resultType = "com.Manager.data.model.studentity" resultMap = "studentResultMap"> <! [CDATA [SELECT * from student_tbl]]> </pilih> </mapper> 1.2.3.4 Buat file konfigurasi mybatis mapper
Buat file konfigurasi mybatis di src/main/sumber daya: mybatis-config.xml.
Tipealiases Tag: Berikan alias kelas alias. Kelas Com.Manager.Data.Model.Studentity dapat digunakan sebagai ganti StudentEntity.
Tag Mappers: Muat file pernyataan pemetaan SQL kelas entitas di mybatis.
<?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 alias="StudentEntity" type = "com.Manager.data.model.studentity"/> </yypealiases> <mappers> <mapper resource = "com/manager/data/peta/studermapper.xml"/> </mappers> </konfigurasi>
1.2.3.5 Modifikasi File Konfigurasi Spring
Ini terutama menambahkan kacang kelas produksi SQLSESSION: SQLSESSIONFACTORYBEAN (dalam paket mybatis.spring). Membutuhkan menentukan lokasi file konfigurasi dan sumber data.
Implementasi kacang yang sesuai dengan antarmuka akses data. Dibuat melalui mapperfactorybean. Penting untuk mengeksekusi nama lengkap kelas antarmuka dan referensi ke kacang pabrik SQLSession.
<!-Impor File Konfigurasi Properti-> <konteks: properti-placeHolder location = "classpath: mysql.properties" /> <bean id = "datasource"> <name properti = "driverclassname" value = "$ {jdbc.driverclassname}" /<properti name = "$" $ {$ {$ {{{{{{{{{{{{{{{{{{{{"$ id = "TransactionManager"> <name properti = "DataSource" ref = "DataSource" /> < /bean> <bean id = "sqlSessionFactory"> <name properti = "configlocation" value = "classpath: mybatis-config.xml" /<properti nama = "dATasOrCOTH" oMAPPER = "o) <! <bean id = "studentmapper"> <name properti = "mapperInterface" value = "com.manager.data.studentmapper" /> <name properti = "sqlsessionfactory" ref = "sqlsessionFactory" /> < /bean> Anda juga tidak dapat mendefinisikan mapper bean, menggunakan anotasi:
Tambahkan siswa ke anotasi
@Repository @transactional antarmuka publik StudentMapper {}Kebutuhan yang sesuai adalah menambahkan pemindaian di dispatcher-servlet.xml:
<Bean> <nama properti = "annotationclass" value = "org.springframework.stereotype.repository"/> <name properti = "Basepackage" value = "com.liming.manager"/> <nama properti = "sqlSessionFactory" ref = "sqlSessionFactory"/</bean> </bean> </bean>
1.2.4 Tes Studentmapper
Gunakan tes SpringMVC untuk membuat testController, konfigurasikan tomcat, dan akses halaman index.do untuk pengujian:
@Controller kelas publik testController {@Autowired private studentmapper studentmapper; @RequestMapping (value = "index.do") public void indexPage () {studentEntity entity = studermapper.getstudent ("10000013"); System.out.println ("Name:" + Entity.getStudentName ()); }}Tes dengan Junit:
@Runwith (value = springjunit4classrunner.class) @contextConfiguration (value = "test-servlet.xml") class public studentmappertest {@autowired private classmapper classmapper; @Autowired Private Studentmapper StudentMapper; @Transactional public void getStudentTest () {studententity entity = studermapper.getstudent ("10000013"); System.out.println ("" + entity.getStudentId () + entity.getStudentName ()); Daftar <sahwah StudentEnt> studentList = StudentMapper.getstudentall (); untuk (studententity entityTemp: studentlist) {system.out.println (entitytemp.getstudentName ()); }}} File konfigurasi utama 2.Mybatis
Saat mendefinisikan SQLSessionFactory, Anda perlu menentukan file konfigurasi utama MyBatis:
<bean id = "sqlSessionFactory"> <name properti = "configLocation" value = "classpath: mybatis-config.xml" /> <name properti = "DataSource" ref = "DataSource" /> < /bean>
Sub-tag di bawah konfigurasi dalam konfigurasi mybatis meliputi:
Konfigurasi |-Properti |-Pengaturan | --- Typealiases | --- TypeHandlers | --- ObjectFactory | --- Plugins | --- Lingkungan | --- Lingkungan | --- | ---- | --- TransactionManager | ---- | ---- | __ DataSource | __ Mappers
2.1 Properti Properties
File konfigurasi properti terkait dengan java.properties. Konfigurasikan sumber daya properti untuk menentukan jalur .Properti, dan kemudian konfigurasikan nama dan nilai properti di bawah tag Properties. Anda dapat mengganti nilai properti yang sesuai dalam file .properties.
<!-- Property Replacement--> <properties resource="mysql.properties"> <property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/> <property name="jdbc.url" value="jdbc:mysql://localhost:3306/student_manager"/> <property name="username" value = "root"/> <properti name = "password" value = "limingnihao"/> </properties>
2.2 Pengaturan
Ini adalah langkah penting bagi MyBatis untuk memodifikasi detail proses operasi. Tabel berikut menjelaskan pengaturan, makna, dan nilai default ini.
Pengaturan | menggambarkan | Nilai yang diizinkan | nilai default |
Cacheenabled | Semua cache di bawah file konfigurasi ini secara global hidup/mati secara global. | Benar | PALSU | BENAR |
LazyloadingEnabled | Pengaturan Global Pemuatan Malas. Jika diatur ke 'false', semua yang terkait akan diinisialisasi dan dimuat. | Benar | PALSU | BENAR |
agresivelyzyloading | Saat diatur ke 'benar', objek pemuatan malas dapat dimuat oleh semua properti malas. Kalau tidak, setiap properti dimuat sesuai kebutuhan. | Benar | PALSU | BENAR |
MultipleresultSetsenabled | Izinkan dan jangan mengizinkan satu pernyataan untuk mengembalikan beberapa dataset (tergantung pada persyaratan driver) | Benar | PALSU | BENAR |
Usecolumnlabel | Gunakan label kolom sebagai ganti nama kolom. Drive yang berbeda memiliki pendekatan yang berbeda. Lihat dokumentasi drive atau uji dengan dua opsi berbeda ini. | Benar | PALSU | BENAR |
UsegeneratedKeys | Memungkinkan JDBC untuk menghasilkan kunci primer. Dukungan drive diperlukan. Jika diatur ke True, pengaturan ini akan memaksa kunci primer yang dihasilkan, beberapa drive tidak kompatibel tetapi masih dapat dieksekusi. | Benar | PALSU | PALSU |
AutomappingBehavior | Menentukan apakah dan bagaimana mybatis secara otomatis memetakan bidang tabel data ke properti objek. Parsial hanya akan secara otomatis memetakan sederhana, tanpa hasil bersarang. Penuh akan secara otomatis memetakan semua hasil yang kompleks. | TIDAK ADA, SEBAGIAN, PENUH | SEBAGIAN |
DefaultExecutorType | Konfigurasikan dan atur pelaksana, dan pelaksana sederhana menjalankan pernyataan lain. Eksekutor penggunaan kembali dapat menggunakan kembali pernyataan pernyataan pernyataan yang disiapkan, dan pelaksana batch dapat berulang -ulang menjalankan pernyataan dan pembaruan batch. | SEDERHANA Penggunaan kembali KELOMPOK | SEDERHANA |
DefaultStatementTimeout | Tetapkan batas waktu untuk menentukan berapa lama drive akan menunggu database menanggapi batas waktu | Bilangan bulat positif | Tidak diatur (batal) |
<Pengaturan> <pengaturan nama = "Cacheenabled" value = "true" /> <pengaturan nama = "lazyloadingEnabled" value = "true" /> <pengaturan nama = "multipleResultSetSenable" value = "true" /> <setting name = "usecolumnlabel" value = "true" /<pengaturan nama = "value" name = "name" fies = "trime" /<set pengaturan "" name "name =" uSeGenEdkeys = "True" value = "false" /> < /settings>
2.3 Typealiases Tipe Alias
Jenis alias adalah singkatan dari tipe Java.
Ini hanya terkait dengan konfigurasi XML, disingkat sebagai nama kelas Java yang panjang. Misalnya:
<Typealias> <typealias alias = "userentity" type = "com.Manager.data.model.userentity" /> <typealias alias = "studententity" type = "com.manager.data.model.studentity" /<typealis alias = "classentity =" COMPEOD.MADAD.MADED " /<TYPEALIAS ALIAS =" classentity = "classentity = "DAdAde.data. </yypealias>
Dengan konfigurasi ini, "StudentEntity" dapat digunakan di mana saja sebagai pengganti "com.manager.data.model.studententity".
Untuk jenis Java normal, ada banyak alias tipe bawaan. Keduanya tidak peka kasus, dan karena nama yang kelebihan beban, Anda harus memperhatikan penanganan tipe asli.
Alias | Jenis peta |
_byte | byte |
_panjang | panjang |
_pendek | Pendek |
_int | int |
_bilangan bulat | int |
_dobel | dobel |
_mengambang | mengambang |
_Boolean | Boolean |
rangkaian | Rangkaian |
byte | Byte |
panjang | Panjang |
Pendek | Pendek |
int | Bilangan bulat |
bilangan bulat | Bilangan bulat |
dobel | Dobel |
mengambang | Mengambang |
Boolean | Boolean |
tanggal | Tanggal |
desimal | BigDecimal |
BigDecimal | BigDecimal |
obyek | Obyek |
peta | Peta |
hashmap | Hashmap |
daftar | Daftar |
Daftar Array | Daftar Array |
Koleksi | Koleksi |
Iterator | Iterator |
2.4 Tipe TypeHandlers Pegangan
Apakah MyBatis menetapkan parameter dalam pernyataan preprocessing atau mengambil nilai dari set hasil, prosesor tipe digunakan untuk mengonversi nilai yang diperoleh menjadi tipe java dengan cara yang sesuai. Tabel berikut menjelaskan prosesor tipe default.
Ketik prosesor | Jenis Java | Tipe JDBC |
Booleantypehandler | Boolean, Boolean | Nilai boolean apa pun yang kompatibel |
Bytetypehandler | Byte, byte | Nomor atau jenis byte yang kompatibel |
Shorttypehandler | Pendek, pendek | Bentuk digital atau pendek yang kompatibel |
Integertypehandler | Integer, int | Digital dan Integer yang kompatibel |
Longtypehandler | Panjang, panjang | Model digital atau panjang yang kompatibel |
Floattypehandler | Mengapung, mengapung | Jenis Digital atau Tipe Floating Point Presisi Single yang kompatibel |
Doubletypehandler | Ganda, ganda | Jenis titik mengambang digital atau presisi ganda yang kompatibel |
BigDecimaltypehandler | BigDecimal | Jenis desimal numerik atau desimal apa pun yang kompatibel |
StringTypehandler | Rangkaian | Tipe char dan varchar |
Clobtypehandler | Rangkaian | Tipe clob dan longvarchar |
Nstringtypehandler | Rangkaian | Jenis nvarchar dan nchar |
Nclobtypehandler | Rangkaian | Tipe nclob |
Bytearraytypehandler | byte [] | Jenis aliran byte apa pun yang kompatibel |
Blobtypehandler | byte [] | Tipe gumpalan dan longvarbinary |
Datetypehandler | Tanggal (java.util) | Jenis cap waktu |
Dateonlytypehandler | Tanggal (java.util) | Jenis Tanggal |
Timeonlytypehandler | Tanggal (java.util) | Tipe waktu |
SQLTIMESTAMPTYPEHANDLER | Timestamp (java.sql) | Jenis cap waktu |
Sqldatetypehandler | Tanggal (java.sql) | Jenis Tanggal |
Sqltimetypehandler | Waktu (java.sql) | Tipe waktu |
ObjectTypehandler | Setiap | Jenis lainnya atau tidak ditentukan |
Enumtypehandler | Jenis Pencacahan | Varchar - jenis string yang kompatibel, disimpan sebagai kode (tidak diindeks). |
LimingsTringTypehandler kelas publik mengimplementasikan TypeHandler {@Override public void setParameter (disiapkan PS, int i, parameter objek, jdbctype jdbctype) melempar sqlexception {system.out.println ("setParameter - parameter:" + (string) (string)), parameter (string), (string), (string), (string), (string), (string), (string), (string), (string), (string) (string), (string), (string) (string)), JdParameter: (string) (string) (string) (string) + ", parameter: (string) (string) (string) + (string) + (string) + (string) + (string) + (string) + (string)) parameter ps.setstring (i, ((string))); } @Override Objek publik getResult (hasil rset, string columnName) melempar sqlexception {system.out.println ("getResult - columnName:" + columnName); return rs.getString (ColumnName); } @Override Objek publik getResult (callablestatement cs, int columnIndex) melempar sqlexception {system.out.println ("getResult - columnIndex:" + columnIndex); return cs.getString (ColumnIndex); }}Tambahkan tag TypeHandler di typeHandlers di file konfigurasi.
<epeShandlers> <typeHandler javatype = "string" jdbctype = "varchar" handler = "liming.student.manager.type.LimingstringTypehandler"/> </typeHandlers>
2.5 Pabrik Objek ObjectFactory
Setiap kali mybatis membuat instance baru dari objek hasil, ObjectFactory digunakan. ObjectFactory default tidak berbeda dengan membuat instance menggunakan konstruktor kelas target. Jika sudah ada parameter yang dipetakan, dimungkinkan juga untuk menggunakan konstruktor dengan parameter.
Jika Anda menulis ulang operasi default ObjectFactory, Anda dapat membuat sendiri dengan mewarisi org.apache.ibatis.reflection.factory.defaultObjectFactory.
Antarmuka ObjectFactory sederhana. Ini berisi dua metode untuk pembuatan, satu adalah untuk menangani konstruktor default, dan yang lainnya adalah menangani konstruktor parameter. Pada akhirnya, metode SetProperties dapat digunakan untuk mengonfigurasi ObjectFactory. Setelah menginisialisasi instance ObjectFactory Anda, properti yang ditentukan dalam badan elemen ObjectFactory akan diteruskan ke metode SetProperties.
Public Class LimingObjectFactory memperluas defaultObjectFactory {private static final long serialversionuid = -399284318168302833l; @Override Objek publik Buat (tipe kelas) {return super.create (type); } @Override Objek publik Buat (Tipe Kelas, Daftar <SPLASE> ConstructorArgTypes, Daftar <pes Object> ConstructorArgs) {System.out.println ("Buat - type:" + type.toString ()); return super.create (type, constructorArgTypes, constructorargs); } @Override public void setProperties (Properties Properties) {System.out.println ("SetProperties - Properties:" + Properties.ToString () + ", Someproperty:" + Properties.getProperty ("Someproperty")); super.setProperties (properti); }}Tambahkan Tag ObjectFactory ke file konfigurasi
<objectFactory type = "liming.student.manager.configuration.limingObjectFactory"> <name properti = "someproperty" value = "100"/> </objectFactory>
2.6 Plugin Plugin
Mybatis memungkinkan Anda untuk mencegat panggilan yang dieksekusi dengan pernyataan yang dipetakan pada titik tertentu. Secara default, mybatis memungkinkan plugin untuk mencegat panggilan metode:
Rincian metode di kelas -kelas ini dapat ditemukan dengan melihat tanda tangan dari setiap metode, dan kode sumbernya tersedia dalam paket distribusi MyBatis. Anda harus memahami perilaku metode utama Anda, dengan asumsi Anda melakukan lebih dari memantau panggilan. Jika Anda mencoba memodifikasi atau mengganti metode yang diberikan, Anda dapat memecahkan inti mybatis. Ini adalah kelas dan metode tingkat rendah, dan Anda harus menggunakan plugin dengan hati-hati.
Menggunakan plugin adalah daya yang sangat sederhana yang mereka berikan. Implementasi sederhana dari antarmuka interceptor, dan tentukan tanda tangan yang ditentukan yang ingin Anda intercept.
2.7 Lingkungan
Mybatis dapat dikonfigurasi dengan beberapa lingkungan. Ini dapat membantu Anda memetakan SQL agar sesuai dengan beberapa database, dll.
2.8 Mapper Mapper
Ini adalah pernyataan yang memberi tahu Mybatis di mana mencari pemetaan SQL. Anda dapat menggunakan referensi sumber daya di ClassPath, atau menggunakan karakter untuk memasukkan referensi URL yang tepat.
Misalnya:
<mapper resource = "com/manager/data/peta/usermapper.xml"/> <mapper resource = "com/manager/data/peta/studermapper.xml"/> <mapper resource = "com/manager/data/peta/classmapper.xml"/> </mappers>