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条件に含まれるフィールドを定義します.どちらもなければ、表示は限定されません.
················································································································nsertSelectiveに対応するsql文にはNULLチェックが追加されています.つまり、nullではないデータのフィールド値のみが挿入されます(挿入されていないフィールドは、デフォルト値がある場合はデフォルト値が使用されます).Insertはすべてのフィールドを挿入しnullを挿入します(デフォルトは使用しません).
select: sql.append(SqlHelper.selectAllColumns(entityClass)); sql.append(SqlHelper.fromTable(entityClass, this.tableName(entityClass))); sql.append(SqlHelper.whereAllIfColumns(entityClass, this.isNotEmpty()));
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
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
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