Mybatis 开发 dao 的方法
1、分析SqlSession使用范围
1.1、SqlSessionFactoryBuilder
通过 SqlSessionFactoryBuilder 创建会话工厂 SqlSessionFactory
将 SqlSessionFactoryBuilder 当成一个工具类使用即可,不需要使用单例管理 SqlSessionFactoryBuilder。
在需要创建 SqlSessionFactory 时候,只需要 new 一次 SqlSessionFactoryBuilder 即可。
1.2、SqlSessionFactory
通过会话工厂 SqlSessionFactory 创建 SqlSession,通过单例模式管理 SqlSessionFactory(工厂一旦创建,一直使用一个实例)。
将来 mybatis 和 spring 整合后,通过单例模式管理 SqlSessionFactory。
1.3、SqlSession
SqlSession 是一个面向用户(程序员)的接口。
SqlSession 中提供了很多操作数据库的方法:selectOne(返回单个对象)、selectList(返回单个或多个对象)。
SqlSession 是线程不安全的,在 SqlSession 实现类中除了有接口中的方法(操作数据库的方法),还有数据域的属性。
SqlSession 最佳应用场合在方法体内,定义成局部变量。
2、原始 dao 的开发(程序员需要写 dao 接口和 dao 实现类)
2.1、思路:
程序员需要些 dao 接口和 dao 实现类。
需要向 dao 实现类 中注入 SqlSessionFactory,在方法体内通过 SqlSessionFactory 创建 SqlSession
2.2、dao接口:
public interface UserDao { // 根据id查询用户信息
public User findUserById(int id) throws Exception; // 添加用户信息
public void insertUser(User user) throws Exception; // 删除用户信息
public void deleteUser(int id) throws Exception;
}
2.3、dao层实现类:
public class UserDaoImpl implements UserDao { //向dao实现类中注入 SqlSessionFactory
//通过构造方法注入
private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
} public User findUserById(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById", id);
// 释放资源
sqlSession.close();
return user;
} public void insertUser(User user) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行插入的操作
sqlSession.insert("test.insertUser", user); // 提交事务
sqlSession.commit(); // 释放资源
sqlSession.close();
} public void deleteUser(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行删除的操作
sqlSession.insert("test.deleteUser", id); // 提交事务
sqlSession.commit(); // 释放资源
sqlSession.close();
} }
2.4、测试代码:
public class UserDaoImplTest { private SqlSessionFactory sqlSessionFactory; // 此方法是在执行 testFindUserById 之前执行
@Before
public void setUp() throws Exception{
//创建sqlSessionFactory // mybatis配置文件
String resource = "config/SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void testFindUserById() throws Exception {
// 创建UserDao对象
UserDao userDao = new UserDaoImpl(sqlSessionFactory); // 调用UserDao的方法
User user = userDao.findUserById(1); System.out.println(user);
} }
2.5、总结原始 dao 开发问题
(1)dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。
(2)调用 sqlSession 方法时将 statement 的 id 硬编码。
(3)调用 sqlSession 方法时传入的变量,由于sqlSession 方法使用泛型,即使变量类型传入错误,在编译阶段也不报错。 不利于程序员开发。
3、mapper代理方法(程序员只需要 mapper 接口——相当于 dao 接口)
3.1、思路(Mapper代理开发规范):
程序员还需要编写 mapper.xml 映射文件(核心)
程序员只需要编写 mapper 接口需要遵循一些开发规范,mybatis就可以自动生成 mapper 接口实现类代理对象
3.2、mapper 开发规范:
(1)在 mapper.xml 中,namespace 等于mapper接口的地址
(2)mapper.java 接口中的方法名和 mapper.xml 中 statement 的 id 一致
(3)mapper.java 接口中的方法输入参数类型 和 mapper.xml 中 statement 的 parameterType 指定的类型一致
(4)mapper.java 接口中的方法返回值类型和 statement 的 resultType 的类型一致
Mapper.xml 对比 Mapper.java
总结——以上开发规范 主要是 对下边的代码 进行统一生成:
sqlSession.selectOne("test.findUserById", id); sqlSession.selectList("test.findUserById", name); sqlSession.insert("test.insertUser", user); sqlSession.delete("test.deleteUser", id);
3.3、mapper.java:
3.4、mapper.xml:
3.5、在 SqlMapConfig.xml 中加载 mapper.xml 文件
3.6、测试代码
@Test
public void testFindUserById() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建一个 UserMapper对象,mybatis自动生成mapper代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 调用userMapper的方法
User user = userMapper.findUserById(1); System.out.println(user); }
3、一些问题的总结
3.1、代理对象内部调用 selectOne 或 selectList
如果 mapper 方法返回单个 pojo 对象(非集合对象),代理对象内部通过 selectOne 查询数据库。
如果 mapper 方法返回集合对象,代理对象内部通过 selectList 查询数据库。
3.2、mapper 接口方法参数只能有一个,这是否影响系统开发
mapper 接口方法参数只能有一个,系统是否不利于维护,系统框架中,dao 层的代码是被业务层公用的。
即使 mapper 接口只有一个参数,可以使用包装类型的 pojo 来满足不同的业务方法的需求。
注意:持久层方法的参数可以用包装类型、map.....,service 方法中建议不要使用包装类型。(不利于我们业务层的可扩展性)
Mybatis 开发 dao 的方法的更多相关文章
- MyBatis学习--mybatis开发dao的方法
简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...
- 四 mybatis开发dao的方法
mybatis开发dao的方法 1.1 SqlSession使用范围 1.1.1 SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...
- mybatis学习记录二——mybatis开发dao的方法
4.1 SqlSession使用范围 4.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSession ...
- Mybatis学习记录(二)----mybatis开发dao的方法
1 SqlSession使用范围 1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将Sq ...
- mybatis开发dao的方法——(三)
------------------------1. SqlSession使用范围------------------- 1.1 SqlSessionFactoryBuilder 通过S ...
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)
5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...
- 02_mybatis开发dao的方法
MyBatis开发dao的方法 1. SqlSession使用范围 1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂Sql ...
- 使用mybatis开发dao方法
使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...
- 11Mybatis_mybatis开发Dao的方法
在介绍开发Dao的方法之前先介绍下SqlSession. 1.先介绍一下SqlSessionFactoryBuilder:通过SqlSessionFactoryBuilder创建会话工厂SqlSess ...
随机推荐
- 网络测试技术——802.1X原理
一.以太网优点缺点 1.以太网优点 (1)即插即用,简单快捷 (2)任何一台电脑只要接入网络便有访问网络资源的权限 2.以太网缺点 (1)缺乏安全认证机制(二层) (2)电脑接到交换机上就能访问网络 ...
- 巧用 CSS 实现炫彩三角边框动画
最近有个小伙伴问我,在某个网站看到一个使用 SVG 实现的炫彩三角边框动画,问能否使用 CSS 实现: 很有意思的一个动画效果,立马让我想起了我在 CSS 奇思妙想边框动画 一文中介绍的边框动画,非常 ...
- java策略模式拙见
面向对象的两个基本准则: 单一职责:一个类只有一个发生变化的原因 开闭原则:对拓展开放,对修改关闭 <Java开发手册>中,有这样的规则:超过3层的 if-else 的逻辑判断代码可以使用 ...
- AntBlazor Theme in ABP Framework
介绍 ABP抽象了主题系统,将已有的UI更改到其他的UI框架非常简单,本文介绍了如何将主题切换为AntBlazor Theme. 源码以及示例在Gihub开源. Lsw.Abp.AntDesignUI ...
- CSS/CSS3语法新特性笔记
CSS层叠样式表 三大特性 层叠性:相同的样式会覆盖 继承性:属性可向下继承 优先级:范围越小权重越高 选择器 基础选择器 标签选择器 1 body { 2 color:#fff; 3 } 类选择器 ...
- NLP论文解读:无需模板且高效的语言微调模型(上)
原创作者 | 苏菲 论文题目: Prompt-free and Efficient Language Model Fine-Tuning 论文作者: Rabeeh Karimi Mahabadi 论文 ...
- springboot----二、Hello,SpringBoot!
二.Hello,SpringBoot! 2.1.环境搭建 java version 1.8 maven springboot 最新版 开发工具:idea 2.2.创建基础项目说明 Spring官方提供 ...
- 在 Debian 和 Ubuntu 上安装 Cutefish 可爱鱼
版权声明:原创文章,未经博主允许不得转载 CutefishOS 是一个可爱好看的新 Linux 发行版,当前最新版本为 0.8beta .这是一个基于 Debian 的发行版,从其镜像源配置就可以明显 ...
- 【python】kNN基础算法--推荐系统
虽然把text转成全部量化是可以的,但是还是需要把text转成numpy的形式(这个是必须掌握的) 在将数据输入到分类器之前,必须将待处理数据的格式改变为分类器可以接受的格式. 数据规范化.数据归一化 ...
- tp 防止xss攻击
跨站脚本攻击(Cross Site Scripting),攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. ...