用spring+ibatis做了多表连接的例子,子查询始终查不出数据
一个类别下有很多产品,关系就这么简单
product.xml<sqlMap namespace="Product">
<typeAlias alias="product" type="org.bs.pojo.Product" />
<typeAlias alias="category" type="org.bs.pojo.Category" /> <resultMap class="category" id="categoryMap">
<result property="cid" column="cid" />
<result property="categoryName" column="categoryName" />
</resultMap>
<resultMap class="product" id="productMap">
<result property="pid" column="pid" />
<result property="productName" column="productName" />
<result property="author" column="author" />
<result property="price" column="price" />
<result property="publishTime" column="publishTime" />
<result property="descript" column="descript" />
<result property="imgSrc" column="imgSrc" />
<result property="re" column="re" />
<result property="category" column="cid" select="getCategoryById" />
</resultMap>
<select id="getCategoryById" resultClass="category">
select cid,categoryName from category
</select>
<select id="getAllProduct" resultClass="product">
select
*
from
product
</select>
</sqlMap>ProductDaoImpl.javapublic class ProductDaoImpl extends SqlMapClientDaoSupport implements
IProductDao {
public List<Product> getAllProduct() {
List<Product> listProduct = getSqlMapClientTemplate().queryForList(
"getAllProduct");
return listProduct;
}}test.javapublic void testProduct() {
IProductBiz u = (IProductBiz) GetBean.getBean("productBiz");
try {
List<Product> list = u.getAllProduct();
for (int i = 0; i < list.size(); i++) {
Product p = list.get(i);
System.out.println(p.getProductName()+ p.getCategory().getCategoryName());
}
} catch (Exception e) {
e.printStackTrace();
}
}输出了产品名称,但是类别名称是null
希望这次别让我失望了,发了两次贴了,分也加倍了
一个类别下有很多产品,关系就这么简单
product.xml<sqlMap namespace="Product">
<typeAlias alias="product" type="org.bs.pojo.Product" />
<typeAlias alias="category" type="org.bs.pojo.Category" /> <resultMap class="category" id="categoryMap">
<result property="cid" column="cid" />
<result property="categoryName" column="categoryName" />
</resultMap>
<resultMap class="product" id="productMap">
<result property="pid" column="pid" />
<result property="productName" column="productName" />
<result property="author" column="author" />
<result property="price" column="price" />
<result property="publishTime" column="publishTime" />
<result property="descript" column="descript" />
<result property="imgSrc" column="imgSrc" />
<result property="re" column="re" />
<result property="category" column="cid" select="getCategoryById" />
</resultMap>
<select id="getCategoryById" resultClass="category">
select cid,categoryName from category
</select>
<select id="getAllProduct" resultClass="product">
select
*
from
product
</select>
</sqlMap>ProductDaoImpl.javapublic class ProductDaoImpl extends SqlMapClientDaoSupport implements
IProductDao {
public List<Product> getAllProduct() {
List<Product> listProduct = getSqlMapClientTemplate().queryForList(
"getAllProduct");
return listProduct;
}}test.javapublic void testProduct() {
IProductBiz u = (IProductBiz) GetBean.getBean("productBiz");
try {
List<Product> list = u.getAllProduct();
for (int i = 0; i < list.size(); i++) {
Product p = list.get(i);
System.out.println(p.getProductName()+ p.getCategory().getCategoryName());
}
} catch (Exception e) {
e.printStackTrace();
}
}输出了产品名称,但是类别名称是null
希望这次别让我失望了,发了两次贴了,分也加倍了
解决方案 »
- 帮我解释一下数据库什么时候会加锁?!!!!!!!!
- 客户端传输数据的方式
- 做一个论坛信息发布用什么框架最好啊
- 【高分求解决办法】Eclipse TreeViewer实现的表格编辑问题
- 我从官网下载了一个spring2.5.2,为何没有org.springframework.web.struts.ContextLoaderPlugIn?
- ******** 文件管理时多次操作后造成spring的事务异常!!!请求解决!!!!!!!!
- 用JAVA做音乐网沾
- 在eclipse下开发基于struts的数据库应用
- jdbc:oracle:thin:@computer:1521:ORa 这是什么意思啊!不解!
- struts中页面跳转后URL中显示的后缀名?
- 过路的看看 怎样判断一个文件是否是真实类型
- 删除记录后回到当前分页
连表查吧
数据的读取么?难道不可以
<result property="cid" column="cid" />
<result property="categoryName" column="categoryName" />
</resultMap>
column对应的是数据库的字段名property 对应实体的属性的对应好了就不是null了
<select id="getAllProduct" resultClass="product">
这里应该用
<select id="getAllProduct" resultMap="productMap">
?2.在id为getCategoryById的查询中,你查询了cid和categoryName,
而在resultMap中却将其映射到category一个属性中,我不知道你的category属性是否是一个对象还是
普通的String类型,如果是普通的String类型的话,个人觉得这样会出问题。
select
*
from
product
</select>看看你的字段是否和product完全匹配,大小写、等,不匹配的,找不到值
select cid,categoryName from category
</select>
<select id="getAllProduct" resultClass="product"> select
*
from
product
</select>
resultClass 应该是resultMap
返回的类型是你的map映射的categoryMap, productMap
IProductDao {
public List<Product> getAllProduct() {
List<Product> listProduct = getSqlMapClientTemplate().queryForList(
"getAllProduct");
return listProduct;
}}
这里只是执行了<select id="getAllProduct" resultClass="product">
这条语句,没有调用getCategoryById,当然是null了,另外6楼说的也要检查一下,要对应。
private int pid;
private String productName;
private String author;
private double price;
private Date publishTime;
private String descript;
private String imgSrc;
private String re;
private Category category = new Category();
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getPublishTime() {
return publishTime;
}
public void setPublishTime(Date publishTime) {
this.publishTime = publishTime;
}
public String getDescript() {
return descript;
}
public void setDescript(String descript) {
this.descript = descript;
}
public String getImgSrc() {
return imgSrc;
}
public void setImgSrc(String imgSrc) {
this.imgSrc = imgSrc;
}
public String getRe() {
return re;
}
public void setRe(String re) {
this.re = re;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
} 我晕啦,看完你的domain,ibatis是不支持级联查询的,如果你想查询p.getCategory().getCid()); 下的Category 只能用两个表关联的方式,而且你可以在Product自己定义些属性,来接收两表关联后Category的列,若:
增加private String categoryName,
get,set方法。
sqlmap中:
select
Category . categoryName categoryName
from Product, Category where a....这样在获取Product对象的时候也就得到categoryName的值啦