求高手指教下ibatis!
对象:
public class Person implements Serializable { private static final long serialVersionUID = 9006203036989086304L; private Integer id; private String pName; private String sex; private Integer age;//省略setter getter方法}<sqlMap namespace="Person"> <typeAlias alias="person" type="com.bean.Person"/> <select id="getPerson" resultClass="person" parameterClass="java.lang.String"> <![CDATA[ select * from tab_person where id=#value# ]]> </select> <insert id="insertPerson" parameterClass="person"> <![CDATA[ insert into tab_person(id,pname,sex,age) values(#id#,#pname#,#sex#,#age#) ]]> </insert> <update id="updatePerson" parameterClass="person"> <![CDATA[ update tab_person set pname=#pname#,sex=#sex#,age=#age# where id=#id# ]]> </update> <delete id="deletePerson" parameterClass="java.lang.String"> <![CDATA[ delete tab_person where id=#id# ]]> </delete> </sqlMap>
<sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="JDBC.Username" value="system"/> <property name="JDBC.Password" value="oraclepass"/> </dataSource> </transactionManager> <sqlMap resource="com/bean/Person.xml"/> </sqlMapConfig>
public static void main(String[] args){ try { String resource="SqlMapConfigExample.xml"; Reader reader=Resources.getResourceAsReader(resource); XmlSqlMapClientBuilder xmlSqlMapClientBuilder=new XmlSqlMapClientBuilder(); SqlMapClient sqlMapClient=xmlSqlMapClientBuilder.buildSqlMap(reader); sqlMapClient.startTransaction(); Person person=new Person("gahd", "man", 21); sqlMapClient.insert("insertPerson",person); sqlMapClient.commitTransaction(); } catch (IOException e) { e.printStackTrace(); }catch (Exception e) { e.printStackTrace(); } }
at com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder.parseSelect(XmlSqlMapClientBuilder.java:506)
at com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder.parseSqlMap(XmlSqlMapClientBuilder.java:474)
at com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder.parseSqlMapRef(XmlSqlMapClientBuilder.java:457)
at com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder.parseSqlMapConfig(XmlSqlMapClientBuilder.java:266)
at com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder.buildSqlMap(XmlSqlMapClientBuilder.java:239)
at com.dao.AppSqlConfig.main(AppSqlConfig.java:19)
[解决办法]
你返回person时需要一个resultMap的设置,如:
<resultMap class="TasksLogger" id="TasksLoggerList" groupBy="loginId"> <result property="loginId" column="login_id" /> <result property="taskNo" column="task_no" /> <result property="taskName" column="task_name" /> <result property="doType" column="type" /> <result property="resNo" column="res_no" /> <result property="applyTime" column="apply_time" /> <result property="startTime" column="start_time" /> <result property="endTime" column="end_time" /> <result property="letupTime" column="letup_time" /> </resultMap>
[解决办法]
select 方法中的 resultClass="person" 改为resultMap="personMap"
且personMap 需要定义 放在<sqlMap> </sqlMap> 定义如1楼