Selain Struts, kerangka kerja MVC Web mainstream saat ini juga memiliki Spring MVC. Ini terutama karena Spring MVC relatif sederhana untuk dikonfigurasi dan sangat jelas untuk digunakan. Ini sangat fleksibel, memiliki integrasi yang baik dengan Spring, dan mendukung API REST lebih baik daripada struts.
MyBatis adalah versi iBatis yang ditingkatkan. Sebagai saingan lama untuk hibernasi, ini adalah kerangka kerja lapisan yang persisten yang dapat menyesuaikan SQL, prosedur tersimpan, dan pemetaan lanjutan.
Perbedaan utama dengan hibernate adalah bahwa mybatis semi-otomatis, sedangkan hibernate sepenuhnya otomatis, jadi ketika persyaratan aplikasi menjadi lebih dan lebih kompleks, SQL otomatis tampaknya lebih canggung.
Sejak saya mengambil proyek beberapa waktu yang lalu, saya ingin menggunakan SpringMVC untuk melakukannya, jadi saya mulai memainkan permainan mengintegrasikan kerangka kerja dengan sikap latihan. Orang yang sering membangun bingkai harus tahu bahwa inti dari pembuatan bingkai adalah file konfigurasi. Jadi saya terutama memposting beberapa kode file konfigurasi. Hal yang sama berlaku untuk saya, setelah saya menulis file konfigurasi, saya menjalankan kesalahan dan menambahkan toples. Berikut adalah paket toples yang saya gunakan (harus paling sedikit):
Catatan: Ada beberapa stoples tambahan pada gambar di atas, misalnya, kumpulan koneksi database yang saya gunakan adalah Druid dan logback berbasis bingkai Alibaba, sehingga toples terkait diperkenalkan. Penggunaan dan konfigurasi kedua kerangka kerja ini sangat sederhana, jadi saya tidak akan membahas detailnya di sini.
1. Integrasi SpringMVC
springmybatis-servlet.xml:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http:BaMaM.MFC" xsi: schemalocation = "http:B http://www.springframework.org/schema/beans/spring-leans.xsd http://www.springframework.org/schema/context http://www.spramework.org/schema/context/spring.spramework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd " Pindai Nama Paket, Membuat Dukungan Musim Semi Deteksi Otomatis Komponen, seperti pengontrol yang dianotasi-> <konteks: komponen-pemindaian paket basis = "com.alibaba.controller" /> <konteks: komponen-scan-package = "com.alibaba. name = "prefix" value = "/web-inf/jsp/"/> <properti name = "suffix" value = ". jsp"/> <!-dapat kosong, nyaman untuk mengimplementasikan logika kelas interpretasi tampilan berdasarkan ekstensi-> </ bean> <!-mengkonfigurasi interceptor, multiple interceptors, dieksekusi secara berurutan-> </bean! path-> <mvc: mapping path = "/user/**"/> <mvc: mapping path = "/test/**"/> <tean> </ bean> </mvc: interceptor> <!-Saat menyiapkan beberapa pencegat, setiap metode preadcepse dalam urutan-dan kemudian panggil metode Posthandle dan Aftercomplet aftercepore-masing-masing dalam urutan, dan kemudian memanggil Posthandle dan AfterComplet. </boy>
2. Integrasikan mybatis
Spring-dao.xml:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: mybatis = "http://mybatis.org/schema/mybatis-spring" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http: http http://www.springframework.org/schema/beans/spring-teans.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "canpering mybing@canbaPy mybat mendukung annotasi, yang menunjukkan bahwa itu akan diproses sebagai @cing @code @cpape @case ini, menunjukkan bahwa itu akan diproses sebagai @cing @code myBaDe @cpape @cape ini, yang menunjukkan bahwa itu akan diproses sebagai @cing @code @code MyBaPEn secara otomatis diperkenalkan-> <mybatis: pindai paket dasar = "com.alibaba.dao"/> <!-Memperkenalkan file properti-> <konteks: properti-placeHolder lokasi = "classpath: configuration.properties"/> <!-Koneksi database-> <bean id close = "dataSource" init-methodod = "init" init "" init "" init "" init "" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" init "init" value = "$ {jdbc.url}"/> <name properti = "nama pengguna" value = "$ {jdbc.userName}"/> <name properti = "kata sandi" value = "$ {jdbc.password}"/> <!-Konfigurasi ukuran inisialisasi, minimum, minimum, maksimum-> <pass name = " name="maxActive"><value>5</value></property> <property name="minIdle"><value>1</value></property> <!-- Configure the time to get the connection waiting timeout --> <property name="maxWait"><value>60000</value></property> <!-- Configure filters for monitoring statistics intercepts --> <property name = "filter"> <value> stat </ value> </propt> <!-Konfigurasikan berapa lama waktu yang dibutuhkan untuk melakukan interval deteksi untuk mendeteksi koneksi idle yang perlu ditutup, dalam milidetik-> <nama properti = "timebetweenrunsmillis"> <value> 60000 </value> </properti </properten!-configurec-minimum "> <value> 60000 </value> </properti </properti </property!-MINIMUREC THE MINIMUS"> <value> 60000 </value> </properti </property!-Minonics-Minonics "> <value> 60000 </value> </property> </property!-MINIMUREC THE MINIMAL"> <value> 60000 </value> </property> </properte! name="minEvictableIdleTimeMillis"><value>300000</value></property> <!-- <property name="validationQuery"><value>SELECT 'x'</value></property> <property name="testWhileIdle"><value>true</value></property> <property name="testOnBorrow"><value>false</value></property> <property name = "TestonReTurn"> <value> false </ value> </pruptent> <properti name = "poolpreparedstatements"> <value> true </ value> </property> <name properti = "maxopenpreparedstatements"> <value> 20 </value> </property> </bean> <!-mybatis configuration-> <value> </value = "saEan> <!-mybatis configuration-> <value> </value =" saEan> <! name = "DataSource" Ref = "DataSource"/> </tean> </beans> 3.web.xml mengintegrasikan springmvc dan mybatis
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" Versi = "3.0"> <!-servlet disediakan untuk container SOADERSD "Version =" 3.0 "> <!-Servlet disediakan untuk container SOADERSD" VERSION = "3.0"> <!-Servlet disediakan untuk container SOADERSD "Version =" 3.0 "> <! / Direktori statis. Misalnya, ketika Anda mengunjungi http: //localhost/foo.css, sekarang http: //localhost/static/foo.css-> <!-jangan mencegat file statis-> <servlet-mapping> <servlet-name> default </servlet-name> <rrr-pattern>/js/js/* <RURL-PATERS>/CSS/*</RURL-PATERS> <RURL-PATERS>/gambar/*</RURL-PATERS> <RURL-POLAST>/FONTS/*</RURL-PATERS> </SERVLET-MAPPING> <!-Mengkonfigurasi Set Karakter-> <TERFILTER> <TERFERTER-NAME> EncodingFilter </Filter-name> <nilter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <Ilin-param> <param-name> encoding </param-name> <param-value> UTF-8 </param-value> </init-param> <init-in-param> <naram-n-n-n-n-nalue> </init-param> <init-param> <nit-naram> <param-n-n-n-n-nalue> </init-param> <init-param> <nit-naram> <param-n-n-n-n-nalue> </init-param> <init-param> <nit-naram> <param-n-n-n-n-nalue> <param-value> true </param-value> </it-param> </tilter> <nilter-Mapping> <Tiler-name> encodingfilter </filter-name> <rito-Pattern>/*</rull-Pattern> </tiler-Mapping> <! Saat menginisialisasi dispatcherServlet, fram-pola untuk file yang bernama [Layanan-Nama, Nama, Nama, Nama, Nama, Nama, Nama, Nama, Name, mendefinisikan kacang yang relevan di sana, mengesampingkan kacang yang ditentukan secara global-> <servlet> <servlet-name> springmybatis </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet> <boad-on-tartup> </load-on-startup> </servlet-class> <boad-on-tartup> </load-on-startup> </servlet> <boad-on-tartup> </load-on-startup> </servlet> <load-on-tartup> </load-on-startup> </servlet> <load-on-tartup> </load-on-startup> <servlet-name>springMybatis</servlet-name> <!-- All requests will be processed by DispatcherServlet--> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring-*.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.contextLoaderListener </listener-class> </engeaner> <!-pemantauan web druid-> <servlet> <servlet-name> druidstatview </servlet-name> <servlet-class> com.alibaba.druid.support.http.statviewServlet </servlet-class> </servlet> <servlet-Mapping> <servlet-name> druidstatview </servlet> <rerver> <berang> <-page> <-page> <-page> 40-POPE4> <-POPLET4>/DRUOD/DRUID/*</url-Pattern> </Servlet-papping> <rerver-PHAGE> <-POTER> <location> /error/404.jsp </location> </error-page> <sror-page> <certror-code> 500 </error-code> <location> /error/500.jsp </location> </error-page> </web-app>
4.logback.xml konfigurasi log
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="test.LogbackTest" level = "trace" /> <logger name = "com.alibaba.controller.testController" level = "trace" /> <logger name = "org.springframework.web.servlet.dispatcherServlet" level = "debug" /> <logger name = "druid. Spring-Config, log SQL tidak akan ditampilkan. Logback hanyalah implementasi slf4j-> <root level = "debug"> <appender-ref ref = "stdout"/> </root> </configuration> 5. Configuration.Properti Konfigurasi
jdbc.url = jdbc/: mysql/: // localhost/: 3306/druid? UseUnicode/= true & characterencoding/= UTF-8 & ZerodateTimebehavior/= Converttonull jdbc.username = root jdbc.password = 123456
6. Uji apakah konstruksi berhasil, kode latar belakang
Pertama, masuk, gunakan enkripsi, Anda dapat menghapusnya
paket com.alibaba.controller; impor javax.annotation.Resource; impor javax.servlet.http.httpservletRequest; impor org.apache.commons.codec.digest.digestutils; impor org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.springframework.stereotype.controller; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.requestmethod; impor org.springframework.web.bind.annotation.requestparam; impor com.alibaba.model.user; impor com.alibaba.service.userservice; impor com.alibaba.util.requestutil; / ** * @author tfj * 2014-7-26 */ @controller kelas publik SystemController {private final Logger Log = loggerFactory.getLogger (SystemController.class); @Resource Private UserServerService UserService; @RequestMapping (value = "/", method = requestMethod.get) public string home () {log.info ("Kembali ke beranda!"); mengembalikan "indeks"; } @RequestMapping (value = "/test/hello", method = requestMethod.get) public String testhello () {log.info ("Jalankan metode testhello!"); mengembalikan "testhello"; } @RequestMapping (value = "/Login", Method = requestMethod.post) Public String testLogin (permintaan httpservletRequest, @requestParam string username, @requestparam string password) {log.info ("Jalankan metode testLogin!"); Pengguna pengguna = UsserService.FindUserbyName (nama pengguna); if (user! = null) {if (user.getPassword (). equals (digestutils.md5hex (kata sandi))) {request.getSession (). setAttribute ("userId", user.getId ()); request.getSession (). setAttribute ("pengguna", nama pengguna); kembalikan "redirect:" + requestutil.retrievesavedRequest (); // lewati ke halaman akses} else {log.info ("kesalahan kata sandi"); request.getSession (). setAttribute ("pesan", "Nama pengguna dan kata sandi salah, silakan masuk lagi"); mengembalikan "login"; }} else {log.info ("Nama pengguna tidak ada"); request.getSession (). setAttribute ("pesan", "Nama pengguna tidak ada, silakan masuk lagi"); mengembalikan "login"; }}} Saya tidak akan menulis tentang layanan dan model, saya akan menulis tentang peta kelas mapper mybatis
<? 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 napper = "aBaBAbe.dtd = "aBaBABABAC.ABABAC.DTD "> <mapper naMapper = "aBaBABABATIS-3-MAPPER.DTD"> <mapper id = "findUserByName" resultType = "com.alibaba.model.user"> SELECT ID, nama pengguna, kata sandi dari Sysuser di mana username = #{username} </pilih> </mapper> 7. Meja Depan JSP terutama halaman di mana login dan login berhasil, jadi saya tidak akan menulisnya
Posting tangkapan layar:
Pada titik ini, integrasi SpringMVC+Mybatis telah berhasil. Fungsi kompleks selanjutnya untuk ditambahkan
Hal -hal yang perlu diperhatikan
1. Konfigurasi druid dan logback dalam kerangka ini disalin dari situs web resmi, sehingga semuanya yang paling mendasar. Pembaca dapat mengabaikannya, atau dapat diganti dengan komponen basis data dan kerangka kerja log yang dibiasakan pembaca, seperti C3P0 dan LOG4J.
2. Kode ini memiliki izin yang ditambahkan, yaitu, Anda perlu masuk sebelum mengakses, dan kemudian melompat ke halaman untuk diakses setelah masuk. Untuk manajemen izin SpringMVC, silakan lihat: http://www.vevb.com/article/99569.htm
3. Artikel ini adalah kode paling sederhana dan paling dasar yang telah dilucuti dari kode pengujian saya. Mohon maafkan saya untuk beberapa area yang belum dilucuti.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.