【JAVA - SSM】之MyBatis开发DAO
来源:互联网 发布:跳跃网络的游戏有哪些 编辑:程序博客网 时间:2024/06/05 10:29
在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;}@Overridepublic Employee findEmployeeById(int empNo) throws Exception {SqlSession session = factory.openSession();Employee employee = session.selectOne("test.findEmployeeById", empNo);session.close();return employee;}@Overridepublic List<Employee> findEmployeeByName(String name) throws Exception {SqlSession session = factory.openSession();List<Employee> list = session.selectList("test.findEmployeeByName", name);session.close();return list;}@Overridepublic void insertEmployee(Employee employee) throws Exception {SqlSession session = factory.openSession();session.insert("test.insertEmployee", employee);session.commit();session.close();}@Overridepublic void updateEmployee(Employee employee) throws Exception {SqlSession session = factory.openSession();session.update("test.updateEmployee", employee);session.commit();session.close();}@Overridepublic 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;// 此方法在执行下面的所有方法之前执行@Beforepublic void setUp() throws Exception {// 创建SqlSessionFactory// MyBatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream is = Resources.getResourceAsStream(resource);// 创建会话工厂,传入MyBatis配置文件的信息factory = new SqlSessionFactoryBuilder().build(is);}@Testpublic void testFindEmployeeById() throws Exception {// 创建UserDao对象EmployeeDao dao = new EmployeeDaoImpl(factory);// 调用UserDao对象中的方法Employee employee = dao.findEmployeeById(7369);System.out.println(employee);}}从上面的代码中可以看到,原始DAO开发方法存在以下三个问题:
(1)DAO接口实现类中有大量的重复代码,如果把这些代码提取出来,可以大大减轻程序员的工作量。
(2)使用SqlSession的各个方法时都需要将statement的id以硬编码的方式写入到JAVA代码中,不利于维护。
(3)在调用SqlSession的各个方法时,即使参数类型错误,在编译阶段也不会报错,不利于程序debug。
针对上面的问题,我们推出Mapper代理方法开发DAO。
2、Mapper代理开发
MyBatis可以自动生成Mapper接口的代理对象(即Mapper实现类),我们可以利用这一点来简化原始DAO开发的代码。
在Mapper代理开发DAO时,需要遵循以下四条开发规范:
(1)Mapper.xml中的namespace是Mapper接口的全路径地址;
(2)Mapper接口中的方法名和Mapper.xml文件中statement的id相同;
(3)Mapper接口中方法的输入参数类型和Mapper.xml中statement的parameterType相同;
(4)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;// 此方法在执行下面的所有方法之前执行@Beforepublic void setUp() throws Exception {// 创建SqlSessionFactory// MyBatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream is = Resources.getResourceAsStream(resource);// 创建会话工厂,传入MyBatis配置文件的信息factory = new SqlSessionFactoryBuilder().build(is);}@Testpublic 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代理方式简单,又避免了代码的硬编码,因此现在通常都使用这种方式。
- 【JAVA - SSM】之MyBatis开发DAO
- 【SSM-MyBatis框架】MyBatis开发DAO的方式
- SSM框架学习之(一)Mybatis——原始Dao开发
- Mybatis-Dao层开发之原始dao
- mybatis之dao的开发
- SSM之DAO部分Spring与MyBatis整合
- Mybatis-Dao层开发之Mapper接口
- SSM框架Mybatis之Mapper代理开发
- mybatis(6)--mybatis开发dao之原始开发
- 【JAVA - SSM】之MyBatis输出映射
- 【JAVA - SSM】之MyBatis动态SQL
- 【JAVA - SSM】之MyBatis查询缓存
- Mybatis之原始dao开发方法(程序员需要写dao接口和dao实现类)(11)
- java开发之框架搭建(SSM整合+profile+mybatis逆向工程)
- Mybatis 开发dao层
- mybatis开发dao方法
- 原始DAO开发mybatis
- 使用Mybatis开发Dao
- 使用 Node.js 與 Socket.IO 建立即時性(Realtime)網頁應用程式 App
- 第十五周9
- 【异常】自定义异常
- Unity中使用UGUI制作Prefab后,调用Instantiate动态生成Button无法点击的解决方法
- insert元素主键回填与自定义规则
- 【JAVA - SSM】之MyBatis开发DAO
- HTC UGUI检测到射线
- 我离优秀的程序员有多远的距离
- 关于高德地图开发-调试通过-打包失败(授权Key不正确)
- 第一天01 JAVA JDK7(学习笔记)
- php中的短标签
- PPP协议概述
- OkHttpUtils - 封装了okhttp的网络框架
- django小计2