Gunakan mybatis saja untuk mengelola sesuatu
Saya telah menulis konten terkait dalam artikel MyBatis. Di sini saya akan terus menulis demo paling sederhana. Mari kita tinjau konten mybatis sebelumnya. Pertama, buat tabel dan buat tabel siswa sederhana:
Buat Table Student (Student_ID int Auto_increment, Student_Name Varchar (20) Not Null, Key Utama (Student_ID))
Buat Student.java kelas entitas:
siswa kelas publik {private int studentId; private string studentName; public int getStudentId () {return studentId;} public void setstudentId (int studentId) {this.studentId = studentId;} public string getStudentName () {return studentname;} public void setStudentName (string string () {studentname;} public void setStudentName (string string studentName () {thudentname;} public void setStudentName (string string name () {studentname;} public void setStudentName (string studentName () {studentname;} public void setStudentName (string string studentName () {studentName; toString () {return "Student {[StudentId:" + StudentId + "], [StudentName:" + StudentName + "]}";}} Sebagai lebih, mengesampingkan metode ToString () untuk kelas entitas dan mencetak masing -masing (atau atribut utama) adalah pendekatan yang disarankan. Berikutnya adalah config.xml, yang berisi konfigurasi JDBC dasar:
<? 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"> <picleas> <pypyasser> <pypealass> <ypipeAsass-ypealasser <peliases> <pelyas> <pyponas> <pelyas> <pyponasser> <pyponasser> <pyponasser> <pyponasser> <pypiceras = "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "> type = "org.xrq.domain.student"/> </yypealiases> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <transactionManager type = "jdbc"/> <datasource type = "pooled"> <nama properti = "value" = "com.mysql.jdbc.driver =" name properten = "" com.mysql.jdbc.driver ">" driver = "" com.mysql.jdbc.driver "name =" "" "com.mysql.jdbc.driver"> "driver =" "com.MySQL.JDBC value = "jdbc: mysql: // localhost: 3306/test"/> <name properti = "nama pengguna" value = "root"/> <name properti = "kata sandi" value = "root"/> </datasource> </urveening> </Environments> <pappers> <mapper sumber daya = "student_mapper.xml"
Lalu ada student_mapper.xml, terutama pernyataan SQL spesifik:
<mapper namespace = "studentmapper"> <resultmap type = "student" id = "studentmap"> <id kolom = "student_id" properti = "studentid" jdbctype = "integer" /> <hasil kolom = "student_name" property = "studentName" jdbctype = "varchar" /< /resultmaper "sisentnam =" jdbctype = "varchar" / /< /hasil order = "ID =" ID = "ID (" ID = "JDBCTYPE =" VARCHAR " / /< /ID Hasil>" ID = "ID =" ID ("ID /IDED =" VARCHAR " /< /ID /ID UNDUK =" ID /ID < /ID /ID < /ID /ID < /ID " Student_id, Student_name dari Student; </ pilih> <masukkan id = "insertStudent" useGeneratedKeys = "true" keyproperty = "studentId" parameterType = "student"> masukkan ke dalam nilai siswa (student_id, student_name ( #{{studentId, jdbctype = integer}}, #{studentname, #{{studentId, jdbctype = integer}}, #{studentname,/{{studentId, jdbctype = integer}}, #{studentName,/{{studentId, jdbctype = integer}}, #{studentName, JDBCTIPE; Buat mybatisutil.java, yang digunakan untuk membuat beberapa elemen mybatis dasar. Kelas selanjutnya mewarisi kelas ini:
kelas publik mybatisutil {sqlSessionFactory ssf statis yang dilindungi; pembaca statis yang dilindungi; statis {coba {reader = resources.getResourCeasReader ("config.xml"); ssf = sqlSessionFactoryBuilder baru (). e) {e.printstacktrace ();}} sqlsession yang dilindungi getsqlSession () {return ssf.opensession ();}} Persyaratan Pengembangan Tingkat Perusahaan:
1. Definisi dan implementasi terpisah
2. Pengembangan berlapis, biasanya DAO-> Layanan-> Pengontrol, tidak dikesampingkan bahwa satu lapisan lagi/beberapa lapisan atau satu lapisan lebih sedikit ditambahkan sesuai dengan situasi tertentu.
Jadi, pertama -tama tulis antarmuka studentdao.java:
Antarmuka Publik Studentdao {Daftar Publik <Sahasiswa> SelectAllStudents (); Public Int InsertWent (Siswa Siswa);} Akhirnya, tulis studentdaoImpl.java untuk mengimplementasikan antarmuka ini. Perhatikan bahwa Anda harus mewarisi kelas mybatisutil.java:
StudentdaoImpl kelas publik memperluas mybatisutil mengimplementasikan studentdao {private static final string namespace = "studentmapper."; Daftar publik <spiness> selectAllstudents () {sqlsession ss = getSqlSession (); daftar <pist> List = ss.selectlist (namespace + "selectAllstudents (); student> List = ss.selectlist (namespace +" selectAllstudents (); student> list = ss.sselectlist (namespace + "selectAllstudents (); student> list = ss.selectlist (namespace +" selectAllSesi Siswa) {SQLSession ss = getSqlSession (); int i = ss.insert (namespace + "insertStudent", siswa); // ss.commit (); ss.close (); return i;}} Tulis kelas tes:
Public Class StudentTest {public static void main (string [] args) {studentdao studentdao = StudentdaoImpl baru (); siswa siswa = siswa baru (); student.setstudentname ("jack"); studentdao.insertstudent (student); System.out.println ("Kunci utama adalah:" student.getStudentId ()); System.out.println ("---- tampilkan siswa ------"); Daftar <spinition> StudentList = Studentdao.SelectallStudents (); untuk (int i = 0, panjang = studentlist.size (); i <length; i ++) system.out.println (studentlist.get (i));}} Hasilnya harus kosong.
Saya telah mengatakan contoh ini adalah ulasan dan pengantar konten kami hari ini. Alasan untuk ini kosong adalah bahwa operasi insert telah dilakukan, tetapi mybatis tidak akan membantu kami mengirimkan barang secara otomatis, jadi apa yang ditampilkan secara alami kosong. Dalam hal ini, Anda harus secara manual mengirimkan transaksi melalui metode SQLSession Commit (), yaitu, buka komentar pada baris 17 dari kelas StudentdaoImpl.java.
Lebih banyak lagi, selain operasi penyisipan MyBatis dasar, contoh ini juga memiliki fungsi untuk mengembalikan ID kunci primer yang dimasukkan berdasarkan penyisipan.
Selanjutnya, gunakan Spring untuk mengelola hal-hal mybatis, yang juga merupakan praktik manajemen hal yang paling umum digunakan dalam pengembangan tingkat perusahaan.
Kelola Mybatis hal -hal dengan musim semi
Ada banyak artikel di internet untuk menjelaskan hal ini, dan saya telah banyak mencari, tetapi menyalin dan menempel satu sama lain atau tidak menjelaskan seluruh contoh dengan jelas. Melalui bagian ini, saya mencoba menjelaskan cara menggunakan Spring untuk mengelola hal -hal mybatis.
Menggunakan musim semi untuk mengelola hal-hal mybatis, selain kacang modul yang diperlukan Spring, konteks, inti, ekspresi, dan logging commons, konten berikut juga diperlukan:
(1) mybatis-spring-1.x.0.jar, ini adalah paket jar yang diperlukan untuk integrasi musim semi mybatis.
(2) Pool koneksi basis data, DBCP dan C3P0 dapat digunakan. Saya menggunakan druid Alibaba di sini
(3) JDBC, TX, AOP, JDBC pada dasarnya belum lagi. TX dan AOP digunakan karena dukungan Spring untuk Mybatis Thing Management dicapai melalui AOP
(4) aopalliance.jar, ini adalah paket jar yang diperlukan untuk menggunakan spring aop
Paket JAR di atas akan diunduh menggunakan Maven. Mereka yang belum menggunakan Maven dapat mengunduhnya di CSDN. Anda dapat mencarinya.
Di konfigurasi file config.xml dari mybatis, koneksi JDBC dapat dihapus, dan hanya bagian Typealiases yang dapat dipertahankan:
<? 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"> <picleas> <pypyasser> <pypealass> <ypipeAsass-ypealasser <peliases> <pelyas> <pyponas> <pelyas> <pyponasser> <pyponasser> <pyponasser> <pyponasser> <pypiceras = "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "> type = "org.xrq.domain.student"/> </yypealiases> </configuration>
Izinkan saya menyebutkan bahwa mybatis file konfigurasi lain student_mapper.xml tidak perlu diubah. Selanjutnya, tulis file konfigurasi pegas, dan saya beri nama spring.xml:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Beans xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://www.springframework.org/schema/beans" xmlns: context = "http:/schema MLNS: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http:/schema http://www.springframework.org/schema/beans/spring-weans-4.2.xsdhtp://www.springframework.org/schema/context http:/www.spramewework.org/schema/context http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsdhtp://wwww.spramework.org.org/xsdhtp://www.spramorkework.org.org/xsdhtp://www.spramorkework.org.org/xsdhema http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.spramework.org/schema http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">< !-- konfigurasi anotasi-> <tx: annotasi-driven transaction-manager = "TransactionManager"/> <konteks: annotation-configry-config/> <contaction: component-scan-scan basis "/pack = context: annotation-config-config/> <contaction: component-scan-scan basis"/pack = context: annotation-configry-config/> <Context: component-scan-scan basis "/pack = annotation-config/> <Context: component-scan-scan basis" "onotation. use alibaba's Druid --><bean id="dataSource" init-method="init" destroy-method="close"><property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean><bean id = "sqlSessionFactory"> <name properti = "configlocation" value = "classpath: config.xml" /> <properti name = "mapperlocations" value = "classpath:*_ mapper.xml" /<name properti = "DataSource" Ref = "DataSource" /< /bean> <!-Property Manager-DataSource "Ref =" DataSource " /< /bean> <! name = "DataSource" Ref = "DataSource"/> </tean> </beans>
Ini terutama mencakup manajer transaksi dan kumpulan koneksi basis data.
Selain itu, kita melihat bahwa ada SQLSessionFactory. Teman -teman yang menggunakan mybatis harus terbiasa dengan kelas ini. Ini digunakan untuk mengonfigurasi lingkungan MyBatis. Ada dua atribut configlocation dan mapperlocations di SQLSessionFactory. Seperti namanya, itu mewakili lokasi file konfigurasi dan lokasi file pemetaan. Di sini, selama jalur dikonfigurasi dengan benar, Spring akan secara otomatis memuat kedua file konfigurasi ini.
Lalu yang ingin Anda modifikasi adalah kelas implementasi DAO. Pada saat ini, Anda tidak lagi mewarisi kelas mybatisutil sebelumnya, tetapi mewarisi sqlSessiondaosupport.java dari mybatis-spring-1.x.0.jar. Kode spesifiknya adalah sebagai berikut:
@RepositoryPublic class StudentdaoImpl memperluas SQLSessiondaOsupport mengimplementasikan studentdao {private static final string namespace = "StudentMapper.";@ResourcePublic Void setSQLSessionFactory (SQLSESSESI SQLSESSIONFACTORY) {super.setsql SelectAllStudents () {return getsqlSession (). SelectList (namespace + "selectAllstudents");} public int insertstudent (siswa siswa) {return getSqlSession (). masukkan (namespace + "insertstudent", siswa);}}Dua anotasi digunakan di sini, mari kita bicarakan secara terpisah.
(1) @Repository, anotasi ini sama dengan @Component, @Controller dan anotasi @Service kami yang paling umum, yang semuanya dapat mendeklarasikan kelas sebagai kacang musim semi. Perbedaan mereka tidak dalam semantik tertentu, tetapi lebih dalam posisi anotasi. Seperti disebutkan sebelumnya, aplikasi tingkat perusahaan fokus pada konsep pengembangan hierarkis, sehingga keempat anotasi serupa ini harus dipahami sebagai berikut:
•@Anotasi repositori sesuai dengan lapisan persistensi, yaitu lapisan DAO, yang digunakan untuk secara langsung berinteraksi dengan database. Secara umum, metode sesuai dengan pernyataan SQL tertentu
•@Anotasi Layanan, yang sesuai dengan lapisan layanan, yaitu lapisan layanan, adalah fungsi menggabungkan pernyataan SQL tunggal/ganda. Tentu saja, jika sederhana, Anda akan secara langsung memanggil metode lapisan DAO.
•@anotasi pengontrol, yang sesuai dengan lapisan kontrol, yaitu lapisan kontrol dalam mode desain MVC. Fungsinya adalah untuk menerima permintaan pengguna, memanggil layanan yang berbeda untuk mendapatkan data sesuai dengan permintaan, dan menggabungkan data sesuai dengan persyaratan dan membungkusnya kembali ke ujung depan.
•@anotasi komponen, yang lebih sesuai dengan konsep komponen. Jika kacang tidak tahu bahwa itu milik lapisan, Anda dapat menggunakan anotasi @Component untuk anotasi.
Ini juga mencerminkan salah satu keuntungan dari anotasi: melihat nama dan mengetahui artinya, yaitu, melihat anotasi ini, Anda secara kasar tahu fungsi kelas ini, yaitu, posisinya di seluruh proyek.
(2) @Resource, anotasi dan anotasi @Autowired ini memiliki arti yang sama, dan keduanya dapat secara otomatis disuntikkan dengan atribut atribut. Karena SQLSessionFactory adalah inti dari mybatis, itu telah dinyatakan dalam Spring.xml. Oleh karena itu, kacang dengan ID "SQLSessionFactory" disuntikkan di sini melalui anotasi @Resource. Setelah itu, SQLSession dapat diperoleh melalui metode GetSQLSession () dan data ditambahkan, dihapus, dimodifikasi, dan diperiksa.
Akhirnya, tidak lebih dari menulis kelas tes untuk diuji:
Public Class StudentTest {public static void main (string [] args) {applicationContext ac = new classpathxmlapplicationContext ("spring.xml"); studentdao studentdao = (studentdao) ac.getBean ("studentdaoMPL"); studentda student = studentdao) aC.setBean ("StudentDaImpl"); Students Student = New Student (); Student.setSet studentdao.insertstudent (student); System.out.println ("j =" + j + "/n");stem.out.println("----Display Siswa ------"); Daftar <Sahasiswa> StudentList = studentdao.selectallstudents (); untuk (int i = 0, panjang = studentlist.size (); i <length; i ++) system.out.println (studentlist.get (i));}} Karena kelas StudentdaoImpl.java menggunakan anotasi @Repository dan tidak menentukan alias, nama StudentdaoImpl.java dalam wadah musim semi adalah "huruf kecil huruf + huruf yang tersisa", yaitu, "StudentdaoImpl".
Setelah menjalankan program, Anda dapat melihat bahwa siswa baru dilalui di konsol, yaitu, siswa secara langsung dimasukkan ke dalam database. Tidak ada komit atau rollback di seluruh proses. Semuanya diimplementasikan oleh Spring. Ini untuk menggunakan Spring untuk mengelola hal -hal di mybatis.
nota bene
Artikel ini mengulas penggunaan dasar mybatis dan menggunakan Spring untuk mengelola hal -hal di mybatis, dan memberikan contoh kode yang lebih rinci. Teman yang membutuhkan dapat mempelajarinya sesuai dengan kode. Berdasarkan artikel ini, saya akan menulis artikel nanti untuk menjelaskan implementasi manajemen hal multi-data antara tabel tunggal dan beberapa tabel. Persyaratan ini juga merupakan persyaratan umum di perusahaan dan aplikasi.