1.基本思路
需要编写mapper接口和mapper.xml映射文件。编写mapper接口需要遵循一些开发规范,从而让mybatis可以自动生成mapper接口实现类代理对象。
a.在mapper.xml中namespace等于mapper接口地址
b.mapper.java接口中的方法名和mapper.xml中statement的id一致
c.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致
d.mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致
这4步的具体实施请参见下面。
2.建立以下文件:
3.在SqlMapConfig.xml中加载mapper.xml
<mappers>
<mapper resource="sqlmap/User.xml"></mapper>
<mapper class="mapper.UserMapper"/>
</mappers>
4.编写测试文件,测试成功。
package mapper;
import java.io.InputStream;
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 org.junit.Before;
import org.junit.Test;
import po.User;
public class UserMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(1);
System.out.println(user);
}
}
5.代理对象内部调用selectOne或selectList
上述虽然不一致,但仍然是正确的,解释如下:
如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库。
如果mapper方法返回集合对象,代理对象内部通过selectList查询数据库。
6.mapper接口方法参数只能有一个是否影响系统开发
系统框架中,dao层的代码是被业务层公用的。即使mapper接口只有一个参数,可以使用包装类型的pojo满足不同的业务方法的需求。
注意:持久层方法的参数可以包装类型、map等,service方法中建议不要使用包装类型(不利于业务层的可扩展)。