最新要闻
- 小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana 全球热点
- 观点:不打算修!AMD EPYC Rome服务器芯片运行1044天必定死机
- 全球量产车最低风阻!昊铂Hyper GT本月上市:能耗比Model 3还低|视点
- 世界最牛计算机课程变样了:接受AI改造
- 姑姑拍到侄女做梦吃雪糕:画面分分钟萌翻
- 今头条!比亚迪突然上调车辆保养价格 部分车型涨幅达50%
- 【世界快播报】女子考科三系错安全带考官面如死灰:“交杯带”看无奈了
- 小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana
- 汽车电动座椅原理_你知道吗|当前时讯
- 全球今热点:大量安卓用户逃离换iPhone:Android 13保有量不足15%
- 世界观速讯丨70万买红旗电动车 2年内修10次!车主退车遭拒:已修好无法退
- 劝学译文翻译_劝学译文
- 下水10秒即可感染 钻进皮肤体内生长!南京疾控提醒预防血吸虫病
- 世界简讯:1.2万元拍下单颗荔枝 男子:要送给女友
- 神速!这类品种再迎新成员,两大公募巨头助阵,对应ETF规模超870亿元_天天报资讯
- 焦点快看:男子路遇纸片鸟 一查竟是国保动物黄苇鳽:性格机警
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天滚动:Spring整合mybatis使用xml配置事务
自己准备开始教授Java相关的技术,Spring框架是必须让学生学习的框架之一。里面有一个事务的配置
以前刚学习Spring框架的时候有接触过,不过已经过了很多年,很多东西都已经忘记。现在再来回忆一下
(相关资料图)
如何使用Spring框架类配置事务。
使用到的maven坐标如下:
<dependencies><dependency><groupId>org.mybatisgroupId><artifactId>mybatisartifactId><version>3.5.6version>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>8.0.33version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-contextartifactId><version>5.3.27version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-jdbcartifactId><version>5.3.27version>dependency><dependency><groupId>org.mybatisgroupId><artifactId>mybatis-springartifactId><version>1.3.3version>dependency><dependency><groupId>com.alibabagroupId><artifactId>druidartifactId><version>1.2.18version>dependency><dependency><groupId>org.aspectjgroupId><artifactId>aspectjweaverartifactId><version>1.9.7version>dependency>dependencies>
导入的jar包主要有mybatis,mysql驱动,spring相关的jar包,还有mysql连接池的jar包等等。
然后创建一个简单的工程,整个项目的结构大致如下,
测试类里面的代码为:
public class TestApplication {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");CatService catService =(CatService ) ctx.getBean("catService");catService.updateCat("西西",1);System.out.println("执行完毕!");}}
主要作用是加载Spring的配置类的xml文件,然后获取service类,最后调用service里面的方法来更新数据。
service实现类中的代码为:
public class CatServiceImpl implements CatService {private CatDao catDao;public void setCatDao(CatDao catDao) {this.catDao = catDao;}@Overridepublic int updateCat(String catName, int id) {int result = this.catDao.updateCat(catName, id);int temp = 10 / 0;result = this.catDao.deleteCat(id + 1);return result;}}
这里面主要就是注入一个CatDao接口,注意这里必须有setCatDao方法,不然程序也会报错。这个类中只
写了一个方法updateCat,方法中第一步操作是根据ID更新名称;第二步操作是手动产生一个异常,方式为
使用10/0即可,用来测试事务是否正确回滚;第三步就是根据ID逻辑删除一条数据。
dao接口中的代码为:
public interface CatDao {int updateCat(@Param("catName") String catName, @Param("id")int id);int deleteCat(@Param("id")int id);}
一个修改的方法,一个删除的方法。
CatDao.xml中的代码为:
xml version="1.0" encoding="UTF-8"?>mapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cat.dao.CatDao"><update id="updateCat">update cat set cat_name = #{catName, jdbcType = VARCHAR}whereid = #{id, jdbcType=INTEGER}update><update id="deleteCat" parameterType="int">update cat set is_delete = 1whereid = #{id, jdbcType = INTEGER}update>mapper>
一个是修改的方法,一个是逻辑删除的方法。
application.properties配置文件中的配置信息为,主要是数据库连接信息.
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
name=root
password=root
applicationContext.xml配置文件中的信息为.
<context:property-placeholder location="classpath*:*.properties"/><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" ><property name="driverClassName" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${name}"/><property name="password" value="${password}"/>bean><bean class="org.mybatis.spring.SqlSessionFactoryBean" ><property name="dataSource" ref="dataSource" />bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.cat.dao"/>bean><bean id="catService" class="com.cat.service.impl.CatServiceImpl" ><property name="catDao" ref="catDao"/>bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>bean><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*"/><tx:method name="get*" read-only="true"/><tx:method name="find*" read-only="true"/><tx:method name="list*" read-only="true"/><tx:method name="insert*" timeout="5000" rollback-for="java.lang.Exception"/><tx:method name="add*" timeout="5000"/><tx:method name="update*" timeout="5000"/><tx:method name="delete*" timeout="5000"/>tx:attributes>tx:advice><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.cat.service.impl.CatServiceImpl.*(..))"/>aop:config>
遇到的问题一:dao接口和xml文件不在同一个目录下!因此程序在执行的时候,就会报错,
Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.cat.dao.CatDao.updateCat
导致这个问题的原因是,自己在创建xml的包路径时,是直接复制、粘贴com.cat.dao,导致创建的
包名错误。找到项目的根目录查看,如下
因此创建包名的时候,最好是一级一级的创建,直接复制、粘贴就可能会出现问题。
上面的是正确的包名,下面的是错误的包名,凭肉眼看是很难发现错误的,因此在创建
包名的时候一定要注意!
遇到的问题二:CatServiceImpl中注入CatDao的时候,catDao没有手动添加setCatDao方法
时,就会报如下的错误,大致意思就是说没有有效的catDao的set方法。
Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property "catDao" of bean class [com.cat.service.impl.CatServiceImpl]: Bean property "catDao" is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
解决方式:添加CatDao成员变量的set方法即可。
遇到的问题三:
dao接口里面的代码
public interface CatDao {int updateCat(@Param("catName") String catName, @Param("id")int id);int deleteCat(@Param("id")int id);}
xml里面的代码
<update id="updateCat" parameterType="string">update cat set cat_name = #{catName, jdbcType = VARCHAR}whereid = #{id, jdbcType=INTEGER}update>
由于在xml里面设置了parameterType=”string”,因此传入的参数必须为string类型。而自己传入的是
int类型,所以又报一个新的错误如下:
Error setting non null for parameter #2 with JdbcType INTEGER . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
解决方式为:去除掉这个设置即可parameterType=”string”,就可以传递任意类型的参数。
遇到的问题四:
切入点的配置方式错误,com.cat.service.impl.CatServiceImpl.*.*(..)这个路径是自己从一篇博文中拷贝的,没有做修改最终导致路径错误
解决方式:配置为正确的路径 com.cat.service.impl.CatServiceImpl.*(..)即可.区别就在于.*.*还是.*
测试
测试前的数据库数据为
报错信息如下,10 / 0出现错误:
再次查看数据库数据,数据没改变,事务生效。
参考博文
https://www.cnblogs.com/juyss/p/13786370.html
关键词:
天天滚动:Spring整合mybatis使用xml配置事务
ChatGPT 国内镜像网站独家汇总:发现最优秀的人工智能对话体验!
小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana 全球热点
观点:不打算修!AMD EPYC Rome服务器芯片运行1044天必定死机
全球量产车最低风阻!昊铂Hyper GT本月上市:能耗比Model 3还低|视点
世界最牛计算机课程变样了:接受AI改造
世界聚焦:Codeforces Round 876 (Div. 2)题解
姑姑拍到侄女做梦吃雪糕:画面分分钟萌翻
今头条!比亚迪突然上调车辆保养价格 部分车型涨幅达50%
【世界快播报】女子考科三系错安全带考官面如死灰:“交杯带”看无奈了
小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana
汽车电动座椅原理_你知道吗|当前时讯
全球今热点:大量安卓用户逃离换iPhone:Android 13保有量不足15%
世界观速讯丨70万买红旗电动车 2年内修10次!车主退车遭拒:已修好无法退
劝学译文翻译_劝学译文
下水10秒即可感染 钻进皮肤体内生长!南京疾控提醒预防血吸虫病
世界简讯:1.2万元拍下单颗荔枝 男子:要送给女友
神速!这类品种再迎新成员,两大公募巨头助阵,对应ETF规模超870亿元_天天报资讯
焦点快看:男子路遇纸片鸟 一查竟是国保动物黄苇鳽:性格机警
QQ音乐豪华绿钻续费价格上调:连续包年158元 你续费吗?
速看:正版cd碟专卖店价格(正版cd碟专卖店)
微控制器实时操作系统实践1实时系统介绍 每日聚焦
全球消息!linux 性能自我学习 ———— cpu 快速定位问题 [六]
苹果语音助手功能将重大升级:Hey Siri成历史
3分钟回顾神十五航天员返回全程:遇上绝美日出朝霞
林峰交往过的女朋友(林峰女朋友)
MES系统初探(一)|世界最资讯
【环球财经】美国总统拜登签署债务上限法案
丰田反对电动车:建议别反对|环球观速讯
平均年龄最大的航天员乘组“落地” 神舟十五号载人飞行任务圆满成功 焦点快播
三星全球首款8K电竞显示器8月上市:用上TCL华星国产高端57英寸屏-世界今日讯
天天日报丨中国战舰果敢拦阻穿越台湾海峡的美国和加拿大海军舰艇
存储价格被国产干碎 大厂密谋涨价:2TB该抄底了
【全球播资讯】最多领1600元!北京发放新一批消费券:手机、电脑等都能用
《蜘蛛侠:纵横宇宙》票房超预期_当前热文
地图的三要素有哪些?_地图的三要素是什么 _3分
俄罗斯呼吁本国iPhone用户彻查手机 存在后门:苹果回应永远不会
【天天聚看点】太空出差186天!神十五乘组返回地球:成功着陆
今年前4个月沈阳市快递业务收入25.67亿元 环球时讯
新能源汽修人才缺口或达80%:汽修学员走出校门就进厂-焦点短讯
环球观焦点:苹果和安卓厂商为何都放弃了小屏市场?幕后原因揭晓
苹果头显来了:难成下一个“iPhone”
4个月卖1751.5亿 彩票盯上年轻人?专家提醒不能靠彩票发财 中奖率低
上海长兴岛房价最新走势_上海长兴岛房价
多彩网安入选第三届贵州省网络安全应急技术支撑单位
世界热讯:智齿是什么意思?_智齿是什么意思
焦点热议:致远的意思解释词语(致远的意思)
焦点速递!3099元起 vivo S17 Pro下周首销:影像比肩高端旗舰
网易云盘的歌怎样分享_网易云盘
环球简讯:神舟十五号载人飞船撤离空间站
每日视点!向安卓看齐!iOS 17下周发:开放第三方应用商店
天天热资讯!一年跌价超95% 只花38元华为P50 Pro秒变5G手机
环球观热点:上海两车“斗气” 致一车骑跨高架栏:专家喊话司机要跳出吃亏思维 吃亏是福
环球动态:高中毕业给朋友的留言(朋友给我留言说1601是什么意思)
LRU缓存与LinkedHashMap源码
天天热文:文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题
热点在线丨关于使用openssl命令-同时生成私钥与CSR-Certificate Signing Request的方法记录
高三学生写永久请假条告别班主任:画面催泪
店家回应未开封饮品中有蟑螂:不可能出现蟑螂 全球讯息
全球滚动:注意!高考生这6样东西别发朋友圈
宫崎想乃(关于宫崎想乃介绍)_环球新消息
记录--手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化|当前关注
天天视点!津城高考“最后一课”:喊出自信 留下感动
世界热讯:东风着陆场准备就绪迎接航天员回家 科普:飞船改动越少越安全
天玑之王!vivo X100首发天玑9300:性能对标苹果A17
或信号错误!印度列车相撞事故已致死伤超千人:该国百列火车运行受影响 近乎崩溃_全球微头条
每日快讯!北京西城区举办建筑工地防汛抢险应急救援演练
印度列车相撞事故已致120死超800伤 车头被撞扁:现场惨烈
今日热文:椰树集团首次回应直播风格争议:审美回归、主打真实自然
【天天新要闻】读改变未来的九大算法笔记02_数据库
九八年属什么(中国与十二地支相配以人出生年份的十二种动物)-即时焦点
新动态:当在浏览器中输入百度地址后,发生了什么?(计算机网络篇)
ASP.NET Core优雅的添加HealthCheck_快看点
第六章:分区_每日热点
VX自动刷步数脚本
Visual Studio如何使用自带“诊断工具” 世界微头条
RCEP对15个签署国全面生效|天天消息
比过山车刺激多了 女子体验菲律宾360度秋千:全程尖叫 每日快播
世界滚动:AMD显卡两大神技宣布半年了:还都是PPT!
全世界最大盗版网站死了!居然还和俄乌冲突有关-环球微资讯
IGN满分的神作终于出中文了!可我却高兴不起来
迪士尼公主电影真人与动画对比 你最喜欢哪一个?
左蓝微电子技术有限公司_左蓝-世界快报
世界速讯:下周市场的风险在哪里?
千兆网线接线定义标准_千兆网线做法图解 天天观察
蚌埠到南京的火车票时刻表(火车票时刻表)
南京启动江心洲生态岛试验区创建 通讯
《新型电力系统发展蓝皮书》发布:提出储能规模化布局应用等四大体系 焦点播报
云集(YJ.US)Q1净亏损同比收窄 盘前飙涨110%_当前热文
疑因节省开支 马斯克取消推特的“翻译”功能
峰学蔚来公司每周做四休三 为考研名师张雪峰规定
黑人女子不满遭解雇 向法院提起诉讼称涉嫌种族和性别歧视
B站正式会员数达到2.05亿 其日均活跃用户数为9370万
泸州老窖曝光全专利 为可制备粉末白酒旨在方便储存及运输
苹果首款无风扇笔记本被列为过时产品 发售仅有8年
为进步加强新兴技术领域发展 韩国将投资约5000亿推进其AI项目发展
出于安全考虑 尼康Z8将禁用第三方电池
江苏一学生网购巴掌块小石头作画 商家发来一块7斤重大石头
东海租赁拟向东营茂阳新能源开发有限公司借款4500万 借款利率6%-世界微速讯
ASP.NET Core MVC 从入门到精通之自动映射(一) 环球热闻