开发规范:
Mapper 接口开发方法只需要程序员与 Mapper 接口 (相当于 Dao 接口), 由 Mybatis 框架根据接口定义创建接口的动态代理对象, 代理对象的方法同平常写的 Dao 接口实现类的方法.
Mapper 接口开发需要遵循以下规范:
1,Mappper.xml 文件中的 namespace 与 mapper 接口的类路径相同
2,Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的 id 相同
3,Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同
4,Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的 resultType 的类型相同
- package deep.mapper;
- import deep.pojo.Account;
- public interface UserMapper {
- // 遵循四个原则
- // 接口方法名 == Account.xml 中的 id 名
- // 返回值类型 与 Mapper.xml 文件中的返回值类型要一致
- // 方法的入参类型要与 Mapper.xml 文件中入参的类型要一致
- // 命名空间绑定此接口 (Account.xml 中的 mapper 中的 namespace = "deep.mapper.UserMapper")
- public Account findUserById(Integer id);
- }
- <mapper namespace="deep.mapper.UserMapper">
- <select id="findUserById" parameterType="Integer" resultType="deep.pojo.Account">
- select * from account where id = #{v}
- </select>
- ....
- </mapper>
- package deep.junit;
- 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.Test;
- import deep.mapper.UserMapper;
- import deep.pojo.Account;
- public class MyBatisMapperTest {
- @Test
- public void testMapper() throws Exception {
- // 加载核心配置文件
- InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //SqlSession 帮我生成一个实现类 (给接口)
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- Account account = userMapper.findUserById(27);
- System.out.println(account);
- }
- }
小结:
♦selectOne 和 selectList
动态代理对象调用 sqlSession.selectOne() 和 sqlSession.selectList() 是根据 mapper 接口方法的返回值决定, 如果返回 list 则调用 selectList 方法, 如果返回单个对象则调用 selectOne() 方法.
♦namespace
mybatis 官方推荐使用 mapper 代理方法开发 mapper 接口, 程序员不用编写 mapper 接口实现类, 使用 mapper 代理方法时, 输入参数可以使用 pojo 包装对象或 map 对象, 保证 dao 的通用性.
来源: http://www.bubuko.com/infodetail-2971499.html