首先明确
我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
不管使用XML还是注解配置。
但是Mybatis它是支持写dao实现类的。
这里只是作为演示,并且提高个人理解
接口
package com.tubai.dao;
import java.util.List;
/**
* 首先需要明确:
* 我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
* 不管使用XML还是注解配置。
* 但是Mybatis它是支持写dao实现类的。
* 这里采用Impl仅仅是作为演示
*/
public interface UserDaoByImpl {
List<String> selectAllAddress();
}
实现类
package com.tubai.dao.impl;
import com.tubai.dao.UserDaoByImpl;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
/**
* 这个实现类的说明请看UserDaoByImpl
*/
public class UserDaoAddressImpl implements UserDaoByImpl {
private SqlSessionFactory factory = null;
public UserDaoAddressImpl(SqlSessionFactory factory){
this.factory=factory;
}
@Override
public List<String> selectAllAddress() {
SqlSession sqlSession = factory.openSession();
//从这里我们可以得出 在xml文件中 仅仅有一个id是无法精准定位是哪个接口的方法 还需要namespace进行限定
List<String> addressList = sqlSession.selectList("com.tubai.dao.UserDaoByImpl.selectAllAddress");
sqlSession.close();
return addressList;
}
}
配置信息
在SqlMapConfig.xml中配置
<mappers>
<mapper resource="com/tubai/dao/UserDaoByImpl.xml"/>
</mappers>
然后创建一个名为UserDaoByImpl.xml
因为我这得到的结果是String类型的
因此resultType=“java.lang.String”
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tubai.dao.UserDaoByImpl">
<select id="selectAllAddress" resultType="java.lang.String">
select address from user;
</select>
</mapper>
测试类中使用
private static void demo03() throws Exception{
//演示自己实现Impl的demo
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
UserDaoByImpl userDao = new UserDaoAddressImpl(factory);
List<String> allAddress = userDao.selectAllAddress();
for (String address : allAddress) {
System.out.println(address);
}
is.close();
}