360搜索网站提交入口,wordpress 分类目录函数,镇网站制作价格,网络规划设计师小张对自己正在做的一个项目文章目录 问题情境
代理开发 遵循的三条原则
1.定义与SQL映射文件同名的Mapper接口#xff0c;并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口的全限定名
3.在Mapper接口中定义方法#xff0c;方法名就是SQL映射文件中sql…
文章目录 问题情境
代理开发 遵循的三条原则
1.定义与SQL映射文件同名的Mapper接口并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口的全限定名
3.在Mapper接口中定义方法方法名就是SQL映射文件中sql语句的唯一标识id并保持参数类型与返回值类型一致
编码测试类
测试结果 问题情境 在上一篇文章中博主分享了一个Mybatis的快速入门案例但是细心的朋友会发现在测试类中使用Mybatis查询数据库信息的那块代码中存在着“硬编码”问题如下图所示 当SQL映射文件中查询语句id较多时开发者还要去那个文件翻看这样非常不方便且降低了开发效率故本篇文章仍然以该入门案例为例针对其中存在的问题来重点介绍一下Mybatis中的Mapper代理开发看看它是如何巧妙地解决上述“硬编码”问题的。
代理开发 遵循的三条原则
1.定义与SQL映射文件同名的Mapper接口并且将Mapper接口和SQL映射文件放置在同一目录下 方法一直接将SQL映射文件拖到到Mapper接口所在的文件夹下 注虽然可行但是不符合开发规范应该将配置文件和编码文件分开当配置文件很多时将二者杂糅在一起逻辑非常不清晰很乱所以这种方法不建议使用更推荐使用方法二。
方法二在resources资源文件夹下建立与Mapper接口路径相同的文件夹 新建完对应文件夹之后将SQL映射文件放进去即可如图所示 因为修改了SQL映射文件的路径所以在Mybatis的核心配置文件中加载SQL映射文件路径的名称也得相应的改变 注新建同路径文件夹时必须使用斜杠 / 来显示层级关系而不能使用点号 .
正确语句itheima/mapper 这样创建的文件夹才能显示层级关系错误语句itheima.mapper 这样创建的文件夹只能显示名为itheima.mapper的一级文件夹不能显示层级即无法使mapper成为itheima的子文件夹
只有这样才能使得SQL映射文件路径与其对应的Mapper文件路径相同才能代理成功
这一点一定要额外注意
2.设置SQL映射文件的namespace属性为Mapper接口的全限定名 3.在Mapper接口中定义方法方法名就是SQL映射文件中sql语句的唯一标识id并保持参数类型与返回值类型一致 编码测试类
package itheima;import itheima.mapper.UserMapper;
import itheima.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.io.IOException;
import java.util.List;import static org.apache.ibatis.io.Resources.getResourceAsStream;
/*** Mapper代理开发入门案例*/
public class MybatisDemo2 {public static void main(String[] args) throws IOException{//1.加载mybatis的核心配置文件获取SqlSessionFactoryString resource mybatis-config.xml;InputStream inputStream getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象用它来执行sqlSqlSession sqlSession sqlSessionFactory.openSession();//3.执行sql,将查询到的学生数据以学生类的形式包装起来返回
// ListUser userssqlSession.selectList(Mybatis-test.selectAllUser);//3.1使用Mapper代理开发获取UserMapper接口的代理对象UserMapper userMappersqlSession.getMapper(UserMapper.class);ListUserusersuserMapper.selectAllUser();System.out.println(users);//4.释放资源sqlSession.close();}
}测试结果 查询得到与之前相同的数据但简化了方式解决了原生写法中“硬编码问题”Mapper代理成功 END.