1. مقدمة إلى MyBatis
MyBatis هو إطار طبقة استمرار ممتازة يدعم استعلامات SQL العادية والإجراءات المخزنة ورسم الخرائط المتقدمة.
يقوم MyBatis بإلغاء الإعدادات اليدوية لجميع كود JDBC تقريبًا والمعلمات وتغليف البحث في مجموعة النتائج.
يمكن لـ MyBatis استخدام XML البسيط أو التعليقات التوضيحية للتكوين ورسم الخرائط الخام ، ورسم الخرائط و Pojos (كائنات Java القديمة العادية) في سجلات في قاعدة البيانات.
JDBC -> dbuTils (congulation auto) -> mybatis -> hibernate
يكتب MyBatis SQL في XML ثم يصل إلى قاعدة البيانات.
2. ابدأ مع MyBatis
2.1. إنشاء مشروع جافا جديد
أضف MyBatis و MySQL Driver Jar: mybatis-3.1.1.jar ، mysql-connector-java-5.1.7-bin.jar
2.2. إنشاء جدول جديد
قم بإنشاء قاعدة بيانات myBatis ؛ استخدم myBatis ؛ إنشاء مستخدمي الجدول (ID int int into_increment ، name varchar (20) ، Age int) ؛ insert في قيم المستخدمين (الاسم ، العمر) ('tom' ، 12) ؛ إدراج في المستخدمين (الاسم ، العمر) ('jack' ، 11) ؛2.3. إضافة ملف تكوين mybatis conf.xml
<؟ id = "development"> <TransactionManager type = "jdbc" /> <dataSource type = "prouded"> <property name = "driver" value = "com.mysql.jdbc.driver" /> <property name = "erl" value = "jdbc: mysql: // localhost: 3306 /mybatis name = "password" value = "root"/> </taasource> </evality> </evalitments> </configuration>
2.4. تحديد فئة الكيان المقابلة للجدول
مستخدم الفئة العامة {private int id ؛ اسم السلسلة الخاصة ؛ العصر الخاص2.5. حدد ملف تعيين SQL usermapper.xml الذي يدير جدول المستخدمين
<؟ مساحة الاسم = "com.atguigu.mybatis_test.test1.usermapper"> <select id = "getUser" parametertype = "int" resultType = "com.atguigu.mybatis_test.test1.user"> select * من المستخدمين حيث id =#id} </select> </mapper>
2.6. سجل ملف usermapper.xml في ملف conf.xml
<mappers> <mapper resource = "com/atguigu/mybatis_test/test1/usermapper.xml"/> </nybed>
2.7. كتابة رمز الاختبار: تنفيذ بيانات حدد محددة
اختبار الفئة العامة {public static void main (string [] args) يلقي ioException {String Resource = "conf.xml" ؛ // تحميل ملف التكوين الخاص بـ MyBatis (كما أنه يقوم بتحميل ملف التعيين المرتبط) قارئ reader = جديد. SQLSessionFactoryBuilder (). Build (reader) ؛ // إنشاء جلسة SQLSessionSQlSession التي يمكنها تنفيذ SQL في ملف التعيين = SessionFactory.OpenSession () ؛ // تعيين SQL Identification String string string Quiter Querer. sqluser user = session.selectone (بيان ، 1) ؛ system.out.println (user) ؛}}3. قم بتشغيل جدول المستخدمين
3.1.xml تنفيذ
3.1.1. تحديد ملف SQL Mapping XML:
<insert id = "insertUser" parametertype = "com.atguigu.ibatis.bean.user"> إدراج في المستخدمين (الاسم ، العمر) القيم (#{name} ،#{Age}) ؛ </insert> <delete id = "deleteuser" parametertype = "int" parametertype = "com.atguigu.ibatis.bean.user"> تحديث المستخدمين تعيين name =#{name} ، Age =#{Age} حيث id =#{id} </update> <حدد ID = "SelectUser" parametertype = "int" resulttype = "com.atguigu.ibatis.bean.user" id =#{id} </select> <select id = "selectallusers" resulttype = "com.atguigu.ibatis.bean.user"> حدد * من المستخدمين </select>3.1.2. سجل ملف التعيين هذا في config.xml
<mapper resource = "com/atguigu/ibatis/bean/usermapper.xml"/>
3.1.3. ودعا في داو
المستخدم العام getUserById (int id) {sqlsession session = sessionfactory.opensession () ؛ user user = session.selectone (uri+". selectuser" ، id) ؛ return user ؛}3.2. تنفيذ التعليقات التوضيحية
3.2.1. تحديد واجهة رسم خرائط SQL
الواجهة العامة usermapper {insert ("أدخل في المستخدمين (الاسم والعمر) قيم (#{name} ،#{Age})") public int insertUser (user user) ؛@delete ("delete from user where =#{id}") public int deleteuserbyed (int id) ؛ expturn ID =#{id} ") public int updateUser (user user) ؛@select (" select * from user where id =#{id} ") user getUserById (int id) ؛@select (3.2.2. سجل واجهة التعيين هذه في التكوين
<mapper/>
3.2.3. ودعا في داو
المستخدم العام getUserById (int id) {sqlsession session = sessionfactory.opensession () ؛ usermapper mapper = session.getMapper (usermapper.class) ؛ مستخدم المستخدم = mapPper.getuserById (id) ؛ إرجاع المستخدم ؛}4. عدة أماكن يمكن تحسينها
4.1. يمكن وضع التكوين للاتصال بقاعدة البيانات في ملف الخصائص بشكل منفصل.
## db.properties <br> <properties resource = "db.properties" /> <property name = "driver" value = "$ {driver}" /> <property name = "url" value = "$ {url}" /> <property name = "username" value = {username} " />4.2. حدد الاسم المستعار لفئات الكيانات وتبسيط المراجع في ملفات SQL Mapping XML
<TypeAliases> <typealias type = "com.atguigu.ibatis.bean.user" alias = "_ user"/> </typealiases>
4.3. يمكنك إضافة ملف تكوين log4j ضمن SRC لطباعة معلومات السجل
1. أضف جرة:
log4j-1.2.16.jar
2.1. log4j.properties (الطريقة 1)
log4j.properties ، log4j.rootlogger = debug ، console#consomelog4j.appender.console = org.apache.log4j.consoleAppenderlog4j.appender.console.layout = org.apache.log4j.patternlayoutlog4j.apnender.console [٪ c] - ٪ m ٪ nlog4j.logger.java.sql.resultset = infolog4j.logger.org.apache = infolog4j.logger.java.sql.connection = debuglog4j.logger.java.sql.statement = debuglog4j.loggerStateMger.loggareparedStateMent.OloggareparedStateMent.loggareParedStateMent.OlogAva
2.2. log4j.xml (الطريقة 2)
<؟ value = "٪-5p ٪ d {mm-dd hh: mm: ss ، ss} ٪ m (٪ f: ٪ l) /n" /> < /synout> < /appender> <logger name = "java.sql"> <level value = "debug" /> < /logger> /> </dgger> <rout> <level value = "debug" /> <appender-Ref Ref = "stdout" /> </route> </log4j: configuration>5. حل النزاعات بين أسماء المجال وأسماء سمات فئة الكيان
5.1. إعداد الجداول والحقول
إنشاء أوامر الجدول (order_id int int key into_increment ، order_no varchar (20) ، order_price float) ؛ insert في الطلبات (order_no ، order_price) ("aaaa '، 23) ؛ إدراج في الطلبات (order_no ، order_price) قيم (' bbb '، 33) 22) ؛5.2. تحديد فصول الكيانات
ترتيب الفئة العامة {private int id ؛ private string orderno ؛ Private Float Price ؛}5.3. تنفيذ استعلام getorderbyid (id):
الطريقة 1: تحديد الاسم المستعار في عبارات SQL
<حدد ID = "celectorder" parametertype = "int" resultType = "_ order"> حدد order_id id ، order_no orderno ، order_price price from orders where order_id =#{id} </select>الطريقة 2: من خلال <dredeMap>
<حدد ID = "celectorderResultMap" parametertype = "int" resultmap = "orderResultMap"> حدد * من الطلبات التي يكون فيها order_id =#{id} </select> <resultmap type = "_ order" id = "orderresultmap"> <id propert column = "order_price"/> <result property = "price" column = "order_price"/> <RepresseMap>6. تنفيذ استعلام جدول الجمعية
6.1. جمعية فردية
6.1.1. اقتراح المتطلبات
معلومات فئة الاستعلام بناءً على معرف الفصل (معلومات مع المعلم)
6.1.2. إنشاء جداول وبيانات
إنشاء معلم الجدول (T_ID int المفتاح الأساسي AUTO_INCREMENT ، T_NAME VARCHAR (20)) ؛ إنشاء فئة الجدول (C_ID int المفتاح الأساسي AUTO_INCREMENT ، C_NAME varchar (20) ، Teacher_id int) ؛ Alter Table Class ADD FK_TEACHER_ID VOIRINAL KEY (TEATHER_ID) مراجع المعلم (T_ID) ؛ أدخل في قيم المعلم (T_Name) ('ls1') ؛ إدراج في قيم المعلم (t_name) ('ls2') ؛ insert في قيم الفصل (c_name ، المعلم_) ('bj_a' ، 1) ؛ إدراج في الفئة (c_name ، المعلم) القيم ('bj_b' ، 2) ؛6.1.3. تحديد فصول الكيان:
مدرس الفصل العام {private int id ؛ اسم السلسلة الخاصة ؛} فصول الدرجة العامة {private int id ؛ اسم سلسلة خاصة ؛ مدرس خاص ؛}6.1.4. تحديد ملف التعيين SQL ClassMapper.xml
<!-الطريقة 1: النتائج المتداخلة: استخدم خرائط النتائج المتداخلة لمعالجة مجموعة فرعية من نتائج المفصل المكررة حدد * من الفئة C ، المعلم T ، الطالب S حيث c.teacher_id = t.t_id و c.c_id = s.class_id و c.c_id = 1-> <select id = "getClass3" parametertype = c.teacher_id = t.t_id و c.c_id = s.class_id و c.c_id = 1-> <select id = "getClass3" parametertype = "int" resultmap = "classresultmap3"> select * من الفئة C c.c_id =#{id} </select> <resultmap type = "_ classes" id = "classResultMap3"> <id property = "id" column = "c_id"/> <result property = "name" column = "c_id"/> <ensivand property = "teacher" column = "javatype =" property = "name" column = "t_name"/> <result property = "name" column = "t_name"/> </ensivers column = "s_name"/> </collection> </resultmap> <!-الطريقة 2: الاستعلام المتداخل: إرجاع النوع المعقد المتوقع عن طريق تنفيذ عبارة تعيين SQL أخرى حدد * من الفصل حيث c_id = 1 ؛ حدد * من المعلم حيث t_id = 1 // 1 هي قيمة المعلم الذي تم الحصول عليه من خلال التحويل السابق SELECT * id = "getClass4" parametertype = "int" resultMap = "classResultMap4"> حدد * من الفئة حيث c_id =#{id} </select> <resultmap type = "_ classes" id = "classresultmap4"> id property = "id" column = "c_id"/> column = "teacher_id" javatype = "_ teacher" select = "getTeacher2"> </isnivers المعلم حيث T_ID =#{id} </select> <select id = "getStudent" parametertype = "int" resulttype = "_ student"> حدد معرف S_ID ، اسم S_NAME من الطالب حيث class_id =#{id} </select>6.1.5. امتحان
testpublic void testoo () {sqlsession sqlsession = factory.opensession () ؛ classes c = sqlsession.selectone ("com.atguigu.day03_mybatis.test5 Factory.OpenSession () ؛ الفئات C = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass2" ، 1)6.2. جمعية واحدة إلى الرجل
6.2.1. اقتراح المتطلبات
الاستعلام عن معلومات الفصل المقابلة وفقًا لـ ClassID ، بما في ذلك الطلاب والمعلمين
6.2.2. إنشاء جداول وبيانات:
قم بإنشاء طالب جدول (S_ID int المفتاح الأساسي AUTO_INCREMENT ، s_name varchar (20) ، class_id int) ؛ insert في الطالب (s_name ، class_id) القيم ('xs_a' ، 1) القيم الطالب (s_name ، class_id) ('xs_d' ، 2) ؛ إدراج في قيم الطالب (s_name ، class_id) ('xs_e' ، 2) ؛ إدراج في قيم الطالب (s_name ، class_id) ('xs_f' ، 2) ؛6.2.3. تحديد فصول الكيانات
طالب الطبقة العامة {private int id ؛ اسم سلسلة خاصة ؛} فصول الدرجة العامة {private int id ؛ اسم سلسلة خاصة ؛ مدرس خاص ؛ قائمة خاصة <Tustudent>}}6.2.4. تحديد ملف التعيين SQL ClassMapper.xml
<!-الطريقة 1: النتائج المتداخلة: استخدم خرائط النتائج المتداخلة لمعالجة مجموعة فرعية من نتائج المفصل المكررة حدد * من الفئة C ، المعلم T ، الطالب S حيث c.teacher_id = t.t_id و c.c_id = s.class_id و c.c_id = 1-> <select id = "getClass3" parametertype = c.teacher_id = t.t_id و c.c_id = s.class_id و c.c_id = 1-> <select id = "getClass3" parametertype = "int" resultmap = "classresultmap3"> select * من الفئة C c.c_id =#{id} </select> <resultmap type = "_ classes" id = "classResultMap3"> <id property = "id" column = "c_id"/> <result property = "name" column = "c_id"/> <ensivand property = "teacher" column = "javatype =" property = "name" column = "t_name"/> <result property = "name" column = "t_name"/> </ensivers column = "s_name"/> </collection> </resultmap> <!-الطريقة 2: الاستعلام المتداخل: إرجاع النوع المعقد المتوقع عن طريق تنفيذ عبارة تعيين SQL أخرى حدد * من الفصل حيث c_id = 1 ؛ حدد * من المعلم حيث t_id = 1 // 1 هي قيمة المعلم الذي تم الحصول عليه من خلال التحويل السابق SELECT * id = "getClass4" parametertype = "int" resultMap = "classResultMap4"> حدد * من الفئة حيث c_id =#{id} </select> <resultmap type = "_ classes" id = "classresultmap4"> id property = "id" column = "c_id"/> column = "teacher_id" javatype = "_ teacher" select = "getTeacher2"> </isnivers المعلم حيث T_ID =#{id} </select> <select id = "getStudent" parametertype = "int" resulttype = "_ student"> حدد معرف S_ID ، اسم S_NAME من الطالب حيث class_id =#{id} </select>6.2.5. امتحان
testpublic void testom () {sqlsession sqlsession = factory.opensession () ؛ classes c = sqlsession.selectone ("com.atguigu.day03_mybatis.test.test5. Factory.OpenSession () ؛ الفئات C = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass4" ، 1)7. SQL الديناميكي والاستعلام الغامض
7.1. متطلبات
قم بتنفيذ مستخدم الاستعلام متعدد الشرط (اسم المطابقة الغامضة ، والسن بين الحد الأدنى للقيمة المحددة والقيمة القصوى).
7.2. إعداد قاعدة البيانات والجداول
قم بإنشاء Table D_USER (ID int int key ato_increment ، name varchar (10) ، Age int (3)) ؛ insert في قيم D_USER (الاسم ، العمر) ('TOM' ، 12) ؛ أدخل في D_USER (الاسم ، العمر) قيم ('bob' ، 13) ؛ إدراج في D_USER (الاسم ، العمر) القيم ('جاك' ، 18) ؛ 7.37.4. فئة كيان الجدول
معرف int الخاص ؛ اسم السلسلة الخاصة ؛ العصر الخاص ؛
7.5.Usermapper.xml (ملف MAP)
<؟ مساحة الاسم = "com.atguigu.day03_mybatis.test6.usermapper"> <select id = "getUser" parametertype = "com.atguigu.day03_mybatis.test6.conditionUser" regirtype = "com.atguigu.day03_mybatis.test6.user العمر> =#{minage} والعمر <=#{maxage} <if test = 'name! = "٪ null ٪"'> والاسم مثل#{name} </if> </select> </mapper>7.6.Usertest (اختبار)
الطبقة العامة usertest {public static void main (string [] args) remrows ioException {reader reader = resources.getResourCeasReader ("conf.xml") ؛ sqlsessionfactory sessionfactory = sqlsessionfactorybuilder (). build (reader) ؛ "com.atguigu.day03_mybatis.test6.usermapper.getuser" ؛ قائمة <Sether> list = sqlsession.selectlist (بيان ، حالة جديدة ("٪ a ٪" ، 1 ، 12)) ؛ system.out.println (list) ؛}}علامات SQL الديناميكية متوفرة في MyBatis
8. استدعاء الإجراءات المخزنة
8.1. تقديم طلب
الاستعلام عن عدد الذكور أو الإناث ، إذا كانت الواردة 0 ، فإن الإناث على خلاف ذلك الذكور
8.2. إعداد جداول قاعدة البيانات والإجراءات المخزنة:
قم بإنشاء جدول P_USER (ID int int key inso_increment ، name varchar (10) ، sex char (2)) ؛ insert في قيم p_user (الاسم ، الجنس) ('a' ، "male") ؛ أدخل في p_user (الاسم ، الجنس) قيم ('b' ، "أنثى") ؛ أدخل في قيم p_user (الاسم ، الجنس) ('c' ، "ذكر") ؛ #الإجراء المخزّن (ابحث عن عدد الذكور أو الإناث ، إذا كانت الواردة 0 ، فإن الإناث تكون على خلاف ذلك ذكور) من mybatis.p_user حيث p_user.sex = 'male' في user_count ؛ end if ؛ end $#call stored oncedure delimiter ؛ set user_count = 0 ؛ call mybatis.ges_user_count (1 ، user_count) ؛ select user_count ؛8.3. إنشاء فئة الكيان من الجدول
مستخدم الفئة العامة {معرف السلسلة الخاصة ؛ اسم سلسلة خاصة ؛ سلسلة جنسية خاصة ؛}8.4.usermapper.xml
<mapper namespace = "com.atguigu.mybatis.test7.usermapper"> <!-الاستعلام يحصل على عدد من الرجال أو النساء. إذا كانت الواردة 0 ، فإن الإناث هي الذكور. id = "getCountMap"> <parameter property = "sex_id" mode = "in" jdbctype = "integer"/> <parameter property = "user_count" mode = "out"
8.5. امتحان
خريطة <string ، integer> parammap = new hashmap <> () ؛ parammap.put ("sex_id" ، 0) ؛ session.selectone (بيان ، parammap) ؛ usercount usercount = parammap.get ("user_count") ؛ system.out.println (userCount) ؛9. ذاكرة التخزين المؤقت MyBatis
9.1. فهم ذاكرة التخزين المؤقت MyBatis
تمامًا مثل معظم أطر طبقة الثبات ، يوفر MyBatis أيضًا دعمًا لخزائن L1 و L2.
1. ذاكرة التخزين المؤقت من المستوى 1: HashMap المحلي ذاكرة التخزين المؤقت القائمة على PerpetualCache ، نطاق التخزين الخاص به هو الجلسة. بعد تدفق الجلسة أو الإغلاق ، سيتم مسح جميع ذاكرة التخزين المؤقت في الجلسة.
2. آلية ذاكرة التخزين المؤقت الثانوية هي نفس آلية ذاكرة التخزين المؤقت الأساسية. بشكل افتراضي ، يستخدم أيضًا تخزين PerpetualCache و HashMap. الفرق هو أن نطاق التخزين الخاص به هو Mapper (مساحة الاسم) ، ويمكنه تخصيص مصدر التخزين ، مثل Ehcache.
3. بالنسبة لآلية تحديث بيانات ذاكرة التخزين المؤقت ، عندما يتم تنفيذ نطاق معين (نطاق جلسة ذاكرة التخزين المؤقت من المستوى الأول/مساحات ذاكرة التخزين المؤقت من المستوى الثاني) في عمليات C/U/D ، سيتم مسح جميع ذاكرة التخزين المؤقت في هذا النطاق افتراضيًا.
9.2.MyBatis المستوى 1 ذاكرة التخزين المؤقت
9.2.1. الاستعلام بناءً على المهمة
الاستعلام عن كائن سجل المستخدم المقابل بناءً على المعرف.
9.2.2. إعداد جداول قاعدة البيانات والبيانات
إنشاء الجدول C_USER (ID int int key ato_increment ، اسم varchar (20) ، العمر int) ؛ إدراج في C_USER (الاسم ، العمر) قيم ('TOM' ، 12) ؛ insert في c_user (الاسم ، العمر) قيم ('jack' ، 11) ؛9.2.3. إنشاء فئة الكيان من الجدول
مستخدم الفئة العامة ينفذ مسلسل {private int id ؛ اسم السلسلة الخاصة ؛ العصر الخاص ؛9.2.4.usermapper.xml
<؟ مساحة الاسم = "com.atguigu.mybatis.test8.usermapper"> <select id = "getUser" parametertype = "int" resultType = "_ cuser"> select * from c_user where id =#{id} </select> <update id = "update update" plarmeter = العمر =#{Age} حيث id =#{id} </update> </mapper>9.2.5. الاختبار
/** ذاكرة التخزين المؤقت من المستوى 1: أي ، ذاكرة التخزين المؤقت على مستوى الجلسة (بشكل افتراضي)*/@@testpublic void testcache1 () {sqlsession session = mybatisutils.getssession () ؛ string state = "com.atguigu.mybatis.test8.usermapper.getuser" سيتم استخدام ذاكرة التخزين المؤقت للمستوى 1 افتراضيًا*//*user = session.selectone (بيان ، 1) ؛ system.out.println (user) ؛*//*1. يجب أن تكون نفس الجلسة. إذا تم إغلاق كائن الجلسة () ، فمن المستحيل استخدامه*//*الجلسة = myBatisutils.getSession () ؛ المستخدم = session.selectone (بيان ، 1) ؛ system.out.println (المستخدم) ؛*//*2. شروط الاستعلام هي نفسها*//*user = session.selectone (بيان ، 2) ؛ system.out.println (المستخدم) ؛*//*3. لم يتم تنفيذ session.clearcache () لتنظيف ذاكرة التخزين المؤقت*//*session.clearcache () ؛ user = session.selectone (بيان ، 2) ؛ system.out.println (المستخدم) ؛*//*4. لا توجد عمليات تمت إضافتها وحذفها وتعديلها (ستنظف هذه العمليات ذاكرة التخزين المؤقت)*//*session.update ("com.atguigu.mybatis.test8.usermapper.updateuser" ، مستخدم جديد (2 ، "مستخدم" ، 23)9.3.mybatis المستوى 2 ذاكرة التخزين المؤقت
9.3.1. أضف <cache> في usermapper.xml
<mapper namespace = "com.atguigu.mybatis.test8.usermapper"> <cache/>
9.3.2. الاختبار
/** اختبار المستوى 2 ذاكرة التخزين المؤقت*/@testpublic void testcache2 () {string state = "com.atguigu.mybatis.test8.usermapper.getuser" ؛ sqlsession session = mybatisutils.getsession () ؛ user user = session. session2 = mybatisutils.getSession () ؛ user = session29.3.3. ملاحظات تكميلية
1. سيتم تخزين جميع عبارات تحديد جميع البيانات في ملف التعيين.
2. قم بتخطيط جميع الإدراج وتحديث وحذف العبارات في ملف البيان سيقوم بتحديث ذاكرة التخزين المؤقت.
3. سيتم إعادة محاكمة ذاكرة التخزين المؤقت باستخدام الخوارزمية الأقل استخدامًا (LRU ، الأقل استخدامًا).
4. سيتم تحديث ذاكرة التخزين المؤقت وفقًا للفاصل الزمني المحدد.
5. سوف تخزين ذاكرة التخزين المؤقت 1024 كائنات
<cacheeviction = "FIFO" // استراتيجية إعادة التدوير هي الأولى في Flushinterval = "60000" // تحديث أوتوماتيكي 60ssize = "512" // cache حتى 512 كائن مرجع
10. تكامل الربيع mybatis
10.1. أضف جرة
【mybatis】
mybatis-3.2.0.jar
Mybatis-spring-1.1.1.jar
log4j-1.2.17.Jar
【ربيع】
Spring-AOP-3.2.0.RELEASE.JAR
الربيع beans-3.2.0.release.jar
Spring-Context-3.2.0.Release.Jar
Spring-Core-3.2.0.Release.Jar
Spring-Expression -3.2.0.Release.Jar
Spring-JDBC-3.2.0.RELEASE.JAR
Spring-Test-33.2.4.Release.Jar
Spring-TX-3.2.0.RELEASE.JAR
Aopalliance -1.0.Jar
cglib-nodep -2.2.3.jar
العموم-الانحناء -1.1.1.jar
【حزمة برنامج تشغيل mysql】
MySQL-Connector-Java-5.0.4-bin.jar
10.2. جداول قاعدة البيانات
إنشاء جدول S_USER (user_id int auto_increment المفتاح الأساسي ، user_name varchar (30) ، تاريخ user_birthday ، user_salary double)
10.3. فئة الكيان: المستخدم
مستخدم الفئة العامة {private int id ؛ اسم سلسلة خاصة ؛ عيد ميلاد خاص ؛ راتب مزدوج خاص ؛ // set ، الحصول على الطريقة}10.4.dao واجهة: UserMapper (xxxmapper)
الواجهة العامة usermapper {void save (user user) ؛ void update (user user) ؛ void delete (int id) ؛ Userbyid (int id) ؛ argen <Sether> findall () ؛}10 10.5
<؟ مساحة name.atguigu.mybatis.test9 column = "user_salary" property = "salary"/> <ResultMap> <!-احصل على المعرف بعد إدخال البيانات-> <insert id = "save" keycolumn = "user_id" keyproperty = "id" usegeneratedKyys = "true"> insert in S_USER (user_name ، user_birthday ، user_salary) القيم ( #{name} ، #{birthday} ، #{salary}) </insert> <update id = "update"> update s_userset user_name = #{name} ، user_birthday = #} #{id} </update> <delete id = "delete"> delete من s_userwhere user_id = #{id} </delete> <select id = "findbyid" resultmap = "userResult"> select *من s_userwhere user_id = #{id} </select> <selectall id = S_USER </select> </mapper>10.6.SPRING FILE
<؟ xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3 "xmlns: context =" http://www.springframework.org/schema/context "xmlns: tx =" http://www.springframework.org/schema/tx "xsi: amework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhtp://www.springframework.org/schema/context/sprin g-context-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsdhtp: //www.springframework.org/schema/tx/spring-tx-3.2.xsd ">!- 1. مصدر البيانات: drivermanagerDataSource -> <bean id = "datasource" class = "org.springframework.jdbc.datasource.drivermanagerdataSource"> <property name = "driverClassName" value = "com.mysql.jdbc.driver value = "jdbc: mysql: // localhost: 3306/mybatis"/> <property name = "username" value = "root"/> <property name = "password" value = "root"/> </bean> <!-2. MyBatis 'Sqlsession Factory: SqlSessionFactoryBeanDataSource/typealiasespackage-> <bean id = "sqlsessionfactory"> <property name = "dataSource" ref = "datasource"/> <property name = "typealiasespackage" value = "com.atigu.spring_mybatis <! يقوم MyBatis تلقائيًا بمسح ملفات التعيين SQL: MappersCannerConfigurersQlSessionFactory/BasePackage-> <bean> <property name = "basepackage" value = "com.atigu.spring_mybatis2 الإدارة: datasourCeTransActionManager-> <bean id = "txmanager"> <property name = "dataSource" ref = "datasource"/> </bean> <!-5. استخدم المعاملة الإعلامية-> <tx: معاملة تعليمية-تعويض-"txmanager"/> </beans
10.7.mybatis ملف التكوين: mybatis-config.xml
<؟ غير ضروري-> <!-قم بتعيين ملف التكوين الخارجي-> <!-تعيين اسم فئة-> <!-تعيين بيئة اتصال قاعدة البيانات-> <!-ملف التعيين-> </configuration>
10.8. امتحان
Runwith (springJunit4ClassRunner.class) // استخدم SpringTest اختبار إطار عمل contextConfiguration ("/beans.xml") Date () delete () {usermapper.delete (3) ؛}@testpublic void findbyid () {user user = usermapper.findbyid (1) ؛ system.out.println (user) ؛}@testpublic void bindall () {list <ser> users = usermapper.findall () ؛ما سبق هو المقدمة السريعة لـ MyBatis (تحليل موجز وبسيط وسهل الفهم) الذي قدمه المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!