MyBatis常见问题解答
MyBatis 是一个持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO,为数据库中的记录。
1.Mybatis默认是手动提交事务的,JDBC默认是自动提交事务的。
@Test
public void testInsert() throws Exception {
SqlSession session = null;
try{
session = MyBatisUtils.openSession();
Goods goods = new Goods();
goods.setTitle("方便面");
goods.setQuality("500g");
goods.setCost(20元);
// insert ()方法返回值代表本次成功插入的记录总数
int num = session.insert("goods.insert", goods);
session.commit(); //提交事务
System.out.println(goods.getGoodsId());
}catch(Exception e){
if(session != null){
session.rollback(); //回滚事务
}
throw e;
}finally{
MyBatisUtils.closeSession(session);
}
}
2.Mapper未在mybatis核心配置文件–mybatis-config.xmll注册
报错:org.apache.ibatis.binding.BindingException: Type interface com.wen.dao.UserDao is not known to the MapperReqistry
解决办法:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 每一个Mapper.xml文件必须在mybatis的核心配置文件中注册-->
<mappers>
<mapper resource="com/wen/dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
3. Mybatis在初始化对象时,需要无参构造进行pojo属性的加载。而我在生成pojo类时创建了有参数的构造方法。在简单的Dao中调用时是没有问题的,但是如果使用Mybatis框架根据接口定义创建接口的动态代理对象(代理对象的方法体如Dao中方法体的实现)就会报错。
解决办法:去掉pojo类中的有参构造方法,使用无参构造方法初始化对象。
4.抽象类不能用jdk动态代理
因为jdk动态代理生成的代理类,会继承 Proxy 类,由于 Java 无法多继承,所以无法对类进行代理,抽象类本质上也是类,不是接口,proxy生成代理类过程中,会校验传入的class是否为接口。
MyBatis常见问题解答相关推荐
- CP20常见问题解答
CP20常见问题解答 CP20常见问题解答 注:若您对CP20用途不十分了解,请参考前面HC10的问答 Q)基于服务器的解决方案都有哪几种?各有什么特点? Q)CP20的usb端口是否会成为资料外泄的 ...
- Delphi XE5 常见问题解答
Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...
- Internet Explorer 8 Beta2 常见问题解答
Internet Explorer 8 Beta2 常见问题解答<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:o ...
- 海康威视摄像头安装插件检测不到_海康威视摄像机常见问题解答
海康威视摄像机常见问题解答 1.忘记摄像机IP地址怎么办? ①可以通过设备网络搜索工具SADP在线搜索 ②可以使用客户端4200在线搜索功能 ③在设备和PC开启UPNP功能时,可以通过PC中网络发现查 ...
- abaqus python二次开发攻略_Abaqus有限元分析常见问题解答与实用技巧 12天后上架...
Abaqus有限元分析常见问题解答与实用技巧已印刷完毕,1-2天后上架,先睹为快.现在某些网站上的售卖信息,不靠谱.温馨提示:封底无防伪标均为盗版! 序 言 Abaqus是是国际上先进的大型通用非线 ...
- PhpExcel中文帮助手册|PhpExcel基本使用方法及常见问题解答
为什么80%的码农都做不了架构师?>>> 一.介绍一下PHPExcel的基本使用方法 include 'PHPExcel.php'; include 'PHPExcel/Wri ...
- c语言中removeDir的相反函数,C语言编程常见问题解答之常用函数的包括文件.doc
C语言编程常见问题解答之常用函数的包括文件 C语言编程常见问题解答之常用函数的包含文件(1) 作者:unknown 更新时间: 2005-05-10 函数 包含 类别 功能 _atold math.h ...
- MPLS是如何工作?MPLS的完整指南和常见问题解答
MPLS是如何工作?MPLS的详细手册和常见问题解答 MPLS代表什么? MPLS代表多协议标签交换. 什么是MPLS? 当数据从一个网络节点传输到另一个网络节点时,它是一种在电信网内路由流量的机制. ...
- c语言中指针往内存写值,C语言编程常见问题解答之指针和内存分配
指针为C语言编程提供了强大的支持--如果你能正确而灵活地利用指针,你就可以直接切入问题的核心,或者将程序分割成一个个片断.一个很好地利用了指针的程序会非常高效.简洁和精致. 利用指针你可以将数据写入内 ...
最新文章
- 三元组损失 Triplet Loss及其梯度
- 【Flask项目】sqlalchemy原生sql查询,返回字典形式数据
- wxWidgets 编译 ICON 资源
- 2013年4月27日星期六
- linux加载虚拟sriov网卡,如何配置BroadCOM网卡的SR-IOV功能
- localdatetime转化为date_为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?
- sql服务找不到服务器,我找不到SQL服务管理器
- PHP 设计模式之数据对象映射模式
- Prometheus Querying Function rate() vs irate()
- 定时器mia是什么意思_MIA的完整形式是什么?
- 使用FSO修改文件夹的名称
- OpenCV 4.x 中请别再用HAAR级联检测器检测人脸!有更好更准的方法
- git推送项目到码云(gitee)
- 四种常见排序算法----php代码实现
- qq群管机器人php,常用几款QQ群管机器人软件功能和体验对比
- 51单片机 16路抢答 显示在 点阵 普中 V2
- 测试行业4年经验,面试进了阿里,二个月后我果断选择裸辞...
- python远程调用摄像头_教你如何利用python调用摄像头
- 走ORACLE后门cusor_sharing的问题
- 2022中科院自动化所人工智能暑期学校(部分内容)
热门文章
- 一个发放邮件工资条的程序
- 什么样的公司可以申请高新技术企业?
- Java8 将List转换为用逗号隔开的字符串
- Altium Designer生成钢网文件
- Docker 容器start | restart | stop
- 基于二叉查找树的图书影碟租赁管理系统c#实现(控制台)
- [OpenWRT]极路由B70(HC5962)刷OpenWRT笔记(一)
- 零入门kubernetes网络实战-7->Mac环境下为虚拟机磁盘空间进行扩容
- 什么是视频互动直播,你会如何介绍
- WordPress插件 Hide My WP 没人知道你使用的是WP系统[更新v3.0]