mybatis10 实现类代理对象开发
2015-10-11 16:19
459 查看
mapper实现类代理对象开发 要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则: SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.close(); 这2步好封装,代理类写死就可以了,以后自动生成就可以了。 User user = sqlSession.selectOne("test.findUserById", id);不好封装,因为test.findUserById是变动的,难以通过代理自动生成。
1、mapper.xml(UserMapper.xml)中namespace指定为mapper接口的全限定名 <mapper namespace="cn.itcast.mybatis.mapper.UserMapper"> 此步骤目的:通过mapper.xml和mapper.java(UserMapper.java)进行关联。 2、mapper.xml中statement的id就是mapper.java(UserMapper.java)中方法名 3、mapper.xml中statement的parameterType和mapper.java(UserMapper.java)中方法输入参数类型一致 4、mapper.xml中statement的resultType和mapper.java(UserMapper.java)中方法返回值类型一致.
1.1.1mapper.xml(UserMapper.xml映射文件) mapper映射文件的命名方式建议:表名Mapper.xml namespace指定为mapper接口的全限定名
Mapper(UserMapper.java)接口 mybatis提出了mapper接口,相当 于dao 接口。 mapper接口的命名方式建议:表名Mapper
1.1.1将mapper.xml在SqlMapConfig.xml中加载
mapper接口返回单个对象和集合对象 不管查询记录是单条还是多条,在 statement中resultType定义一致,都是单条记录映射的pojo类型。 mapper接口方法返回值,如果是返回的单个对象,返回值类型是pojo类型,生成的代理对象内部通过selectOne获取记录,如果返回值类型是集合对象,生成的代理对象内部通过selectList获取记录。
测试:
// 会话工厂 private SqlSessionFactory sqlSessionFactory; // 创建工厂 @Before public void init() throws IOException { // 配置文件(SqlMapConfig.xml) 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); } @Test public void testFindUserByUsername() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> list = userMapper.findUserByName("小明"); System.out.println(list); }
返回值的问题 如果方法调用的statement,返回是多条记录,而mapper.java方法的返回值为pojo,此时代理对象通过selectOne调用,由于返回多条记录,所以报错: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4 输入参数的问题 使用mapper代理的方式开发,mapper接口方法输入参数只有一个,可扩展性是否很差?? 可扩展性没有问题,因为dao层就是通用的,可以通过扩展形参pojo(定义pojo包装类型)将不同的参数(可以是pojo也可以简单类型)传入进去。
相关文章推荐
- C#自定义特性和反射
- iTween.MoveTo用法
- tcp 客户、服务器程序示例
- Hadoop图像压缩
- 新秀系列C/C++经典问题(六)
- git
- Java学习——String变量中的双胞胎
- ASP.NET MVC 处理404与500错误页面的方法
- Java I/O
- CodeForces 558C(位运算)
- 关于mouseover ,mouseout ,mouseenter,mouseleave事件的区别
- Laravel 报错 :Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING)
- 字符串转base64
- 无线网络破解,破解wap密码
- Linux进程间通信(三) - 信号
- CodeForces 558C(位运算)
- (vcpu-0)vcpu-0:VEREIFY vmcore/vmm/main/physMem_monitor.c.1123日志文件位于“E:OS X\vmware.log”
- Java反射、类加载与垃圾回收
- 【转】Java中的深拷贝和浅拷贝
- [转]sql语句优化原则