实现自定义框架过程中遇到的问题及解决方案:

1、执行 Resources.class.getClassLoader().getResourceAsStream(path) 方法无法获得去字节输入流

解决方案:

- path 可能出错,检查配置文件名正确,例如数据库配置xml 为 path = “SqlMapConfig.xml”

- 检查target/classes文件夹下是否有要读的xml资源文件,如果没有检查pom.xml是否有<packaging>pom</packaging>, 如果有此内容,打包方式改为<packaging>jar</packaging>, 如果通过pom方式打包,不会生成资源文件到target/classes目录下,修改后 执行mvn compile 重新编译

- 以上两步如果都没问题,应该就可以正常读到输入流了

2,执行configuration.getDataSource().getConnection()方法一直无法建立数据库连接

解决方案:

- 可能是mysql-connector-java=版本不正确,经实际测试发现 5.1.44这个版本是OK的

- 检查jdbcUrl、用户名,密码是否正确,经仔细查找发现我之前写的jdbcUrl错误,修改后:jdbc:mysql://localhost:3306/lagou?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

- 如果上面两步依然不能建立连接,检查是否数据库没有远程访问权限,可以执行

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;

FLUSH PRIVILEGES;   // 开启远程访问权限

- 以上多做了应该能建立连接了

3:出现java.lang.IllegalArgumentException: argument type mismatch

解决方案

--检查数据库的字段和实体类类型是否一致比如int,varchar(String)等。

--//使用反射,根据数据库字段和实体类对应,完成封装
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(columnName, classTypeClass);
Method writeMethod = propertyDescriptor.getWriteMethod();
writeMethod.invoke(o,value);

这里使用的方法getDeclaredFiled 仅能获取类本身的属性成员(包括私有、共有、保护) 注意和xml内的占位值要和实体类属性一致

Invoke内的值的类型注意保持一致或者为他封装类比如integer和int。

4:注意

List<User> users = sqlSession.selectList("user.findAll");
一定要和sqlMapConfig.xml,UserMapper.xml,以及dao层内的namespce和方法名一致大小写也必须一致!!!

其别名
<!--给实体类的全限定类名给别名-->
<typeAliases>
<!--给单独的实体起别名-->
<!-- <typeAlias type="com.badfisher.pojo.User" alias="user"></typeAlias>-->
<!--批量起别名:该包下所有的类的本身的类名:别名还不区分大小写-->
<package name="com.badfisher.pojo"/>

手写Mybatis代码实现会出现的问题的更多相关文章

  1. 要想精通Mybatis?从手写Mybatis框架开始吧!

    1.Mybatis组成 动态SQL Config配置 Mapper配置 2.核心源码分析 Configuration源码解析 SqlSessionFactory源码解析 SqlSession源码解析 ...

  2. 手写MyBatis ORM框架实践

    一.实现手写Mybatis三个难点 1.接口既然不能被实例化?那么我们是怎么实现能够调用的? 2.参数如何和sql绑定 3.返回结果 下面是Mybatis接口 二.Demo实现 1.创建Maven工程 ...

  3. .net学习之Session、Cookie、手写Ajax代码以及请求流程

    1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP ...

  4. 手写mybatis框架笔记

    MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...

  5. 手写MyBatis流程

    MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...

  6. 手写mybatis框架-增加缓存&事务功能

    前言 在学习mybatis源码之余,自己完成了一个简单的ORM框架.已完成基本SQL的执行和对象关系映射.本周在此基础上,又加入了缓存和事务功能.所有代码都没有copy,如果也对此感兴趣,请赏个Sta ...

  7. 框架源码系列十二:Mybatis源码之手写Mybatis

    一.需求分析 1.Mybatis是什么? 一个半自动化的orm框架(Object Relation Mapping). 2.Mybatis完成什么工作? 在面向对象编程中,我们操作的都是对象,Myba ...

  8. 带码农《手写Mybatis》进度3:实现映射器的注册和使用

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  9. 快速开发框架(FDMS)新增1000个对外接口都不须要手写一行代码

    一个大型系统难免会跟其它系统有数据交换,这里就要提供数据接口给外部系统. 曾经在一家智能终端设备的公司上班.那段时间的主要工作就是写接口.接口须要与手机.手持设备.系统管理软件等进行数据交换.总结了一 ...

  10. 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper

    1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文把国内最流行的ORM框架Mybatis也集成了进去.但是很多时候我们希望有一些开箱即用的通用Mapper来简化我们的开发.我 ...

随机推荐

  1. mysql查询mapper返参类型为List

    List<String> lists = mapper.select(); 返参类型为List,查询没有数据的时候,lists不会为null,lists.size() 为 0.

  2. vue富文本(5版本)组件

    <template> <div> <div style="border: 1px solid #ccc; width: 500px"> < ...

  3. 微信小程序安装vant

    1.初始化npm并安装 npm init -y npm install 2.修改project.config.json { "setting": { "packNpmMa ...

  4. UG二次开发-CAM-执行方式

    以C#开发为例,通常先用[操作记录]功能录制关键代码,得到一个.cs文件. (1)可以直接使用[播放操作记录]的方式执行该.cs文件. (2)可以建立一个C#的类库工程,将上述.cs文件加载进去,添加 ...

  5. Spring Cloud netty

    <properties> <spring.boot.version>2.3.2.RELEASE</spring.boot.version> <spring.c ...

  6. density plot

    FIN=read.table("/Users/zhongyuantian/macshare/workSpace2021/1.TFY/1.3.TFY20201215/1.3.1.TFY1C_T ...

  7. defer语句

    1.defer语句 延时机制,在函数中,经常需要创建资源(比如:数据库连接.文件句柄.锁等),为了在函数执行完毕后,及时释放资源,使用defer a. 当执行defer时,暂时不执行,会将defer后 ...

  8. LNK2001 无法解析的外部符号 "int const ROUND"

    今天在写代码时出现了这个错误,网上的解决方法都不合适 我的代码是这样,在一个cpp里申明了一个常量 //data.cpp const int ROUND = 3; 然后在一个头文件里申明为全局变量 / ...

  9. 关于使用antd-proTable,报错 ResizeObserver loop limit exceeded

    错误如上,原因有几种情况 一:columns中,属性又ellipsis属性,但是没有设置width,导致table不知道如何计算在什么时候,开始对内容进行加省略号,出现了计算错误 如  const c ...

  10. 使用react-vite-antd,修改antd主题,报错 [vite] Internal server error: Inline JavaScript is not enabled. Is it set in your options? It is hacky way to make this function will be compiled preferentially by less

    一般报错 在官方文档中,没有关于vite中如何使用自定义主题的相关配置,经过查阅 1.安装less  yarn add less (已经安装了就不必再安装) 2.首先将App.css改成App.les ...