dome
使用hsql 數據庫;
一對多,多對一;
可以直接運行的 dome:http://www.tkk7.com/Files/Good-Game/iba.rar本例指涉及到查詢,為了簡單沒有事務,和service層
先看測試運行:????@Test
????public?void?testLevel()?{
????????try?{
????????????Level?level?=?(Level)DaoConfig.getSqlMap().queryForObject("level.getLevelId",?new?Integer(2)?);
????????????System.out.println("f_level="+level.getFlevel().getName());
??????????? System.out.println("->level="+level.getName());
????????????for(Level?ltmp?:?level.getClevel()){
????????????????System.out.println("c_root="+ltmp.getName());
????????????}
????????}?catch?(SQLException?e)?{
????????????e.printStackTrace();
????????}
????}
運行結果:hsql 數據庫 初始化
create?table?level??(?????id?int?not?null,?????name?varchar(80)?null,?????fid?int?,?????constraint?pk_supplier?primary?key?(id),?????constraint?fk_item_1?foreign?key?(fid)?????????references?level?(id)?)?
create?index?levelName?on?level?(name)?
insert?into?level?(id,name,fid)?values(1,'root',null)?
insert?into?level?(id,name,fid)?values(2,'level_1',1)?
insert?into?level?(id,name,fid)?values(3,'root_2',1)?
insert?into?level?(id,name,fid)?values(4,'root_1_1',2)?
insert?into?level?(id,name,fid)?values(5,'root_1_2',2)?
insert?into?level?(id,name,fid)?values(6,'root_1_1_1',4)
運行結果
f_level=root
->level=level_1
????c_level=root_1_1
????c_level=root_1_2
DaoConfig工具類:
package?test.persistence;
import?com.ibatis.common.jdbc.ScriptRunner;
import?com.ibatis.common.resources.Resources;
import?com.ibatis.sqlmap.client.SqlMapClient;
import?com.ibatis.sqlmap.client.SqlMapClientBuilder;
import?java.io.IOException;
import?java.io.PrintWriter;
import?java.io.Reader;
import?java.sql.Connection;
import?java.sql.DriverManager;
import?java.util.Properties;
/**
?*?damo?api
?*?http://portals.apache.org/bridges/multiproject/jpetstore/apidocs/overview-summary.html
?*?@author?Administrator
?*
?*/
public?class?DaoConfig?{
??private?static?SqlMapClient?sqlMap?=?null?;
??static?{
????try?{
??????Properties?props?=?Resources.getResourceAsProperties("properties/database.properties");
??????String?url?=?props.getProperty("url");
??????String?driver?=?props.getProperty("driver");
??????String?username?=?props.getProperty("username");
??????String?password?=?props.getProperty("password");
??????if?(url.equals("jdbc:hsqldb:mem:jpetstore"))?{
????????Class.forName(driver).newInstance();
????????Connection?conn?=?DriverManager.getConnection(url,?username,?password);
????????try?{
??????????ScriptRunner?runner?=?new?ScriptRunner(conn,?false,?false);
??????????runner.setErrorLogWriter(?new?PrintWriter(??System.out?)?);
??????????runner.setLogWriter(new?PrintWriter(??System.out?));
??????????runner.runScript(Resources.getResourceAsReader("hsql/test.sql"));
????????}catch?(Exception?e)?{
????????????e.printStackTrace();
????????}?finally?{
??????????conn.close();
????????}
??????}
??????
??????
??????String?resource?=?"test/persistence/sql-map-config.xml";
??????Reader?reader?=?Resources.getResourceAsReader?(resource);
??????sqlMap?=?SqlMapClientBuilder.buildSqlMapClient(reader);
????}?catch?(Exception?e)?{
??????throw?new?RuntimeException("Description.??Cause:?"?+?e,?e);
????}
??}
??public?static?SqlMapClient?getSqlMap(){
??????return?sqlMap?;
??}
}
dao:
public?class?LevelDao?{
?????public?static?List<Level>??getAll(){
????????try?{
????????????return?DaoConfig.getSqlMap().queryForList("getAllLevel");
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????????return?null?;
????}
}
持久類說明package?test.domain;
import?java.util.List;
public?class?Level?{
????private?Integer?id?;
????private?String?name?;
???
??? //得到此對象父節點 (多對一)
????private?Level?flevel?;
??? //得到此對象孩子節點 (一對多)
????private?List<Level>?clevel;
????public?Integer?getId()?{
????????return?id;
????}
????public?void?setId(Integer?id)?{
????????this.id?=?id;
????}
????public?String?getName()?{
????????return?name;
????}
????public?void?setName(String?name)?{
????????this.name?=?name;
????}
????public?Level?getFlevel()?{
????????return?flevel;
????}
????public?void?setFlevel(Level?flevel)?{
????????this.flevel?=?flevel;
????}
????public?List<Level>?getClevel()?{
????????return?clevel;
????}
????public?void?setClevel(List<Level>?clevel)?{
????????this.clevel?=?clevel;
????}
}
level.xml
<?xml?version="1.0"?encoding="UTF-8"??>
<!DOCTYPE?sqlMap?PUBLIC?"-//ibatis.apache.org//DTD?SQL?Map?2.0//EN"
????"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap?namespace="level">
????<typeAlias?alias="level"?type="test.domain.Level"?/>
????
????<resultMap?class="level"?id="getLevelByFa">
????????<result?property="id"?column="id"?/>??
????????<result?property="name"?column="name"?/>
????????<result?property="flevel"?column="fid"?select="level.getLevelId"/>
????????<result?property="clevel"?column="id"?select="level.getLevelByfId"/>
????</resultMap>
?????<select?id="getLevelId"?resultClass="level"?parameterClass="int"?resultMap="getLevelByFa"??>??
?????????select?
?????????id?,
?????????name?,
?????????fid?
?????????from?level???
?????????WHERE?id?=#id#??
?????</select>
????
????
?????<select?id="getLevelByfId"?resultClass="level"?parameterClass="int"?resultMap="getLevelByFa"??>??
?????????select?
?????????id?,
?????????name?,
?????????fid?
?????????from?level???
?????????WHERE?fid?=#id#??
?????</select>
</sqlMap>
map confg <?xml?version="1.0"?encoding="UTF-8"??>
<!DOCTYPE?sqlMapConfig?PUBLIC?"-//ibatis.apache.org//DTD?SQL?Map?Config?2.0//EN"
????"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig?>?
????<properties?resource="properties/database.properties"/>
????<settings?
????????useStatementNamespaces="true"
????/>??????
?
?
??<transactionManager?type="JDBC">
????<dataSource?type="SIMPLE">
??????<property?value="${driver}"?name="JDBC.Driver"/>
??????<property?value="${url}"?name="JDBC.ConnectionURL"/>
??????<property?value="${username}"?name="JDBC.Username"/>
??????<property?value="${password}"?name="JDBC.Password"/>
????</dataSource>
??</transactionManager>
??<sqlMap?resource="test/persistence/level.xml"/>
</sqlMapConfig>