Saya telah berhubungan dengan pengembangan web terkait .NET sebelumnya, tetapi sekarang saya masih sangat tidak nyaman menggunakan Javaweb.
1. Bicara tentang Arsitektur Proyek <BR /> Saya pertama kali melakukan kontak dengan pengembangan terkait .NET, jadi saya cukup akrab dengan pengembangan terkait .NET, tetapi saya belajar Java di sekolah, dan saya berencana untuk menggabungkan kedua platform ini. Bangun, gunakan Java sebagai backend, yaitu penyedia layanan, menyelesaikan semua logika bisnis di platform Java dan menggunakan .net yang lebih saya kenal untuk pengembangan web. Dengan cara ini, akan ada aplikasi android dan sisi web. Klien memanggil layanan secara seragam melalui kerangka kerja terdistribusi. Setelah mencari waktu yang lama, saya akhirnya memilih HPROSE, ringan, lintas-bahasa, lintas-platform, non-invasif, berkinerja tinggi, Perpustakaan Mesin Calling Object Calling. Alasan saya memilihnya adalah karena biaya belajar yang rendah, dan di sisi lain, panggilan lintas platformnya sangat mudah dan efisien, karena kita perlu menggunakan .NET untuk melakukan web untuk menghubungi layanan yang diterbitkan oleh Java! Setelah secara kasar melihat dokumentasi HPROSE, saya menemukan bahwa menggunakan layanan rilis hproseservlet bawaan lebih cepat dan lebih sederhana untuk dikembangkan, jadi saya berencana untuk menggunakan metode ini untuk mempublikasikan layanan. Tetapi masalahnya adalah bahwa arsitektur SSH tradisional terasa agak berat, dan saya akan menggunakan .net untuk mengembangkan sisi web, jadi saya merasa tidak perlu mengintegrasikan struts, jadi itu adalah arsitektur hibernate+spring+hprose .
2. Desain Basis Data
Ini adalah toko buku online kecil, jadi desainnya masih kurang, dan terutama praktis, terutama mempraktikkan pengembangan java ~~. Jadi saya menggunakan Navicat untuk mendesainnya secara singkat, tetapi tidak ada korelasi tabel desain.
Bahkan, Anda dapat melihat korelasi tabel sekilas ~~, selanjutnya adalah hibernasi beberapa pemetaan, dan juga menggunakan plug-in untuk menghasilkan model dan pemetaan file.
Ini seperti ini dengan sedikit modifikasi-
3. Spring3+Hibernate4 Configuration <BR /> Karena model dan pemetaan file secara otomatis dihasilkan, lebih baik untuk mengkonfigurasi mereka sedikit. model gabungan. Misalnya, jenis kunci utama dari tabel tinjauan produk :
Paket com.book.model; // Dihasilkan 2015-11-2 9:07:06 Oleh Hibernate Tools 4.0.0.FinalImport Java.util.Date;/** * Komentar yang dihasilkan oleh HBM2JAVA */PUBRI C CLASS COMPONSPK IMPLEMENSI JAVA IO.Serialize {Buku Buku Pribadi; .CommentsDate = CommentsDate; pengguna) {this.user = pengguna; == Lainnya) Return True; castother.getBook ()) ||. ) == Castother.getUser ()) || .getcom mentSdate () == castother.getCommentsDate ()) || (this.getCommentsDate ()! = null && castother.getCommentsDate ()! = null && this.getCommentsDate (). ; == NULL? Model tabel ulasan produk :
Paket com.book.model; // Dihasilkan 2015-10-30 14:56:21 oleh Hibernate Tools 4.0.0.FinalImport Java.sql.Date;/** * Komentar yang dihasilkan oleh HBM2JAVA */Komentar kelas publik mengimplementasikan java. IO.Serializable {Private String Content; } public getpic () {return pic;} public void setpic (string pic) {this.pic = pic; ; konten = this.pic = pic; File pemetaan hibernasi yang sesuai:
<? XML Versi = "1.0"?> <! Doctype Hibernate-Mapping Public "-// Hibernate/Hibernate Mapping DTD 3.0 // EN" "http://www.hibernate.org/dtd/hibernate-mapp ing-3.0 . "KOMENTAR" KATALOG = "BOOKSTORE"> <composite-id name = "id"> <key-many-to-one name = "book"> <column name = "bookId" /> < /key-many-to- One> <key-many-to-one name = "user"> <column name = "userid" /> < /keyy-many-to-one> <key-property name = "commentsDate" type = "timestamp"> <name kolom = "komentar" panjang = "19"/> </key-property> </composite-id> <name properti = "konten" type = "string"> <name kolom = "konten" panjang = "65535 " /> </property> <properti name =" pic "type =" string "> <column name =" pic "length =" 65535 " /> </propert> <properti name =" client "type =" java. lan g .integer "> <kolom name =" client "/> </propert> </belas> </hibernate-Mapping>
Karena ada dua kunci asing dalam tabel tinjauan produk, tag utama-banyak-ke-satu digunakan.
Sejak Spring3.2+Hibernate4.1 digunakan, cara untuk mendapatkan SesionFactory terbatas pada sessionfactory.getCurrentsession (); tetapi hal -hal yang harus diaktifkan:
<bean id = "transactionManager"> <name properti = "sessionfactory" ref = "sessionfactory" /> </ bean> <!-karakteristik propagasi transaksi-> <tx: saran id = "txadvice" transac tion-manager = "TransactionManager"> <tx: atribut> <tx: metode nama = "add*" propagation = "wajib" /> <tx: nama metode = "hapus*" propagasi = "diperlukan" /> <tx: nama metode = " Modifikasi*"propagasi =" diperlukan " /> <!-hibernate4 harus dikonfigurasi untuk mengaktifkan transaksi, jika tidak getCurrentSession () tidak dapat diperoleh-> <tx: metode nama ="*"propagasi =" diperlukan "read-on ly = "true"/> </tx: atribut> </tx: nasihat>
Di atas adalah masalah yang terjadi ketika saya mengonfigurasinya. Berikut adalah file konfigurasi pegas:
<? xml versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.orgs /2001/xmlschema-instance "xmlns: aop =" http://www.springframework.org/schema/aop "xmlns: context =" http://www.springframework.org/schema/ konteks "xmlns: TX =" http://www.springframework.org/schema/tx "xsi: schemalocation =" http://www.springframework.org/schema/beans http://www.springframework.org/skema/beans/spring--bara- 3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http: //www.springframewor k.orgal Konteks http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/schema/schema/schema/tx/tx/tx/schema/tx/schema/schema/tx/ -TX-3D. value = "com.mysql.jdbc.driver"/> <name properti = "url" value = "jdbc: mysql: //127.0.0.1/bookstore? UseUnicode = true & characterencoding = UTF-8"/> <nama properti = " Nama pengguna "value =" root " /> <name properti =" kata sandi "value =" yangyang " /> </ bean> <!-Anda dapat menambahkan konfigurasi cache sekunder-> <bean id =" sessionfactory " > <name properti = "DataSource" Ref = "DataSource"/> <Properti Nama = "MappingDirectoryLocations"> <cist> <value> classpath: config </ value> </cist> </property> <name properti = "hibernateProperties "> <sops> <prop key =" hibernate.dialect "> org.hibernate.dialect.mysqldialect </prop> <prop key =" hibernate.show_sql "> true </prop> <prop key =" hibernate.show_sql " > true </prop> <prop key = "hibernat e.hbm2ddl.auto"> update </prop> <prop key = "hibernate.temp.use_jdbc_metadata_defaults"> false </prop> <prop key = "current_session_context_class"> thread </prop> <prop = "current_session_context_class"> thread </prop> <prop = "current_session_context_class"> </prop> </sops> </prop Property> </bean> <!-Configuration Transaction Manager-> <bean id = "transactionManager"> <properti nama = "sessionfactory" ref = "sessionfactory"/> </> Bean> <!-Karakteristik propagasi transaksi-> <tx: nasihat id = "txadvice" transaction-manager = "transactionManager"> <tx: atribut> <tx: nama metode = "add*" propagasi = "diperlukan" /> <tx: Metode name = "delet e*" propagation = "wajib" /> <tx: name metode = "ubah*" propagasi = "diperlukan" /> <!-hibernate4 harus dikonfigurasi untuk mengaktifkan transaksi, jika tidak jika tidak, jika tidak getCurrentSession () tidak dapat diperoleh-> <tx: Metode name = "*" propagation = "wajib" read-only = "true"/> </tx: atribut> </tx: nasihat> <!-kelas-kelas tersebut dan metode menggunakan transaksi-> <aop: config> <!-hanya transaksi yang diimplementasikan untuk lapisan logika bisnis-> <aop: pointcut id = "allmanagermethod" ekspresi = "eksekusi (* com.book.test.* .*(..)) " /> <aop: penasihat pointcut-ref =" allmanagerMethod "adv ice-ref =" txadvice " /> </aop: config> <bean name =" berbasisDao " /> <name bean = "orderdao" /> </boy>
Setelah semuanya siap, kami menggunakan tes servlet:
<servlet> <servlet-name> tes </servlet-name> <servlet-class> com.book.test.test </servlet-class> </servlet> <servlet-Mapping> <servlet-name> tes </s Servlet-name> <RURL-PATERS>/INDEX </URL-PATERS> </SERVLET-MAPPing>
DoGet void yang dilindungi (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// TODO Metode yang dihasilkan AutoRebApply menjadi FACTRECTEXTEXT (). Class orderdao.Karena kita tidak menggunakan struct, kita perlu menemukan Beanfactory musim semi untuk mendapatkan kacang DAO.
Hasil Menjalankan:
Pesanan pesanan yang berhasil dimuat 1 Kuantitas pesanan item.
Lagi pula, ini adalah pertama kalinya saya menggunakan Java untuk mengembangkan proyek seperti itu.