MyBatis之Dao层实现
文章目录
- 1、传统开发方式
- 2、代理开发方式
我们在了解 MyBatis 的映射文件和配置文件时,所举例的实例都是通过单元测试的方式实现。但在实际开发中,我们需要将 MyBatis 的实现写到 Dao 层中。所以下面我们具体了解两种 Dao 层的实现方式
1、传统开发方式
在传统 web 开发中,我们首先需要定义 Dao 接口,然后定义 DaoIImpl 类实现接口。
定义 UserDao 接口:
public interface UserDao {// 1、 根据用户ID查询用户信息public User findUserById(int id) throws IOException;
// 2、 根据用户ID和用户名称查询用户信息public User findByUserIdAndName(User user) throws IOException;
}
定义 UserDao 接口的实现类 UserDaoImpl :
public class UserDaoImpl implements UserDao {// 依赖注入,将工程在外面创建private SqlSessionFactory sqlSessionFactory;public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {//将外面创建的工厂传递进来(以后spring)this.sqlSessionFactory = sqlSessionFactory;}
@Overridepublic User findUserById(int id) throws IOException {// 创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 调用SqlSession的增删改查方法User user = sqlSession.selectOne("userMapper.findByUserId", id);System.out.println(user);// 关闭资源sqlSession.close();return user;}
@Overridepublic User findByUserIdAndName(User user) throws IOException {// 创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 调用SqlSession的增删改查方法User user= sqlSession.selectOne("userMapper.findByIdAndName", user);System.out.println(user);// 关闭资源sqlSession.close();return list;}
}
模拟业务层调用:
public static void main(String [] args) throws Exception {InputStream inputStream = Resources.getResourceAsStream(resource);// 创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);UserDao dao = new UserDaoImpl(sqlSessionFactory);User user = dao.findUserById(1);System.out.println(user);
}
这种方式其实大家都会,在学习 javaweb 的时候我们就是使用这种方式实现 Dao 层,只是连接数据库的方式改变了。
2、代理开发方式
分析第一种方式的代码会发现有大量的重复的模板代码。为了简化开发,Mybatis 提供了一种代理开发的方式,这种方式是项目开发中 Mybatis 实现 Dao 层的主流。
代理开发方式只需要程序员编写Mapper 接口(相当于Dao 接口),然后由 Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 代理开发方式使用的是动态代理的 JDK 代码实现的。
Mapper 接口需要遵循以下规范:
映射文件中的
mapper
标签的namespace
属性与 mapper 接口的全限定名相同
映射文件中的每条映射语句中
id
的属性值与 mapper 接口中方法名相同
映射文件中的每条映射语句的
parameterType
属性与 mapper 接口中方法的形参相同
映射文件中的每条映射语句的
resultType
属性与 mapper 接口中方法的返回值类型相同
如果 Mapper 接口已经遵循上述规范,那么不需要创建 Dao 层的实现类了,可以直接进行使用:
public static void main(String [] args) throws Exception {InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();UserDao dao = sqlSession.getMapper(UserDao.class);User user = dao.findByUserId(1);System.out.println(user);
}
MyBatis之Dao层实现相关推荐
- MyBatis-学习笔记06【06.使用Mybatis完成DAO层的开发】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- MyBatis的Dao层实现方式
MyBatis的Dao层实现方式 MyBatis的Dao层实现 1.1 传统开发方式 1. 编写UserDao接口 public interface UserDao { List<User> ...
- Spring整合Mybatis之DAO层、Service层开发
3. Spring整合Mybatis编程DAO层开发 1. 项目引入相关依赖spring mybatis mysql mybatis-spring druid2. 编写spring.xml整合:spr ...
- Mybatis的Dao层实现
Mybatis的Dao层实现 1.传统方式实现 创建接口com.dao.UserMapper package com.dao;import com.domain.User;import java.io ...
- 详解MyBatis的Dao层实现和配置文件深入
这篇文章主要为大家详细介绍了MyBatis的Dao层实现和配置文件深入,文中的示例代码讲解详细,感兴趣的小伙伴快来跟随小编一起学习一下 目录 [Mybatis的Dao层实现] [传统开发方式] [代理 ...
- IDEA项目搭建四——使用Mybatis实现Dao层
一.引入mybatis及mysql的jar包 可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入 <de ...
- Mybatis 原始Dao层开发
对Mybatis进行原始Dao层开发的举例子: 定义获取session工具类: package com.langsin.unit;import java.io.InputStream;import o ...
- SpringBoot+MyBatis项目Dao层最简单写法
前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...
- Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的...
参考mybatis入门基础(二)----原始dao的开发和mapper代理开发 其实也就是通过接口名与mapper的id绑定在一起,通过SQL去写实现类,返回数据. 转载于:https://www.c ...
最新文章
- 七、Oracle 数据库设计
- mysql 创建唯一索引_Mysql创建索引
- Android 系统(135)---Android anr 分析步骤总结
- python中inspect的用法(这个难懂,后期再补)
- pandas-pandas.Categorical
- 微信红包随机数字_微信红包随机算法初探
- 5G时代将给智能营销笔记本带来什么样的改变
- python魂斗罗源码_经典儿时游戏魂斗罗源代码
- Mac 下终端运行C++
- NRF24L01的配置详解
- Bootstrap-CL:标签
- node.js的认识与了解3
- webapi2学习笔记
- hanlp自然语言处理包的使用
- linux系统内存used占用过高问题排查
- android 判断activity是否在运行,Android 判断某个Activity 是否在前台运行的实例
- BAOCMS【QQ登录】回调地址常见问题及修改方法
- 棋牌游戏为什么会这么的“火”
- 2011年IT业趋势盘点(谈IT发展,观天下大势)
- 职中计算机考证是几级
热门文章
- Couldn't find preset @babel/preset-env relative to directory
- 使用DaemonSet定制AKS工作节点
- 年度AI对话|达观陈运文:做私有部署的大模型,数据安全更具优势
- BPS 大报文按照二元组/四元组拆分成小报文
- js截取指定字符前面或后面的内容
- html隐藏怎么出来,html怎么让元素隐藏
- div section和article区别
- https://blog.csdn.net/lu_embedded/article/details/82997438
- Android签名打包很慢,Android APK快速签名—优化打包时间
- Matlab/Simulink自动生成C代码实验