使用Mapper代理开发解决硬编码问题
步骤:
一、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
二、设置SQL映射文件的namespace属性为Mapper接口全限定名
三、在Mapper接口中定义方法,方法名就是SQL映射文件SQL语句的id,并且保持参数类型与返回值类型一致
四、编码
1.通过SQL Session的getMapper方法获取Mapper接口的代理对象
2.调用对应方法完成sql语句的执行
------正文-------
一、
将Mapper接口和SQL映射文件放置在同一目录下时,可以在resources包下创建一个与Mapper接口同名的包,在resources下创建多层次包可以写org/example/mapper,这里的名字要与mappper接口名一致,创建多层次必须是/分隔开,org.example.mapper创建的是一个包。
第一步完成后compell(编译Maven),可以看到如下图:
二、设置SQL映射文件的namespace属性为Mapper接口全限定名
代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
名称空间
-->
<mapper namespace="org.example.mapper.UserMapper"><!--设置SQL映射文件的namespace为MaPPer接口全限定名--><select id="selectAll" resultType="org.example.pojo.User">select * from tb_user;</select>
</mapper>
三、 在Mapper接口中定义方法,方法名就是SQL映射文件SQL语句的id,并且保持参数类型与返回值类型一致,selectAll是SQL语句的id。
package org.example.mapper;import org.example.pojo.User;import java.util.List;//返回对象集合用的是List
public interface UserMapper {List<User> selectAll();
}
四、
1.通过SQL Session的getMapper方法获取Mapper接口的代理对象,UserMaper userMapper = sqlSession.getMapper(UserMapper.class),传入UserMapper的类型,返回一个UserMapper代理对象userMapper。userMapper会调用它的方法selecAll方法,selectAll方法对应着.xml文件里的SQL语句id,通过Id获取对应的SQL语句,方法返回值为List<xxx>,所以相当于是执行了
List<User> users = sqlSession.selectList("test.selectAll");(在Mybatis学习笔记)
但是消除了需要显示写出id等硬编码问题,有利于后期维护。
2.调用对应方法完成sql语句的执行
main函数代码:
package org.example.pojo;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.example.mapper.UserMapper;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyBatisDemo2 {public static void main(String[] args) throws IOException {//加载核心配置文件,获取sqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取sqlSess对象,用它执行sql语句SqlSession sqlSession=sqlSessionFactory.openSession();//执行sql语句//List<User> users = sqlSession.selectList("test.selectAll");//获取UserMapper接口的代理对象UserMapper UserMapper = sqlSession.getMapper(UserMapper.class);//传入UserMapper的类型,返回一个UserMapper代理对象List<User> users = UserMapper.selectAll();System.out.println(users);//释放资源sqlSession.close();}
}
使用Mapper代理开发解决硬编码问题相关推荐
- Mybatis学习总结(二)——Mapper代理开发
一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码. (2)调用SqlSession的方法(select/insert/update)需要指定Statement的id ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...
- 初识 My Batis一 什么是My Batis,JDBC缺点,My Batis简化,Mapper 代理开发,My Batis 核心配置文件
文章目录 MyBatis 什么是MyBatis? 持久层 框架 JDBC缺点 Mybatis简化 MyBatis快速入门 查询 user 表中所有数据 解决 SQL 映射文件的警告提示 Mapper代 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 使用MyBatis开发Dao ...
- 4、MyBatis + Log4j日志查看Sql参数、结果集元数据、Mapper代理开发、JDK的动态代理与CGLib代理
文章目录 MyBatis优化开发 日志 ResultSet如何转换为Java对象 数据库元数据 结果集元数据 Fastjson 基于MyBatis的DAO开发(传统) 推荐mapper代理开发 JDK ...
- Mybatis的mapper代理开发方法
一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...
- SSM21:Mapper代理开发
目录 创建数据库 连接数据库 导入坐标pom.xml 编写mybatis.xml配置文件 编写日志配置文件 编写sql映射文件UserMapper.xml 创建UserMapper接口 创建pojo类 ...
- 09_Mybatis开发Dao方法——mapper代理开发规范
一.开发规范 需要编写mapper.xml映射文件(本项目为userMapper.xml,类似于前面的user.xml). 编写mapper接口需要遵循一些开发规范,这样MyBatis可以自动生成ma ...
- 大厂卡你的学历,究竟是为了什么?,android开发视频硬编码
因此Android工程师的养成,一部分依然靠纯自学,大部分则靠培训,无论「培训」背负了多少的骂名,但整个Android行业,二三十万的从业者,抛开少部分大学计算机科班和软件工程相关专业的,绝大多数都是 ...
最新文章
- 程序员入职锦囊妙计 --读书笔记
- linux字符设备驱动架构,linux驱动开发--字符设备:cdd_cdev结构中private_data使用
- 【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )
- Python二分查找的三种思路
- 为什么`malloc`出来的内存也能当成对象正常使用
- Linux基础优化方法(四)———远程连接缓慢优化
- JAVA常用API或编程工具002---SpringSource Tool Suite:基于Eclipse的Spring应用开发环境
- 剑指offer面试题[27]-二叉搜索树与双向链表
- MySQL CASE WHEN 根据一个表的字段值不同关联查询两张不同的表【子查询】
- 中国土壤全磷含量空间分布数据
- 安卓rom制作教程_【教程】安卓手机刷入第三方ROM通用教程
- C语言字符数组练习题
- Kconfig中select与depends on原理
- 像智能手机一样造车,可能吗?
- shell中大于号和小于号
- react-app-rewired 修改 react 项目默认端口号
- 在FPGA开发板上玩《超级玛丽》之笔记 -(2)重构2A03CPU
- 北航计算机专业录取线,北航各专业录取分数线
- Java9、10、11、12、13、14、15、16、17个版本新特性
- win10xp化折腾指南
热门文章
- 【设计模式】11-15:迪米特拉(最小知识)原则、外观模式、建造者模式、观察者模式、抽象工厂模式...
- POI设置excel样式
- 【随手记】Oracle存储过程报错 Compilation errors for PACKAGE BODY
- C++泰勒公式实现反余弦函数
- Android 底部导航栏-极致简单版
- 练习---打印出电影天堂中电影的下载链接
- 微服务实施笔记(二)——搭建实验部署环境
- Redis——发布/订阅
- android 说出密码,小米路由器微信好友认证功能实际体验
- Signal Processing投稿经历