myBatis3.3.0組み込み方法の詳細

7478 ワード

次のテストのtestLogはログ・オブジェクトで、idとtableNameのみが設定され、他のフィールドはnullです.テストを経て、発見したいくつかの大まかな法則【約束:処理するフィールド、insertとupdateキーワードの後ろに続くフィールドを指す】:1.selective:パラメータオブジェクトのNULL以外の属性に対応するテーブルフィールドのみを処理することを示し、NULL属性に対応するテーブルフィールドデータベースはデフォルト値で処理されます.2.primaryKey:パラメータはObjectタイプです.エンティティ・クラスにプライマリ・キーとして注記されるプロパティがある場合、パラメータはエンティティ・クラス・オブジェクトであってもプライマリ・キーの値であってもよく、where条件はプライマリ・キー・プロパティに対応するフィールドのみを使用します.エンティティ・クラスがプライマリ・キーのプロパティとして注記されていない場合、パラメータはエンティティ・クラス・オブジェクトのみであり、where条件ではすべてのプロパティに対応するフィールドが使用されます.3.組み込みメソッドのメソッド名には、パラメータオブジェクトのすべてのプロパティに対応するテーブルフィールドが処理されることを示します.where条件には、パラメータオブジェクトのNULL以外のプロパティに対応するテーブルフィールドのみが含まれます.4.selective:操作に含まれるフィールドを定義し、primaryKey:where条件に含まれるフィールドを定義します.どちらもなければ、表示は限定されません.
 4. , 。

················································································································nsertSelectiveに対応するsql文にはNULLチェックが追加されています.つまり、nullではないデータのフィールド値のみが挿入されます(挿入されていないフィールドは、デフォルト値がある場合はデフォルト値が使用されます).Insertはすべてのフィールドを挿入しnullを挿入します(デフォルトは使用しません).
1.updateByPrimaryKeySelective ( Null ), , 。
2.updateByPrimaryKey 
1 2 where ( )

sql ( id tableName set ):
	--------------begin:updateByPrimaryKey(testLog)
	2018-10-15 15:49:53 [INFO] UPDATE operateLog SET id = 0,tableName = 'test',type = NULL,oldValue = NULL,operateAccount 
	= NULL,operateName = NULL,addTime = NULL WHERE id = 0 AND tableName = 'test' AND type = NULL 
	AND oldValue = NULL AND operateAccount = NULL AND operateName = NULL AND addTime = NULL 
	 {executed in 65 msec}
	--------------end:updateByPrimaryKey(testLog)
	--------------begin:updateByPrimaryKeySelective(testLog)
	2018-10-15 15:49:53 [INFO] UPDATE operateLog SET id = 0,tableName = 'test' WHERE id = 0 AND tableName = 'test' AND type = NULL AND oldValue = NULL AND operateAccount = NULL AND operateName = NULL AND addTime = NULL 
	 {executed in 30 msec}
	--------------end:updateByPrimaryKeySelective(testLog)

select: sql.append(SqlHelper.selectAllColumns(entityClass)); sql.append(SqlHelper.fromTable(entityClass, this.tableName(entityClass))); sql.append(SqlHelper.whereAllIfColumns(entityClass, this.isNotEmpty()));
 mybatis ,  if  , 

 , null   ‘’ 

OperateLogクラス***がプライマリキーとして注記されていないフィールド***1.selectByPrimaryKey(0 L):パラメータはプライマリ・キーの値ではなく、異常Error setting non null for parameter 2 with JdbcType nullと報告する.Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
#2.selectByPrimaryKey(testLog):where ( )
------------------begin:selectByPrimaryKey(testLog)
2018-10-16 10:10:28 [INFO] SELECT id,tableName,type,oldValue,operateAccount,operateName,addTime FROM operateLog WHERE 
id = 0 AND tableName = 'testTable' AND type = NULL AND oldValue = NULL AND operateAccount = 
NULL AND operateName = NULL AND addTime = NULL 
 {executed in 73 msec}
------------------end:selectByPrimaryKey(testLog)


#3.select(testLog):where 
------------------begin:select(testLog)
2018-10-16 10:10:28 [INFO] SELECT id,tableName,type,oldValue,operateAccount,operateName,addTime FROM operateLog WHERE 
id = 0 AND tableName = 'testTable' 
 {executed in 72 msec}
------------------end:select(testLog)

#4.selectOne(testLog):where ( ,mybatis )
------------------begin:selectOne(testLog)
2018-10-16 10:10:28 [INFO] SELECT id,tableName,type,oldValue,operateAccount,operateName,addTime FROM operateLog WHERE id = 0 AND tableName = 'testTable' 
 {executed in 60 msec}
------------------end:selectOne(testLog)

#5.selectCount(testLog):where 
------------------begin:selectCount(testLog)
2018-10-16 10:10:28 [INFO] SELECT COUNT(*) FROM operateLog WHERE id = 0 AND tableName = 'testTable' 
 {executed in 74 msec}
------------------end:selectCount(testLog)

#6.selectByExample(example):
Example example = new Example(OperateLog.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("id", testLog.getId());
criteria.andNotEqualTo("tableName",testLog.getTableName());
criteria.andBetween("type",1,3);
example.setOrderByClause("addTime desc");
operateLogMapper.selectByExample(example);

----------------------begin:selectByExample(example)
2018-10-16 10:47:17 [INFO] SELECT id,tableName,type,oldValue,operateAccount,operateName,addTime FROM operateLog WHERE ( id = 0 and tableName <> 'testTable' and type between 1 and 3 ) order by addTime desc 
 {executed in 12 msec}
----------------------end:selectByExample(example)

CustInfoStatusクラス***プライマリキーとして注記されていないフィールド***custInfoStatusMapper.deleteByPrimaryKey(custId); Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘approveStatus’, mode=IN, javaType=class java.lang.Integer, jdbcType=null, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘null’}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #3 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
CustInfoStatus 2には、プライマリ・キーとして注記されるフィールドCustInfoStatus 2 custInfoStatus 2=new CustInfoStatus 2()があります.custInfoStatus2.setCustId(custId); custInfoStatus2Mapper.delete(custInfoStatus2); 対応するSQL:DELETE FROM custInfoStatus WHERE custId=10;
CustInfoStatus2 custInfoStatus2 = new CustInfoStatus2();//id属性はテーブルのプライマリキーcustInfoStatus 2として注記する.setCustId(custId); custInfoStatus2Mapper.deleteByPrimaryKey(custInfoStatus2); 対応するSQL:DELETE FROM custInfoStatus WHERE id=NULL;
---------------deleteByPrimaryKey(1111 L)ApiCustクラスのid属性***は、LongタイプapiCustMapperとしてデータベースプライマリキー***として注記する.deleteByPrimaryKey(1111L); 対応するSQL:2018-10-19 13:51:40[INFO]DELETE FROM apiCust WHERE id=1111
---------------deleteByPrimaryKey(testLog)OperateLogオブジェクト***メインキー***OperateLog testLog=new OperateLog()としてフィールドが注記されていない;testLog.setId(2222L); operateLogMapper.deleteByPrimaryKey(testLog); 対応するSQL:2018-10-19 13:51:40[INFO]DELETE FROM operateLog Log WHERE id=2222 AND tableName=NULL AND type=NULL AND oldValue=NULL AND operateAccount=NULL AND operateName=NULL AND addTime=NULL AND memo=NULL
---------------deleteByPrimaryKey(3333 L)OperateLogオブジェクト***には、メインキー***operateLogMapperとしてフィールドが注釈されていない.deleteByPrimaryKey(3333L); エラー:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘tableName’, mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘null’}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
ApiCustクラスのid属性***は、LongタイプApiCust apiCust=new ApiCust()のデータベースプライマリキー***として注記されます.apiCust.setId(id);
apiCustMapper.selectByPrimaryKey(apiCust); 対応するSQL:2018-10-19 14:15:32[INFO]SELECT id,telNo,pwd,device,createTime FROM apiCust WHERE id=10
apiCustMapper.selectByPrimaryKey(4444L); 対応するSQL:2018-10-19 14:15:32[INFO]SELECT id,telNo,pwd,device,createTime FROM apiCust WHERE id=4444