استخدم MyBatis وحده لإدارة الأشياء
لقد كتبت محتوى ذي صلة في مقالة MyBatis. هنا سأستمر في كتابة أبسط عرض تجريبي. دعنا نراجع محتوى MyBatis من قبل. أولاً ، قم بإنشاء جدول وإنشاء جدول طالب بسيط:
إنشاء طالب جدول (student_id int auto_increment ، student_name varchar (20) غير فارغ ، المفتاح الأساسي (student_id))
إنشاء كيان فئة student.java:
طالب الفصل العام {private int studentId ؛ private string studentName ؛ public int getStudentId () {return studentId ؛} public void setStudentId (int studentId) {this.studentId = studentId ؛ toString () {return "student {[studentId:" + studentId + "] ، [studentName:" + studentName + "]}" ؛}} بعبارة أكثر ، يعد تجاوز طريقة TOSTRING () لفئات الكيان وطباعة كل (أو سمة مفتاح) نهجًا موصى به. التالي هو config.xml ، الذي يحتوي على تكوين JDBC الأساسي:
<؟ type = "org.xrq.domain.student"/> </typeAliases> <البيئات default = "development"> <البيئة id = "development"> <TransactionManager type = "jdbc"/> <dataSource type = "propered"> <property name = "driver" value = value = "jdbc: mysql: // localhost: 3306/test"/> <property name = "username" value = "root"/> <property name = "password" value = "root"/> </taasource> </question> </eversionments>
ثم هناك student_mapper.xml ، وخاصة عبارة SQL المحددة:
<mapper namespace = "studentMapper"> <resultmap type = "student" id = "studentMap"> <id column = "student_id" property = "studentId" jdbctype = "integer" /> <result column = "select_name" property = "studentName" resultmap = "studentMap"> حدد student_id ، student_name من الطالب ؛ </select> <insert id = "insertStudent" usegeneratedKeys = "true" keyproperty = "studentId" parametertype = "student"> insert in student_id ، student_name) ( #{{jdbctype = jdbctype = varchar}) ؛ </insert> </mapper> إنشاء mybatisutil.java ، والذي يستخدم لإنشاء بعض عناصر mybatis الأساسية. ترث الطبقات اللاحقة هذه الفئة:
الفئة العامة myBatisutil {sqlsessionfactory ssf ؛ محمية محمية قارئ ثابت ؛ ثابت {try {reader = resources.getResourCeasReader ("config.xml") ؛ ssf = new sqlSessionFactoryBuilder (). build (reader) ؛} SQLSession GetSqlSession () {return ssf.opensession () ؛}} متطلبات التطوير على مستوى المؤسسة:
1. تعريف منفصل وتنفيذ
2. التطوير الطبقات ، عادةً ما يكون DAO-> SERVICE-> وحدة التحكم ، لا يتم استبعاده أن طبقة/طبقة أخرى أو طبقة أقل وفقًا للوضع المحدد.
لذا ، اكتب أولاً واجهة studentdao.java:
الواجهة العامة studentdao {القائمة العامة <Tudture> SelectAllStudents () ؛ int public insertstudent (طالب الطالب) ؛} أخيرًا ، اكتب studentdaoimpl.java لتنفيذ هذه الواجهة. لاحظ أنه يجب عليك أن ترث فئة mybatisutil.java:
يمتد الطالب العام من الدرجة العامة ، MyBatisUtil ، يطبق studentdao {private static final string aspace = "studentMapper. الطالب) {sqlsession ss = getSqlSession () ؛ int i = ss.insert (مساحة الاسم + "إدراج" ، طالب) ؛ // ss.s.commit () ؛ ss.close () ؛ return i ؛}} اكتب فئة اختبار:
{public static static void main (string [] args) {studentdao studentdao = new StudentDaoimpl () ؛ student student = new student () ؛ student.setStudentName ("jack") ؛ student.getStudentId ()) ؛ system.out.println ("---- عرض الطلاب ------") ؛ قائمة <Tudtude> studentdlist = studentDao.SelectAllStudents () ؛ لـ (int i = 0 ، length = studentlist.size () ؛ i <length ؛ i ++) system.out.println (studentlist.get (i)) ؛}} يجب أن تكون النتيجة فارغة.
لقد قلت أن هذا المثال هو مراجعة ومقدمة لمحتوىنا اليوم. والسبب في ذلك فارغ هو أن عملية الإدراج قد تم ، لكن MyBatis لن يساعدنا في تقديم الأشياء تلقائيًا ، لذا فإن ما يتم عرضه فارغ بشكل طبيعي. في هذه الحالة ، يجب عليك تقديم المعاملة يدويًا من خلال طريقة الالتزام () لـ SQLSession ، أي فتح التعليق على السطر 17 من فئة StudentDaoimpl.java.
بعبارة أكثر ، بالإضافة إلى عملية إدخال MyBatis الأساسية ، يحتوي هذا المثال أيضًا على وظيفة إرجاع معرف المفتاح الأساسي المدرج على أساس الإدراج.
بعد ذلك ، استخدم Spring لإدارة MyBatis Things ، والتي تعد أيضًا ممارسة إدارة الأشياء الأكثر استخدامًا في التطوير على مستوى المؤسسة.
إدارة الأشياء mybatis مع الربيع
هناك العديد من المقالات على الإنترنت لشرح ذلك ، وقد بحثت كثيرًا ، لكن إما نسخ ولصق بعضها البعض أو لا أشرح المثال بأكمله بوضوح. من خلال هذا الجزء ، أحاول شرح كيفية استخدام الربيع لإدارة أشياء MyBatis.
باستخدام Spring لإدارة أشياء MyBatis ، بالإضافة إلى حبوب الوحدة النمطية اللازمة لـ Spring ، والسياق ، والأساسي ، والتعبير ، والعموم ، يلزم أيضًا المحتوى التالي:
(1) mybatis-spring-1.x.0.jar ، هذه حزمة جرة ضرورية لتكامل الربيع mybatis.
(2) يمكن استخدام تجمع اتصال قاعدة البيانات ، DBCP و C3P0. أنا أستخدم Druid Alibaba هنا
(3) JDBC ، TX ، AOP ، JDBC هو في الأساس ناهيك. يتم استخدام TX و AOP لأن دعم Spring لإدارة شيء MyBatis يتحقق من خلال AOP
(4) aopalliance.jar ، هذه حزمة جرة ضرورية لاستخدام الربيع aop
سيتم تنزيل حزمة JAR أعلاه باستخدام Maven. يمكن لأولئك الذين لم يستخدموا Maven تنزيله على CSDN. يمكنك البحث عنها.
في ملف التكوين config.xml من mybatis ، يمكن إزالة اتصال JDBC ، ويمكن الاحتفاظ فقط بجزء typealiases:
<؟ type = "org.xrq.domain.student"/> </typeAliases> </iscification>
اسمحوا لي أن أذكر أن myBatis ملف تكوين آخر student_mapper.xml لا يلزم تغييره. بعد ذلك ، اكتب ملف تكوين الربيع ، وأسميه spring.xml:
<؟ Xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" ork.org/schema/beans"xmlns:Context="http://www.springframework.org/schema/context"x mlns: tx = "http://www.springframework.org/schema/tx" http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhtp://www.springframework.org/schema/context http://www.springframework.org/Schema/Spring-Coxt-xt http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">< !- تكوين التعليقات-> <tx: encared-driven-canager = "org manager =" org. /> <!-تجمع اتصال قاعدة البيانات ، استخدم druid من Alibaba-> <bean id = "dataSource" init-method = "init" DRIDER-method = "close"> <property name = "url" value = "jdbc: mysql: // localhost: 3306 /test" /> <property name "value" </bean> <bean id = "sqlsessionfactory"> <property name = "configlocation" value = "classpath: config.xml" /> <property name = "mapperlocations" value = "classPath:*_ mapper.xml name = "datasource" ref = "datasource"/> </bean> </bans>
يتضمن ذلك بشكل أساسي مدير المعاملات ومجمع اتصال قاعدة البيانات.
بالإضافة إلى ذلك ، نرى أن هناك sqlsessionfactory. يجب أن يكون الأصدقاء الذين استخدموا MyBatis على دراية بهذا الفصل. يتم استخدامه لتكوين بيئة MyBatis. هناك اثنين من سمات configlocation و mapperlocations في sqlsessionfactory. كما يوحي الاسم ، فإنه يمثل موقع ملف التكوين وموقع ملف التعيين. هنا ، طالما تم تكوين المسار بشكل صحيح ، سيقوم Spring تلقائيًا بتحميل ملفين التكوين هذين.
ثم ما تريد تعديله هو فئة تنفيذ DAO. في هذا الوقت ، لم تعد ترث فئة MyBatisutil السابقة ، ولكن ترث sqlsessiondaosupport.java من mybatis-spring-1.x.0.jar. الرمز المحدد كما يلي:
repositorypublic class studentdaoimpl يمتد sqlsessionDaoSupport ينفذ studentdao {private static final string namepace = "studentMapper. SelectAllStudents () {return getSqlSession (). selectlist (مساحة الاسم + "SelectAllStudents") ؛} int insertstudent (الطالب الطالب) {return getSqlSession ()يتم استخدام اثنين من التعليقات التوضيحية هنا ، دعنا نتحدث عنهما بشكل منفصل.
(1) repository ، هذا التعليق التوضيحي هو نفسه @component و Controller وشروحنا الأكثر شيوعًا ، والتي يمكن أن تعلن جميعها فصلاً في فصل الربيع. خلافاتهم ليست في دلالات محددة ، ولكن أكثر في وضع التعليق التوضيحي. كما ذكرنا من قبل ، تركز التطبيقات على مستوى المؤسسة على مفهوم التنمية الهرمية ، لذلك ينبغي فهم هذه التعليقات التوضيحية الأربعة المماثلة على النحو التالي:
•@توضيح ropository يتوافق مع طبقة الثبات ، وهي طبقة DAO ، والتي تستخدم للتفاعل مباشرة مع قاعدة البيانات. بشكل عام ، تتوافق الطريقة مع عبارة SQL محددة
•@Service Service ، الذي يتوافق مع طبقة الخدمة ، وهي طبقة الخدمة ، هي وظيفة الجمع بين عبارات SQL واحدة/متعددة. بالطبع ، إذا كان الأمر بسيطًا ، فستسمي مباشرة طريقة طبقة DAO.
•@توضيح وحدة التحكم ، والتي تتوافق مع طبقة التحكم ، أي طبقة التحكم في وضع تصميم MVC. تتمثل وظيفتها في تلقي طلبات المستخدم ، والاتصال بخدمات مختلفة للحصول على البيانات وفقًا للطلبات ، ودمج البيانات وفقًا للمتطلبات ولفها مرة أخرى إلى الواجهة الأمامية.
•@شرح مكون ، والذي يتوافق أكثر مع مفهوم المكون. إذا كان الفاصوليا لا يعلم أنه ينتمي إلى طبقة ، فيمكنك استخدام التعليق التوضيحي @component للتعليق.
يعكس هذا أيضًا إحدى مزايا التعليقات التوضيحية: رؤية الاسم ومعرفة المعنى ، أي رؤية هذا التعليق التوضيحي ، أنت تعرف تقريبًا وظيفة هذه الفئة ، أي وضعه في المشروع بأكمله.
(2) Resource ، هذا التعليق التوضيحي والشرح Autowired لهما نفس المعنى ، ويمكن حقن كلاهما تلقائيًا بسمات السمات. نظرًا لأن SQLSessionFactory هو جوهر MyBatis ، فقد تم إعلانه في spring.xml. لذلك ، يتم حقن الفول مع معرف "SQLSessionFactory" هنا من خلال شرح Resource. بعد ذلك ، يمكن الحصول على SQLSession من خلال طريقة getSQlSession () ويتم إضافة البيانات وحذفها وتعديلها والتحقق منها.
أخيرًا ، ليس الأمر أكثر من كتابة فصل اختبار للاختبار:
{public {public static void main (string [] args) {applicationContext ac = new ClassPathmLapplicationContext ("spring.xml") ؛ studentdao studentdao = (studentdao) ac.getBean ("studentdaoimpl studentdao.insertStudent (student) ؛ system.out.println ("j =" + j + "/n")؛system.out.println("-display students -------") لـ (int i = 0 ، length = studentlist.size () ؛ i <length ؛ i ++) system.out.println (studentlist.get (i)) ؛}} نظرًا لأن فئة studentdaoimpl.java تستخدم التعليق التوضيحي repository ولا يحدد الاسم المستعار ، فإن اسم studentdaoimpl.java في حاوية الربيع هو "الحروف الأولى الصغيرة + الحروف المتبقية" ، أي ، "StudentDaoimpl".
بعد تشغيل البرنامج ، يمكنك أن ترى أن الطالب الجديد قد تم اجتيازه على وحدة التحكم ، أي تم إدخال الطالب مباشرة في قاعدة البيانات. لم يكن هناك التزام أو تراجع في العملية برمتها. تم تنفيذ كل منهم بحلول الربيع. هذا لاستخدام الربيع لإدارة الأشياء على MyBatis.
PostScript
يستعرض هذه المقالة الاستخدام الأساسي لـ MyBatis ويستخدم Spring لإدارة الأشياء على MyBatis ، ويعطي أمثلة أكثر تفصيلاً. يمكن للأصدقاء المحتاجين دراسته وفقًا للرمز. استنادًا إلى هذه المقالة ، سأكتب مقالًا لاحقًا لشرح تنفيذ إدارة شيء Multi-Data بين الجداول الفردية والجداول المتعددة. هذا المطلب هو أيضا شرط شائع في المؤسسات والتطبيقات.