ibatis 一对一 表连接查询

第一种 resultType 

实体类 Test , Score



public class Test {


private String username;
private String password;

//get  set 省略 

}

public class Score {
 
private String username;
private int score;
// 

}

去继承实体类   映射到实体类字段对应 

public class TestScore extends Score {


private String username;
private String password;
}

Dao

public interface TestScoreDao {
public List<TestScore> FindAll();
}

Daoimpl

public class TestScoreDaoimpl implements  dao.TestScoreDao{
private static SqlMapClient sqlMap;


void init() {
try {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
System.out.println("==="+sqlMap);
reader.close();
} catch (IOException e) {
// Fail fast.
e.printStackTrace();


}
}


@SuppressWarnings("unchecked")
@Override
public List<domain.TestScore> FindAll() {
//
this.init();
List<domain.TestScore> list = null;
try {
list = sqlMap.queryForList("selectTestScore");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}


}

ibatis  xml

<sqlMap namespace="domain.TestScore">
<resultMap id="TestResult" class="Test">
<result property="username" column="username" />
<result property="password" column="password" />
 
</resultMap>
<!-- 查询 -->
<select id="selectTestScore" resultClass="domain.TestScore">
SELECT
test.username,
test.password,
score.score
FROM
test,score
where test.username=score.username;
</select>
</sqlMap>


2,ResultMap

在实体类中增加

public class Test {


private String username;
private String password;


// 添加分数属性
//
private Score score;
     }


Dao :public List<Test> findUserScorePassword();

Daoimpl: 

@Override
public List<Test> findUserScorePassword() {
this.init();
List<Test> list = null;
try {
list = sqlMap.queryForList("findUserScorePassword");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}

xml 文件 

<sqlMap >
<typeAlias alias="Test" type="domain.Test"/>
<typeAlias alias="Score" type="domain.Score"/>
 
<!-- resultMap映射结果集 -->
<!-- 将整个结果映射到Test中 -->
<resultMap class="Test" id="TestResult">
<!-- 映射的Test信息 -->

<result property="username" column="username"/>
<result property="password" column="password"/>
<!-- 添加映射的关联的Score  -->
 
<result property="score"   resultMap="scoreResult"/>
</resultMap>
 
<!-- 映射的关联的Score 属性信息 -->
<!-- 用于映射关联单个对象信息 -->
<resultMap class="Score" id="scoreResult">
<result property="username" column="username"/>
<result property="score" column="score"/>
</resultMap>

<!-- 通过resultMap一对一查询 -->
<select id="findUserScorePassword" resultMap="TestResult">
SELECT
test.*,
Score.*
FROM
test join Score
on test.username=Score.username;
</select>
 
</sqlMap>

action:

public String FindAll2() {
List<domain.Test> user1 = dao.findUserScorePassword();
System.out.println("++++"+user1);
HttpServletRequest request = ServletActionContext.getRequest();
for (Test test : user1) {
System.out.println(test.getScore()+"----------resultMap实现-------------");

request.getSession().setAttribute("test", user1);
return "success";
 
}

web:

<form action="#" id="myform" name="myform" method="post">
<table border=1 width="80%">
<tr>
<th width="39%">名字</th>
<th width="39%">分数</th>
<th width="39%">pwd</th>
</tr>
<tr>
<c:forEach items="${test}" var="user1">
<tr>
<td>${user1.username}</td>
<td>${user1.score.score}</td>
<td>${user1.password}</td>
</tr>
</c:forEach>
</tr>
</table>


</form>

 注:还有一种嵌套查询:通过执行另外一个SQL 映射语句来返回预期的复杂类型 

若想学习 :http://blog.csdn.net/QCIWYY/article/details/49780407

 这里展示的是:结果嵌套结果查询;

若有错误请指出;

猜你喜欢

转载自blog.csdn.net/weixin_38361347/article/details/78204156