在SSM框架中的DAO层就是MyBatis中的Mapper,Mapper分为两部分:Mapper接口(JAVA文件)和Mapper映射文件(XML文件)。DAO开发(Mapper开发)有两种方式:原始DAO开发和Mapper代理代码。今天就来介绍一下这两种方式。

1、原始DAO开发

  原始DAO开发就是不仅需要创建DAO接口,还需要创建其实现类。代码如下:

  DAO接口中的代码如下:

public interface EmployeeDao {
Employee findEmployeeById(int empNo) throws Exception;
List<Employee> findEmployeeByName(String name) throws Exception;
void insertEmployee(Employee employee) throws Exception;
void updateEmployee(Employee employee) throws Exception;
void deleteEmployee(int empNo) throws Exception;
}

  DAO实现类中的代码如下:

public class EmployeeDaoImpl implements EmployeeDao {
private SqlSessionFactory factory; // 通过构造方法注入SqlSessionFactory对象
public EmployeeDaoImpl(SqlSessionFactory factory) throws Exception {
this.factory = factory;
} @Override
public Employee findEmployeeById(int empNo) throws Exception {
SqlSession session = factory.openSession();
Employee employee = session.selectOne("test.findEmployeeById", empNo);
session.close();
return employee;
} @Override
public List<Employee> findEmployeeByName(String name) throws Exception {
SqlSession session = factory.openSession();
List<Employee> list = session.selectList("test.findEmployeeByName", name);
session.close();
return list;
} @Override
public void insertEmployee(Employee employee) throws Exception {
SqlSession session = factory.openSession();
session.insert("test.insertEmployee", employee);
session.commit();
session.close();
} @Override
public void updateEmployee(Employee employee) throws Exception {
SqlSession session = factory.openSession();
session.update("test.updateEmployee", employee);
session.commit();
session.close();
} @Override
public void deleteEmployee(int empNo) throws Exception {
SqlSession session = factory.openSession();
session.delete("test.deleteEmployee", empNo);
session.commit();
session.close();
}
}

  测试类代码如下:

public class EmployeeDaoImplTest {
private SqlSessionFactory factory; // 此方法在执行下面的所有方法之前执行
@Before
public void setUp() throws Exception {
// 创建SqlSessionFactory
// MyBatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream is = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入MyBatis配置文件的信息
factory = new SqlSessionFactoryBuilder().build(is);
} @Test
public void testFindEmployeeById() throws Exception {
// 创建UserDao对象
EmployeeDao dao = new EmployeeDaoImpl(factory);
// 调用UserDao对象中的方法
Employee employee = dao.findEmployeeById(7369);
System.out.println(employee);
}
}

  从上面的代码中可以看到,原始DAO开发方法存在以下三个问题:

  • DAO接口实现类中有大量的重复代码,如果把这些代码提取出来,可以大大减轻程序员的工作量。
  • 使用SqlSession的各个方法时都需要将statement的id以硬编码的方式写入到JAVA代码中,不利于维护。
  • 在调用SqlSession的各个方法时,即使参数类型错误,在编译阶段也不会报错,不利于程序debug。

针对上面的问题,我们推出Mapper代理方法开发DAO。

2、Mapper代理开发

  MyBatis可以自动生成Mapper接口的代理对象(即Mapper实现类),我们可以利用这一点来简化原始DAO开发的代码。

  在Mapper代理开发DAO时,需要遵循以下四条开发规范:

  • Mapper.xml中的namespace是Mapper接口的全路径地址;
  • Mapper接口中的方法名和Mapper.xml文件中statement的id相同;
  • Mapper接口中方法的输入参数类型和Mapper.xml中statement的parameterType相同;
  • Mapper接口中方法的返回值类型和Mapper.xml中statement的resultType相同。

  以下是代码:

  Mapper.xml中的namespace代码:

<mapper namespace="com.itgungnir.hellomybatis.mapper.EmployeeMapper">
……
</mapper>

  Mapper接口中的代码:

public interface EmployeeMapper {
Employee findEmployeeById(int empNo) throws Exception;
List<Employee> findEmployeeByName(String name) throws Exception;
void insertEmployee(Employee employee) throws Exception;
void updateEmployee(Employee employee) throws Exception;
void deleteEmployee(int empNo) throws Exception;
}

  测试代码:

public class EmployeeMapperTest {
private SqlSessionFactory factory; // 此方法在执行下面的所有方法之前执行
@Before
public void setUp() throws Exception {
// 创建SqlSessionFactory
// MyBatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream is = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入MyBatis配置文件的信息
factory = new SqlSessionFactoryBuilder().build(is);
} @Test
public void testFindEmployeeById() throws Exception {
SqlSession session = factory.openSession();
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
Employee employee = mapper.findEmployeeById(7369);
session.close();
System.out.println(employee);
}
}

  由于Mapper代理方式简单,又避免了代码的硬编码,因此现在通常都使用这种方式。

【JavaEE】之MyBatis开发DAO的更多相关文章

  1. MyBatis学习--mybatis开发dao的方法

    简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...

  2. 四 mybatis开发dao的方法

    mybatis开发dao的方法 1.1     SqlSession使用范围 1.1.1     SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...

  3. MyBatis开发Dao

    MyBatis开发Dao有两种方法: 1.原始Dao开发方法,就是程序需要编写Dao的接口和Dao的实现类. 2.MyBatis的mapper接口(相当于Dao接口)代理开发方法.(更重要) ---- ...

  4. 使用mybatis开发dao问题总结

    代码片段: @Override public User getUserById(Integer id) { SqlSession sqlSession = sqlSessionFactory.open ...

  5. 使用mybatis开发dao方法

    使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...

  6. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

  7. MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...

  8. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  9. 【JAVA - SSM】之MyBatis开发DAO

    在SSM框架中的DAO层就是MyBatis中的Mapper,Mapper分为两部分:Mapper接口(JAVA文件)和Mapper映射文件(XML文件).DAO开发(Mapper开发)有两种方式:原始 ...

随机推荐

  1. linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...

  2. Office 2019 Word表格无法跨页重复标题行

    Office 2019 Word表格无法跨页重复标题行 今天使用Word设置表格枫叶重复标题行,死活无法实现 右键属性设置还是直接点击重复标题行设置,表格整个跳转到下一页去了 然后百度了解决方案是在[ ...

  3. CSPS模拟 77

    %%两位AK爷zkt和skyh T1 位间独立,分别讨论 T2 维护标记,代替移位 T3 同一点对,多种联通,没法搞. 发现最多四路连通,考虑容斥. 显然的奇加偶减. 发现统计某种颜色的点之间的联通数 ...

  4. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  5. 简单搭建DNS服务器——bind

    1安装bind yum install -y bind bind-utils bind-chroot 2 修改配置文件 # grep '^[^#]' /etc/named.conf options { ...

  6. ORACLE存储过程的创建和执行的简单示例和一些注意点

    此示例的主要目的主要是为了了解在PL/SQL环境下怎么创建和执行存储过程. 存储过程所涉及的DataTable: 第一步:创建游标变量 游标是ORACLE系统在内存中开辟的一个工作区,主要用来存储SE ...

  7. 一分钟带你学会利用mybatis-generator自动生成代码!

    目录 一.MyBatis Generator简介 二.使用方式 三.实战 之前的文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介 ...

  8. 连接xshell 时 连不上的问题

      最近这一周由于自己的xshell突然连接不到虚拟机,在网上找了很多种方法也没能解决,以至于自己在学习很多知识的时候都没能很好的去验证,去尝试.最后在求助大佬的时候终于将xshell重新连接到了虚拟 ...

  9. 7月22 Linux作业-文件管理

    习题内容 解答 1.答案 [root@centos7 ~]# echo '*/1 * * * * /usr/bin/cp /etc /data/`/usr/bin/date +\%Y-\%m-\%d` ...

  10. 《计算机网络 自顶向下方法》 第6章 链路层和局域网 Part2

    待补充完善 Web 页面的请求历程 应用层     报文.主机 运输层     报文段. 网络层     数据报.路由器.IP 地址 链路层     以太网帧.交换机.MAC 地址 步骤 1)到 4) ...