I did some code refactoring, and now I'm using namespaces for calling
the sql statements instead of mapnames (wich worked fine untill we
seperated one big project into o few smaller ones)
This is a sample map (ABCNEW_A_PRODUCT_SqlMap.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//
ibatis.apache.org//DTD Mapper 3.0//EN"
"
http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="hr.abcinfo.dao.abcnew.ProductDao">
<cache eviction="FIFO" flushInterval="60000" size="512"
readOnly="true" />
<resultMap id="ProductMap"
type="hr.abcinfo.domain.abcnew.ProductPojo">
<result column="sProduct" property="sProduct" jdbcType="VARCHAR" />
<result column="nProduct" property="nProduct" jdbcType="VARCHAR" />
<result column="change" property="change" jdbcType="VARCHAR" />
</resultMap>
<sql id="selectList">
S_Product AS sProduct,
N_Product AS nProduct,
change AS
change
</sql>
<sql id="fromList">
A_Product a_Product
</sql>
<sql id="whereList">
S_Product =
#{sProduct}
</sql>
<select id="countProductFilter" parameterType="String"
resultType="int"
useCache="true" flushCache="false">
SELECT COUNT(*)
FROM
<include refid="fromList" />
${value}
</select>
<select id="selectProductFilter"
parameterType="hr.abcinfo.utility.ibatis.domain.DynamicQueryObject"
resultType="hr.abcinfo.domain.abcnew.ProductPojo" useCache="true"
flushCache="false">
SELECT
<include refid="selectList" />
FROM
<include refid="fromList" />
${whereCondition} ${orderBy}
</select>
<select id="selectProductByPrimaryKey"
parameterType="hr.abcinfo.domain.abcnew.ProductPojo"
resultType="hr.abcinfo.domain.abcnew.ProductPojo" useCache="true"
flushCache="false">
SELECT
<include refid="selectList" />
FROM
<include refid="fromList" />
WHERE
<include refid="whereList" />
</select>
<delete id="deleteProduct"
parameterType="hr.abcinfo.domain.abcnew.ProductPojo"
flushCache="true">
DELETE
FROM A_Product
WHERE S_Product = #{sProduct}
</delete>
<update id="updateProduct"
parameterType="hr.abcinfo.domain.abcnew.ProductPojo"
flushCache="true">
UPDATE A_Product SET
N_Product = #{nProduct,jdbcType=VARCHAR},
change = #{change,jdbcType=VARCHAR}
WHERE S_Product = #{sProduct,jdbcType=VARCHAR}
</update>
<insert id="insertProduct"
parameterType="hr.abcinfo.domain.abcnew.ProductPojo"
flushCache="true">
INSERT INTO A_Product
(S_Product, N_Product, change)
VALUES
(#{sProduct,jdbcType=VARCHAR},#{nProduct,jdbcType=VARCHAR},
#{change,jdbcType=VARCHAR})
</insert>
<select id="printProductFilter"
parameterType="hr.abcinfo.utility.ibatis.domain.DynamicQueryObject"
resultType="hr.abcinfo.domain.abcnew.ProductPojo" useCache="true"
flushCache="false">
SELECT
<include refid="selectList" />
FROM
<include refid="fromList" />
${whereCondition} ${orderBy}
</select>
<select id="changeProduct" resultType="String">
SELECT change_fa() FROM
DUAL
</select>
</mapper>
...and this is DaoImpl class...
@Repository("ProductDao")
public class ProductDaoImpl extends SqlSessionDaoSupport implements
ProductDao {
private DaoHandler abstractDao;
@Autowired
public ProductDaoImpl(DaoHandler abstractDao) {
super();
this.abstractDao = abstractDao;
}
@Override
public int count(ArrayList<LookUpPojo> filter) {
Integer backCount = countFilter(abstractDao.setWhere(filter,
ProductPojo.class));
return backCount;
}
@Override
public int countFilter(String whereSql) {
Integer backCount = (Integer) getSqlSessionTemplate().selectOne(
"hr.abcinfo.dao.abcnew.ProductDao.countProductFilter", whereSql);
return backCount;
}
@Override
public void delete(ProductPojo product) {
getSqlSessionTemplate().insert(
"hr.abcinfo.dao.abcnew.ProductDao.deleteProduct", product);
}
@Override
public void insert(ProductPojo product) {
getSqlSessionTemplate().insert(
"hr.abcinfo.dao.abcnew.ProductDao.insertProduct", product);
}
@Override
public List<ProductPojo> print(ArrayList<LookUpPojo> filter,
ArrayList<SortPojo> sort, String reportName, String reportType) {
List<ProductPojo> product = getSqlSessionTemplate().selectList(
"hr.abcinfo.dao.abcnew.ProductDao.printProductFilter",
abstractDao.setDynamicData(filter, sort, ProductPojo.class));
return product;
}
@Override
public List<ProductPojo> printFilter(DynamicQueryObject
dynamicQueryObject) {
List<ProductPojo> product = getSqlSessionTemplate().selectList(
"hr.abcinfo.dao.abcnew.ProductDao.printProductFilter",
dynamicQueryObject);
return product;
}
@Override
public List<ProductPojo> select(ArrayList<LookUpPojo> filter,
ArrayList<SortPojo> sortPojos, RowBounds rowBounds) {
List<ProductPojo> product = selectFilter(abstractDao.setDynamicData(
filter, sortPojos, ProductPojo.class), rowBounds);
return product;
}
@Override
public List<ProductPojo> selectByPrimaryKey(ProductPojo product) {
return getSqlSessionTemplate().selectList(
"hr.abcinfo.dao.abcnew.ProductDao.selectProductByPrimaryKey",
product);
}
@Override
public List<ProductPojo> selectFilter(DynamicQueryObject
dynamicQueryObject,
RowBounds rowBounds)n {
List<ProductPojo> product = getSqlSessionTemplate().selectList(
"hr.abcinfo.dao.abcnew.ProductDao.selectProductFilter",
dynamicQueryObject, rowBounds);
return product;
}
@Override
public void update(ProductPojo product) {
getSqlSessionTemplate().update(
"hr.abcinfo.dao.abcnew.ProductDao.updateProduct", product);
}
@Override
public String uradio() {
return (String) getSqlSessionTemplate().selectOne(
"hr.abcinfo.dao.abcnew.ProductDao.uradioProduct");
}
@Override
public double max(ArrayList<LookUpPojo> filter)
throws PersistenceException, ClassNotFoundException,
NoSuchFieldException, IOException, SQLException {
double max = maxFilter(abstractDao.setWhere(filter,
ProductPojo.class));
return max;
}
@Override
public double maxFilter(String whereSql) {
double max = (Double) getSqlSessionTemplate().selectOne(
"hr.abcinfo.dao.abcnew.ProductDao.maxProductFilter", whereSql);
return max;
}
}
I'm still having the same error:
org.mybatis.spring.MyBatisSystemException: SqlSession operation;
nested exception is
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause:
java.lang.IllegalArgumentException: Mapped Statements collection does
not contain value for
hr.abcinfo.dao.abcnew.ProductDao.countProductFilter
### Cause: java.lang.IllegalArgumentException: Mapped Statements
collection does not contain value for
hr.abcinfo.dao.abcnew.ProductDao.countProductFilter
(Other errors are cropped)
What am I doing wrong ??
Antonio