手写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来简化我们的开发.我 ...
随机推荐
- angular 父组件调用子组件的方法
- 第16章 发布和部署应用程序(ASP.NET Core in Action, 2nd Edition)
本章包括 发布 ASP.NET Core 应用程序 在 IIS 中托管 ASP.NET Core 应用程序 自定义 ASP.NET Core 应用程序的 URL 通过捆绑和缩小优化客户端资源 到目前为 ...
- pytorch代码练习
pytorch练习 使用torch.Tensor定义数据 , tensor的意思是张量,是数字各种形式的总称,可以定义数.向量.二维数组和张量. import torch # 可以是一个数 x = t ...
- STL练习-看病要排队
题目http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的 ...
- oracle 白名单作用及配置教程
出于提高数据安全性等目地,我们可能想要对oracle的访问进行限制,允许一些IP连接数据库或拒绝一些IP访问数据库. 当然使用iptables也能达到限制的目地,但是从监听端口变更限制仍可生效.只针对 ...
- 游戏内存优化之使用16位纹理/NPOT
转自:https://blog.csdn.net/oqqQuZi1234567/article/details/41749599 图片文件大小和纹理内存占用是两码事.假设他们是帐篷.图片文件就相当于帐 ...
- leetcode用例导入数据库(PHP实现) import leetcode json case into database
<?php // 换成你自己的json $str = '{"headers":{"student":["name","con ...
- Lombok和MapStruct冲突
Lombok和MapStruct冲突导致无法生成正确的class文件. lombok自动生成getset等冗余代码. MapStruct对象copy.传统的BeanUtils.copy等利用的反射原理 ...
- 第四章 快速排序 分而治之(divide an conquer)
def quicksort(array): if len(array) < 2: return array else: flag = array[0] less = [] greater = [ ...
- wrangler 13 mwz 脱浆记录
100度水泡了1个小时,一点没缩 70度水泡了3个小时,一点没缩 随后绝望,放洗衣机里洗了20min,缩了2cm 想再接再厉,放洗衣机30min,没缩 放外面晾干,看晾干以后多长吧 --------- ...