手写Mybatis代码实现会出现的问题
实现自定义框架过程中遇到的问题及解决方案:
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代码实现会出现的问题的更多相关文章
- 要想精通Mybatis?从手写Mybatis框架开始吧!
1.Mybatis组成 动态SQL Config配置 Mapper配置 2.核心源码分析 Configuration源码解析 SqlSessionFactory源码解析 SqlSession源码解析 ...
- 手写MyBatis ORM框架实践
一.实现手写Mybatis三个难点 1.接口既然不能被实例化?那么我们是怎么实现能够调用的? 2.参数如何和sql绑定 3.返回结果 下面是Mybatis接口 二.Demo实现 1.创建Maven工程 ...
- .net学习之Session、Cookie、手写Ajax代码以及请求流程
1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP ...
- 手写mybatis框架笔记
MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...
- 手写MyBatis流程
MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...
- 手写mybatis框架-增加缓存&事务功能
前言 在学习mybatis源码之余,自己完成了一个简单的ORM框架.已完成基本SQL的执行和对象关系映射.本周在此基础上,又加入了缓存和事务功能.所有代码都没有copy,如果也对此感兴趣,请赏个Sta ...
- 框架源码系列十二:Mybatis源码之手写Mybatis
一.需求分析 1.Mybatis是什么? 一个半自动化的orm框架(Object Relation Mapping). 2.Mybatis完成什么工作? 在面向对象编程中,我们操作的都是对象,Myba ...
- 带码农《手写Mybatis》进度3:实现映射器的注册和使用
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 快速开发框架(FDMS)新增1000个对外接口都不须要手写一行代码
一个大型系统难免会跟其它系统有数据交换,这里就要提供数据接口给外部系统. 曾经在一家智能终端设备的公司上班.那段时间的主要工作就是写接口.接口须要与手机.手持设备.系统管理软件等进行数据交换.总结了一 ...
- 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文把国内最流行的ORM框架Mybatis也集成了进去.但是很多时候我们希望有一些开箱即用的通用Mapper来简化我们的开发.我 ...
随机推荐
- nohup 命令 追加输入日志或者覆盖输出日志
nohup python3 -u botxiaohui.py >> botruninfo.log 2 >&1 & >> 是追加的输出 > 单 ...
- Python 错误:TypeError: range() takes no keyword arguments
问题描述: for循环时使用range()出错: for page in range(start=1, stop=8 + 1,step=1): print(page) 结果报错TypeError: r ...
- CentOS安装并查看lm_sensors CPU温度监控
CentOS安装并查看lm_sensors 首先查看是否安装rpm包: [root@localhost home]# rpm -qa|grep sensors lm_sensors-libs-3.1. ...
- MySQL使用bin-log将数据恢复到某个时间点
binlog的三种模式 statement:记录每一条修改数据的sql row:保存哪条记录被修改 mixed:兼顾前两者的优点. # 查看binlog有没有开启 SHOW VARIABLES LIK ...
- 2020/03/24 HTML基础复习笔记
2020-03-24 15:49:30 下午好! 这是我开通博客的第二天也是在钉钉上网课的又一天,为了应对考试现在复习到了HTML基础知识,本打算用VS敲想了想还是用了XMind(真的好用!!!)文件 ...
- Eclipse导入第四版《算法》algs4库
最近在研究<算法>,遇到algs4库导入eclipse问题,查了很多网站,都不适用,最终解决,特此记录一下.第一次写博客,有什么不足之处望各位大神纠正. 1. 首先打开eclipse软件, ...
- liunx密码破解
重启系统后出现GRUB界面在引导装载程序菜单上,用上下方向键选择你忘记密码的那个系统键入"e" 来进入编辑模式.进入"编辑模式"之后用上下方向键上下移动光标,找 ...
- raid随笔
1.raid 0 准备两个磁盘 [root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 40G 0 disk ...
- Vue 的下拉刷新指令
loadmore: { //自定义指令: 下拉加载 bind(el, binding) { let p = 0; let t = 0; let down = true; el.addEventList ...
- Leecode 88.合并两个有序数组
想法: 1:先把nums2中的所有元素都放到nums1,之后给合并后的数组排序 1 官方代码: 2 class Solution { 3 public void merge(int[] nums1 ...