MyBatis开发Dao
MyBatis开发Dao有两种方法:
1.原始Dao开发方法,就是程序需要编写Dao的接口和Dao的实现类。
2.MyBatis的mapper接口(相当于Dao接口)代理开发方法。(更重要)
-----------
原始Dao开发方法
1.思路
程序员需要写Dao接口和Dao实现类。
需要向Dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession
2.Dao接口
public interface UserDao {
//根据id查询用户信息
public User findUserById(int id) throws Exception;
//添加用户
public void addUser(User user) throws Exception;
//删除用户
public void deleteUser(int id) throws Exception;
}
3.接口的实现类
public class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; // 需要向dao实现类中注入SqlSessionFactory
// 这里通过构造方法注入
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
super();
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne(User.class.getName()+".findUserById", 1);
sqlSession.close();
return user;
} @Override
public void addUser(User user) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行插入操作
sqlSession.insert(User.class.getName()+".insertUser", user);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} @Override
public void deleteUser(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行插入操作
sqlSession.delete(User.class.getName()+".deleteUser", id);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} }
4.测试:右键:new JUnit Test Case
public class UserDaoImplTest { SqlSessionFactory sqlSessionFactory ; @Before
public void setUp() throws Exception {
String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder()//
.build(inputStream);
} @Test
public void testFindUserById() throws Exception {
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
User user = userDao.findUserById(1);
System.out.println(user);
}
}
原始 dao开发问题
1、dao接口实现类方法中存在大量模板方法:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法
,设想能否将这些代码提取出来,大大减轻程序员的工作量。
2、调用sqlsession方法时将statement的id硬编码了
3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
------------
2.MyBatis的mapper接口(相当于Dao接口)代理开发方法
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口)需要遵循一些开发规范,由Mybatis框架根据接口定义创建接口的实现类代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
1、 Mapper.xml文件中的namespace与mapper接口的全路径相同。
aaarticlea/png;base64,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" alt="" />
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" width="641" height="64" />
测试
public class UserMapperTest { SqlSessionFactory sqlSessionFactory; @Before
public void setUp() throws Exception {
String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder()//
.build(inputStream);
} @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);
}
}
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开发dao问题总结
代码片段: @Override public User getUserById(Integer id) { SqlSession sqlSession = sqlSessionFactory.open ...
- 使用mybatis开发dao方法
使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
- MyBatis开发Dao层的两种方式(Mapper动态代理方式)
MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...
- MyBatis开发Dao的原始Dao开发和Mapper动态代理开发
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...
- 【JAVA - SSM】之MyBatis开发DAO
在SSM框架中的DAO层就是MyBatis中的Mapper,Mapper分为两部分:Mapper接口(JAVA文件)和Mapper映射文件(XML文件).DAO开发(Mapper开发)有两种方式:原始 ...
- 【mybatis基础】mybatis开发dao两种方法
mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目.mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.mybat ...
随机推荐
- Django模版进阶
# -*- coding: utf-8 -*-from django.shortcuts import renderdef home(request): string = "测试" ...
- python2.7之乱码问题(直接从我的csdn上复制粘贴过来的。。。)
学习python一段时间了,一直没有写过博客.就从今天开始吧! python 3之后当然不存在乱码问题了.python 2的乱码问题有时就有点头疼了.(代码均为在windows下测试) 示例:保存为t ...
- c#中的ref、out、params参数
out参数 与c++的引用的对比 out参数可以用来传递方法返回值,与c++中的引用有点像,但是还有有些不同: - 调用方法的时候必须写out参数 - 调用方法之前必须先分配空间 - 调用方法之前不用 ...
- [转]PLS-S-00201, identifier 'CALLDEMO.GET_EMPLOYEES' must be declared 预编译错误原因及解决办法
$ proc sample9.pc SQLCHECK=SEMANTICS Pro*C/C++: Release 11.2.0.1.0 - Production on Tue Jan 8 15:18:4 ...
- Java 图形编程 二:布局管理器之顺序布局
package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...
- php中调用用户自定义函数的方法:call_user_func,call_user_func_array
看UCenter的时候有一个函数call_user_func,百思不得其解,因为我以为是自己定义的函数,结果到处都找不到,后来百度了一下才知道call_user_func是内置函数,该函数允许用户调用 ...
- hash --C++
题目来源:code[VS] 这是一个极其无聊的hash题.... 1230 元素查找 题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出 ...
- 【转】 java自定义注解
java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annot ...
- KVM通过qemu实现USB重定向
KVM是通过qemu来支持USB设备的,可以在启动的时候就指定需要连接的USB设备,也可以系统启动后动态的添加删除.通过qemu的help可知,使用qemu的usb_add host:xxx:xxx来 ...
- java NIO与IO的区别
nio是new io的简称,从jdk1.4就被引入了.现在的jdk已经到了1.6了,可以说不是什么新东西了.但其中的一些思想值得我来研究.这两天,我研究了下其中的套接字部分,有一些心得,在此分享. 首 ...