posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

实用,简单 ibatis dome (包含多对一;一对多)

Posted on 2008-07-14 14:45 G_G 阅读(4446) 评论(2)  编辑  收藏 所属分类: hibernateJDBC
dome
使用hsql 数据库;
一对多,多对一;


可以直接运行的 dome:http://www.blogjava.net/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(80null,     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, falsefalse);
          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>








评论

# re: 实用,简单 ibatis dome (包含多对一;一对多)  回复  更多评论   

2008-07-14 15:35 by JAVAFAN
j2ee方面:_______________________________________________
尚学堂DRP 148班
http://www.ibeifeng.com/read.php?tid=30&u=1007
【北大青鸟J2EE培训视频】
http://www.ibeifeng.com/read.php?tid=641&u=1007
【传智播客 AJAX内部精品视频】

# re: 实用,简单 ibatis dome (包含多对一;一对多)[未登录]  回复  更多评论   

2008-07-14 15:36 by JAVAFANS
尚学堂DRP 148班
http://www.ibeifeng.com/read.php?tid=30&u=1007
【北大青鸟J2EE培训视频】
http://www.ibeifeng.com/read.php?tid=641&u=1007
【传智播客 AJAX内部精品视频】
http://www.ibeifeng.com/read.php?tid=2338&u=1007
【新东方 J2ee系列】
http://www.ibeifeng.com/read.php?tid=531&u=1007
面试大全(包含了Java和数据库)
http://www.ibeifeng.com/read.php?tid=155&u=1007

只有注册用户登录后才能发表评论。


网站导航: