2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《MyBatis theory 40 प्रश्न》अस्मिन् निम्नलिखित २ लेखाः सन्ति:
नूतनं टैगं योजयन्तु:keyProperty=“ID”
तत् ।
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) प्रश्नं कृत्वा SQL क्षेत्रनामस्य उपनामं सत्तावर्गस्य विशेषतानाम्ना सह सङ्गतं कर्तुं कथने क्षेत्रनामस्य उपनाम परिभाषयन्तु ।
<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
select order_id id, order_no orderno, order_price price form orders
where order_id=#{id};
</select>
(2) उत्तीर्ण <resultMap>
क्षेत्रनामानां तथा सत्तावर्गविशेषणनामानां मध्ये एकैकस्य पत्राचारस्य नक्शाङ्कनार्थम् ।
<select id="getOrder" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="order_id">
<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
<result property="orderno" column="order_no" />
<result property="price" column="order_price" />
</reslutMap>
(1) अन्तरफलक कार्यान्वयन वर्ग उत्तराधिकार SqlSessionDaoSupport
: एतस्य पद्धतेः उपयोगाय भवद्भिः लिखितव्यम् mapper
अन्तरफलकम्, २.mapper
अन्तरफलक कार्यान्वयन वर्ग, २.mapper.xml
प्रलेख।
sqlMapConfig.xml
मध्यम विन्यासmapper.xml
s स्थितिः ।<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
अन्तरफलकम् ।SqlSessionDaoSupport
。mapper
विधिषु उपयोक्तुं शक्यतेthis.getSqlSession()
दत्तांशसंयोजनं, विलोपनं, परिवर्तनं, जाँचं च कुर्वन्तु।spring
विन्यासः ।<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(२) प्रयोगः org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
मध्यम विन्यासmapper.xml
स्थिति यदिmapper.xml
तथाmapper
अन्तरफलकानां नाम समानं भवति, समाननिर्देशिकायां च सन्ति, अतः अत्र विन्यासस्य आवश्यकता नास्ति ।mapper
अन्तरफलकम् ।<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
मध्यंnamespace
कृतेmapper
अन्तरफलकस्य पता ।mapper
अन्तरफलके विधिनाम चmapper.xml
विवक्षितम् इतिstatement
इत्यस्यid
सुसंगतं भवतु।Spring
विवक्षितम् इति ।<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) प्रयोगः mapper
स्कैनर।
mapper.xml
दस्तावेज लेखन।mapper.xml
मध्यंnamespace
कृतेmapper
अन्तरफलकस्य पता;mapper
अन्तरफलके विधिनाम चmapper.xml
विवक्षितम् इतिstatement
इत्यस्यid
सुसंगतं भवतु;mapper.xml
तथाmapper
यदि अन्तरफलकस्य नाम सुसंगतं तिष्ठति तर्हि तस्य आवश्यकता नास्तिsqlMapConfig.xml
मध्ये विन्यस्तं कुर्वन्तु .mapper
अन्तरफलकम् ।सूचनाmapper.xml
सञ्चिकानाम तथाmapper
अन्तरफलकनामानि सुसंगतानि भवितुमर्हन्ति, एकस्मिन् एव निर्देशिकायां स्थापितानि च भवेयुः ।mapper
स्कैनर।<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
पात्रात् प्राप्नुतmapper
कार्यान्वयन वस्तु।अन्तरफलकबन्धनं MyBatis मध्ये मनमानारूपेण अन्तरफलकं परिभाषितुं भवति, ततः अन्तरफलके SQL इत्यनेन सह विधयः संयोजयितुं भवति वक्तव्यम्बाइण्डिंग्, वयं प्रत्यक्षतया interface मेथड् आह्वयितुं शक्नुमः, अतः मूलस्य तुलने SqlSession
प्रदत्ताः पद्धतयः अस्मान् अधिकानि लचीलानि विकल्पानि सेटिङ्ग्स् च भवितुं शक्नुवन्ति ।
अन्तरफलकबन्धनं कार्यान्वितुं द्वौ उपायौ स्तः ।
@Select
、@Update
एनोटेशन्स् प्रतीक्ष्यताम्, येषु SQL स्टेट्मेण्ट् बाइण्ड् कर्तुं भवति;xml
बाइण्ड् कर्तुं अन्तः SQL लिखन्तु अस्मिन् सन्दर्भे भवद्भिः निर्दिष्टव्यम्xml
मैपिंग सञ्चिकायांnamespace
अन्तरफलकस्य पूर्णं मार्गनाम भवितुमर्हति ।यदा SQL स्टेट्मेण्ट् तुल्यकालिकरूपेण सरलं भवति तदा एनोटेशन बाइण्डिंग् इत्यस्य उपयोगं कुर्वन्तु यदा SQL स्टेट्मेण्ट् तुल्यकालिकरूपेण जटिलं भवति तदा उपयोगं कुर्वन्तुxml
बन्धनम्, सामान्यप्रयोगःxml
अधिकानि बन्धनानि सन्ति।mapper.xml
इत्यस्मिन् परिभाषितस्य प्रत्येकस्य sql इत्यस्यid
समान।mapper.xml
इत्यस्मिन् परिभाषितस्य प्रत्येकस्य sql इत्यस्यparameterType
समानप्रकारस्य ।mapper.xml
इत्यस्मिन् परिभाषितस्य प्रत्येकस्य sql इत्यस्यresultType
समानप्रकारस्य ।Mapper.xml
सञ्चिकायांnamespace
सः एव Mapper interface इत्यस्य class path अस्ति ।proxy
वस्तु, प्रॉक्सी वस्तुproxy
अन्तरफलकविधयः अवरुद्धाः भविष्यन्ति, तस्य स्थाने निष्पादिताः भविष्यन्तिMappedStatement
SQL इत्यस्य प्रतिनिधित्वं करोति, ततः SQL निष्पादनपरिणामान् प्रत्यागच्छति ।namespace
,अतः id
यदि न विन्यस्तं तर्हि पुनरावृत्तिः कर्तुं शक्यते;namespace
,अतः id
न शक्यते पुनरावृत्तिः सर्वथाnamespace
आवश्यकं नास्ति, केवलं उत्तमः अभ्यासः एव।namespace + id
इति यथा M ap < S tring , M apped S tatement > नक्शा<String, MappedStatement>मएकःपृ<स्टरइत्यस्मिन्छ,मएकःपृङघस्टएकःतङपुङनत> उपयोगाय कुञ्जी, यदि कोऽपि नास्तिnamespace
, शेषमात्रम् id
,अतः,id
द्वितीयकीकरणेन दत्तांशस्य परस्परं अधिलेखनं भवितुम् अर्हति ।अयं प्राप्तःnamespace
,प्रकृति id
भवन्तः पुनः पुनः कर्तुं शक्नुवन्ति,namespace
भिन्नः,namespace + id
स्वाभाविकतया भिन्नं भवति।MyBatis सर्वाणि Xml विन्याससूचनाः All-In-One भारीवस्तुषु समाहितं करोति Configuration
आंतरिक। Xml मैपिंग सञ्चिकायां, .<parameterMap>
टैग् इत्यस्य विश्लेषणं यथा भविष्यतिParameterMap
object, तस्य प्रत्येकं बालतत्त्वं यथा विश्लेषितं भविष्यतिParameterMapping
वस्तु।<resultMap>
टैग् इत्यस्य विश्लेषणं यथा भविष्यतिResultMap
object, तस्य प्रत्येकं बालतत्त्वं यथा विश्लेषितं भविष्यतिResultMapping
वस्तु।प्रत्येकं<select>
、<insert>
、<update>
、<delete>
टैग्स् इति विश्लेषणं भविष्यतिMappedStatement
Object, टैग् मध्ये SQL इत्येतत् parsed भविष्यतिBoundSql
वस्तु।
<resultMap>
टैग्स् स्तम्भनामानां वस्तुविशेषनामानां च एकैकशः मैपिंगसम्बन्धं परिभाषयन्ति ।T_NAME AS NAME
, वस्तुविशेषणनाम सामान्यतः भवति name
, लघु, परन्तु स्तम्भनामानि केस-संवेदनशीलाः न सन्ति MyBatis स्तम्भनामानां केसस्य अवहेलनां करिष्यति तथा च बुद्धिपूर्वकं तत्सम्बद्धानि वस्तुविशेषणनामानि अन्वेषयिष्यति T_NAME AS NaMe
, MyBatis अद्यापि सामान्यतया कार्यं कर्तुं शक्नोति।स्तम्भनामानां विशेषतानामानां च मध्ये मैपिंगसम्बन्धः भवति ततः परं MyBatis प्रतिबिम्बद्वारा वस्तुनि निर्माति, तथा च प्रतिबिम्बस्य उपयोगं कृत्वा वस्तुनः गुणानाम् एकैकशः मूल्यानि नियुक्त्य तान् प्रत्यागच्छति येषां गुणानाम् कृते ये मैपिंगसम्बन्धं न प्राप्नुवन्ति , असाइनमेण्ट् पूर्णं कर्तुं न शक्यते।
अन्ये बहवः टैगाः सन्ति, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
, प्लस् गतिशील SQL
9
9
9 टैग्स् : १.trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
प्रतीक्षतु।इत्यस्मिन्<sql>
SQL खण्डटैग्स् कृते, पास कुर्वन्तु<include>
टैग्स् SQL खण्डानां परिचयं कुर्वन्ति,<selectKey>
प्राथमिककुञ्जीनां कृते नीतिलेबल् जनयन्तु ये स्वतः-वृद्धिं समर्थयन्ति न ।
यद्यपि MyBatis क्रमेण Xml मैपिंग सञ्चिकां विश्लेषणं करोति तथापि सन्दर्भितं B टैग् अद्यापि कुत्रापि परिभाषितुं शक्यते, तथा च MyBatis सम्यक् परिचयितुं शक्नोति ।
सिद्धान्तः अस्ति यत् MyBatis A टैग् इत्यस्य विश्लेषणं करोति तथा च पश्यति यत् A टैग् B टैग् इत्यस्य सन्दर्भं ददाति, परन्तु B टैग् इत्यस्य विश्लेषणं न कृतम् अस्ति तथा च अद्यापि नास्ति, MyBatis A टैग् इत्यस्य असमाधानं चिह्नं करिष्यति, ततः निरन्तरं करिष्यति B. Tags सहितं शेषं टैगं विश्लेषणं कर्तुं, सर्वेषां टैग्स् इत्यस्य विश्लेषणानन्तरं, MyBatis तान् टैग्स् पुनः विश्लेषणं करिष्यति ये अनिराकृताः इति चिह्निताः सन्ति यदा B टैग् पूर्वमेव विद्यते, तथा च A टैग् सामान्यतया विश्लेषणं कर्तुं शक्यते ।
शक्नोति, न केवलं शक्नोति एक-बहुः, एक-एकः,अच्छा पर्याप्तम् अनेक-बहु-बहु-एक . एतत् सिद्ध्यति यथा ।
MyBatis न केवलं गणनावर्गान् मैप् कर्तुं शक्नोति, MyBatis किमपि वस्तु सारणीयाः स्तम्भे मैप् कर्तुं शक्नोति ।मानचित्रणविधिः अनुकूलितविधिः अस्तिTypeHandler
,पूरयतु TypeHandler
इत्यस्यsetParameter()
तथाgetResult()
अन्तरफलकविधयः।
TypeHandler
अस्य द्वौ कार्यौ स्तः, एकं पूर्णं कर्तुंjavaType
इत्यस्मैjdbcType
परिवर्तनं, द्वितीयं समाप्तं भवतिjdbcType
इत्यस्मैjavaType
परिवर्तनं यथा प्रतिबिम्बितम्setParameter()
तथाgetResult()
द्वे पद्धतिः sql प्रश्नचिह्नस्थानधारकमापदण्डान् सेट् कृत्वा क्रमशः स्तम्भप्रश्नपरिणामान् प्राप्तुं प्रतिनिधियति ।
MyBatis dynamic SQL अस्मान् SQL इत्यस्य तार्किकनिर्णयस्य तथा गतिशीलस्प्लिसिंग् इत्यस्य कार्याणि पूर्णं कर्तुं Xml मैपिंग सञ्चिकायां टैगरूपेण गतिशील SQL लिखितुं शक्नोति
9
9
9 गतिशील SQL टैग: 1.1.trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
तस्य निष्पादनसिद्धान्तः प्रयोगः एव OGNL
SQL पैरामीटर् ऑब्जेक्ट् तः एक्सप्रेशनस्य मूल्यस्य गणनां कुर्वन्तु तथा च डायनामिक SQL इत्यस्य कार्यं पूर्णं कर्तुं एक्सप्रेशनस्य मूल्यानुसारं SQL इत्यस्य गतिशीलरूपेण स्प्लिसं कुर्वन्तु ।
MyBatis इत्यस्य उपयोगं करोति RowBounds
वस्तु पृष्ठीकृतं भवति, तदर्थम् अस्तिResultSet
परिणामसमूहेन कृतं स्मृतिपृष्ठकरणं भौतिकपृष्ठीकरणं न भवति भौतिकपृष्ठीकरणकार्यं पूर्णं कर्तुं भवान् प्रत्यक्षतया SQL मध्ये भौतिकपृष्ठीकरणेन सह मापदण्डान् लिखितुं शक्नोति, अथवा भौतिकपृष्ठीकरणं पूर्णं कर्तुं पृष्ठीकरणप्लग-इनस्य उपयोगं कर्तुं शक्नोति
पेजिंग् प्लग-इन् इत्यस्य मूलभूतः सिद्धान्तः अस्ति यत् MyBatis द्वारा प्रदत्तस्य प्लग-इन्-अन्तरफलकस्य उपयोगेन कस्टम् प्लग-इन् कार्यान्वितुं, प्लग-इन् इत्यस्य अवरोधन-विधौ निष्पादनीयं SQL इत्यस्य अवरोधनं करणीयम्, ततः तदनुसारं SQL पुनः लिखितव्यम् इत्यस्मै dialect
बोली, तदनुरूपं भौतिकं पेजिंग स्टेट्मेण्ट् तथा भौतिक पेजिंग पैरामीटर् योजयन्तु ।
उदाहरण:
select * from student
SQL इत्यस्य अवरोधनस्य अनन्तरं पुनः लिखन्तु यथा :
select t.* from (select * from student) t limit 0, 10
MyBatis केवलं कृते एव लिखितुं शक्नोति ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
अयम्
4
4
4 एकप्रकारस्य अन्तरफलकप्लग-इन्, MyBatis JDK इत्यस्य गतिशीलप्रॉक्सी इत्यस्य उपयोगं करोति यत् अन्तरफलकानाम् कृते प्रॉक्सी-वस्तूनाम् उत्पन्नं करोति येषां अन्तरफलकविधि-अवरोध-कार्यं कार्यान्वितुं आवश्यकं भवति यदा कदापि एतत् निष्पादितं भवति
4
4
4 method of an interface object, इदं interception method इत्यत्र प्रविशति, विशेषतयाInvocationHandler
इत्यस्यinvoke()
विधिः अवश्यं केवलं तान् पद्धतीन् अवरोधयिष्यति येषां खण्डनं भवन्तः निर्दिशन्ति ।
MyBatis कार्यान्वितं कुर्वन्तु Interceptor
अन्तरफलकं ओवरराइड् चintercept()
विधिः, ततः प्लग-इन् कृते टिप्पणीः लिखन्तु तथा च निर्दिशन्तु यत् भवन्तः कस्य अन्तरफलकस्य काः मेथड्स् अवरुद्धुं इच्छन्ति स्मर्यतां, भवता विन्याससञ्चिकायां लिखितं प्लग-इन् विन्यस्तुं मा विस्मरन्तु ।
PerpetualCache
HashMap local cache, तस्य भण्डारणव्याप्तिः Session अस्ति, यदा Sessionflush
वाclose
तदनन्तरं सत्रे सर्वाणि सञ्चयानि स्वच्छानि भविष्यन्ति, प्रथमस्तरीयं संग्रहणं पूर्वनिर्धारितरूपेण चालू भविष्यति ।PerpetualCache
, HashMap storage, अन्तरं अस्ति यत् तस्य भण्डारणस्य व्याप्तिः अस्ति Mapper
(Namespace
), तथा भण्डारणस्रोतः अनुकूलितुं शक्यते, यथा Ehcache
.द्वितीयस्तरीयं संग्रहणं पूर्वनिर्धारितरूपेण सक्षमं नास्ति ।Serializable
क्रमाङ्कन-अन्तरफलकं (वस्तुनः स्थितिं रक्षितुं उपयोक्तुं शक्यते), तस्य मैपिंग-सञ्चिकायां विन्यासयोग्यम्<cache/>
。C
/ U
/ D
क्रियायाः अनन्तरं पूर्वनिर्धारितरूपेण अस्मिन् व्याप्तेः सर्वाणि सञ्चिकाःselect
in cache in भविष्यतिclear
。