传统的Dao层开发通过接口与实现类的方式,Mybatis中通过mapper动态代理是需要定义接口。

1.传统Dao层封装

那么可以将公共资源提取出来,剩余的封装成方法来实现。下面是UserDaoImpl.java中对查询的简单封装

 package com.mybatis.dao.impl;

 import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory; import com.mybatis.dao.UserDao;
import com.mybatis.pojo.User; public class UserDaoImpl implements UserDao { //没有导入Spring,采用传参的方式获取
SqlSessionFactory sqlSessionFactory ; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
super();
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public User findUserById(Integer id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById",id); sqlSession.close();
return user;
} }

在测试中通过加载公共资源,确定调用的mapper文件(此时表示User.xml)

 @Test
public void testName() throws Exception {
/**
* 1. 创建SqlSessionFactoryBuilder对象
2. 加载SqlMapConfig.xml配置文件
3. 创建SqlSessionFactory对象
4. 创建SqlSession对象
5. 执行SqlSession对象执行查询,获取结果User
6. 打印结果
7. 释放资源
*/
String resource = "SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); UserDao userdao = new UserDaoImpl(sqlSessionFactory); User user = userdao.findUserById(1); System.out.println(user.getUsername());

2.mapper动态代理模式

UserMapper um = sqlSession.getMapper(UserMapper.class);获取代理,传入的值为创建的动态代理接口

(个人理解,有误希望指正)

在UserMapper接口中,创建的方法需要满足以下四个原则Mybatis才能进行动态代理操作:

 public interface UserMapper {
//四大原则
//1.接口中的方法名与User.xml中对应的id名一致
//2.方法中的返回类型与User.xml中的一致
//3.传入的参数类型一致
//4.命名空间绑定此接口
public User findUserById(Integer id);
}

前三个好理解,方法的名字,返回类型,参数类型与User.xml文件中的属性一致。命名空间绑定此接口,只需要在namesapce上用接口的全路径。如下:

注意:User.xml一定要在核心配置SqlMapConfig.xml中加载

3.mapper映射器

     <mappers>
<!-- 第一种方式只需指定mapper文件路径即可 -->
<mapper resource="sqlmap/User.xml"/>
<mapper resource="sqlmap/UserMapper.xml"/>
<!-- 第二种方式,需对应接口的路径,同时mapper文件名需与接口名一致,文件位置必须在同一目录下 -->
<mapper class="com.mybatis.mapper.UserMapper"/>
<!-- 第三种方法,指定接口文件的包名,同时mapper文件名需与接口名一致,文件位置必须在同一目录下 -->
<package name="com.mybatis.mapper"/>
</mappers>

推荐使用第三种方式。

最新文章

  1. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上
  2. 2016 Multi-University Training Contest 1 F.PowMod
  3. Bootstrap学习笔记(一)
  4. HTML5 video 支持air play
  5. 转载java源代码阅读方法
  6. 14.Apache配置
  7. Jquery获对HTML控件的控制
  8. Permutations 好题
  9. SPA架构的优点和缺点以及一些思考
  10. Ajax实例OR技术原理 转自 (http://blog.csdn.net/evankaka )
  11. NOJ-1581 筷子 (线性DP)
  12. 在 Deepin 中搭建 GitLab
  13. Github优秀开源项目
  14. 11个你应该知道的django博客引擎
  15. tornado 模版继承 函数和类的调用
  16. Meter and pixel units in a box2d game - LibGDX
  17. adas--智能驾驶辅助系统
  18. 《机器学习实战》中贝叶斯分类中导入RSS源例子
  19. js数字过大js自动变0
  20. navmesh自动寻路

热门文章

  1. 完美解决Bootstrap4 导航栏 fixed-top 后,锚点定位时遮挡问题
  2. [ZJOI2019]Minimax搜索
  3. Powershell cannot be loaded because running scripts is disabled on this system 解决办法
  4. python怎么解决用matplotlib画图时无法显示中文的问题或者出现方框的问题
  5. 二、利用继承修改OPENERP 的一个模块
  6. Java Web入门学习(一) STS与Tomcat配置
  7. 《python灰帽子》学习笔记:调试器设置
  8. mac环境下使用docker安装nginx
  9. InnoDB的后台线程(IO线程,master线程,锁监控线程,错误监控线程)和内存(缓冲池,重做日志缓冲池,额外内存池)
  10. URL重写html后Html文件打不开解决办法