您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
03-mybatis的dao层实现-接口代理方式代码实现
发布时间:2025-01-29 15:51:34编辑:雪饮阅读()
-
接续上篇,这次把dao的实现层impl干掉,然后我们修改UserMapper.xml中mapper
标签的namespace的值如:sp25.dao.UserMapper。
那么接下面我们修改上篇中的ServiceDemo的main方法中的实现为如:
public static void main(String[] args) throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
List<User> userList=mapper.findAll();
System.out.println(userList);
sqlSession.close();
}
但此时你可能发现了问题:
<html>Result type not match for select id="findAll"<br/>srcType: sp24.domain.User<br/>targetType: sp25.domain.User
这个问题在UserMapper.java这个接口中,根据提示我们确保接口中这个findAll的返回泛型类型User悬停上面可以看到确实是sp25.dao.User
但是当我们在UserMapper.xml中的resultType的值是user时候,在IntelliJ IDEA中悬停其实发现确实sp24.domain.User.
但我们在sqlMapConfig.xml中确实类型别名定义如:
<typeAliases>
<typeAlias type="sp25.domain.User" alias="user"/>
</typeAliases>
这里有一个参考原因:
这是因为使用了mybatisX插件,在整个项目中有其他模块,与其他模块里实体类重名了,导致mybatisX插件无法识别;
我确实有用mybatisX插件。
但我的采取措施是使用完整限定类型名称。
即findAll在UserMapper.xml中的定义如:
<!--查询操作-->
<select id="findAll" resultType="sp25.domain.User">
select * from user
</select>
实际折腾下来发现我的main方法所在的ServiceDemo.java竟然位于SpringProject2Module4。。。
真是低级错误哈。
然后再次运行main方法即可。因为我新建模块实际是SpringProject2Module5.
遇到问题一定要冷静再冷静,细心再细心。
那么所以我们还可以在UserMapper.xml中新增带输入参数的,例如按id进行查询的。
<!--根据id进行查询-->
<select id="findById" resultType="user" parameterType="int">
select * from user where id=#{id}
</select>
然后UserMapper.java接口中也新增对应接口的抽象方法
public User findById(int id) throws IOException;
然后ServiceDemo.java中再次重新实现main方法如:
package sp25.service;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import sp25.dao.UserMapper;
import sp25.domain.User;
import java.io.IOException;
import java.io.InputStream;
public class ServiceDemo {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
User user=mapper.findById(15);
System.out.println(user);
sqlSession.close();
}
}
关键字词:mybatis,dao,接口