问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在使用spring框架的时候如果在xml配置里面把autocommit关掉用jdbcTemplate.update就不能提交数据了?

发布网友 发布时间:2022-04-08 03:53

我来回答

3个回答

懂视网 时间:2022-04-08 08:14


几个重要的类: JdbcTemplate,里面提供了dao的方法,需要提供数据源给他! JdbcDaoSupport RowMapper
说明:
   无论采用什么样的方法必须把dataSource注入到JdbcTemplate里
  1、继承JdbcDaoSupport(该类有JdbcTemplate)
  2、继承JdbcTemplate
  3、引入JdbcTemplate
1.xml配置:
<beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="           http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" >            <!-- 读取配置文件 -->      <bean            class= "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >            <property name= "locations">                <value> classpath:jdbc.properties</value >            </property>      </bean >            <!--数据源  -->      <bean id="dataSource" destroy-method="close"            class= "org.apache.commons.dbcp.BasicDataSource" >            <property name= "driverClassName" value="${jdbc.driverClassName}" />            <property name= "url" value ="${jdbc.url}" />            <property name= "username" value="${jdbc.username}" />            <property name= "password" value="${jdbc.password}" />      </bean >            <!--方法一  继承JdbcDaoSupport -->      <bean id="classesDao" class="cn.itheima03.spring.jdbc.ClassesDaoImpl" >            <property name= "dataSource">                <ref bean= "dataSource"/>            </property>      </bean >            <!--方法二   引入JdbcTemplate,即让JdbcTemplate变成dao的成员变量-->      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >            <constructor-arg index= "0" ref="dataSource" ></constructor-arg>      </bean >            <bean id="classesDao2" class="cn.itheima03.spring.jdbc.ClassesDaoImpl2" >            <property name= "jdbcTemplate">                <ref bean= "jdbcTemplate"/>            </property>      </bean >            <!--方法三  继承JdbcTemplate,需要在构造方法中提供数据源 -->        <bean id="classesDao3" class="cn.itheima03.spring.jdbc.ClassesDaoImpl3" >            <constructor-arg index= "0" ref="dataSource" ></constructor-arg>      </bean >            <!-- 方法四 自定义模板 -->      <bean id="itheimaTemplate" class="cn.itheima03.spring.itheima03db.ItHeimaTemplate" >            <constructor-arg index= "0" ref="dataSource" ></constructor-arg>      </bean >            <bean id="classesDao4" class="cn.itheima03.spring.itheima03db.ClassesDaoImpl4" >            <constructor-arg index= "0" ref="dataSource" ></constructor-arg>      </bean >      
</beans>

============================================== 位于src目录下的配置文件:jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql ://localhost:3306/hibernate_itheima03 jdbc.username=root jdbc.password=root

2.dao测试
/*  * 方式一:继承JdbcDaoSupport,需要使用数据源,在配置文件中应该配置。  */ public class ClassesDaoImpl extends JdbcDaoSupport implements ClassesDao{      public void saveClasses() {            this.getJdbcTemplate().execute("insert into classes(cname,description) values(‘a‘,‘a‘)");      }
     @Override      public List<Classes> getClasses() {            return this .getJdbcTemplate().query("select * from classes", new ClassesRowMapper()) ;      } } =================================================== /**  * 方式二:引入JdbcTemplate  */ public class ClassesDaoImpl2 implements ClassesDao{      private JdbcTemplate jdbcTemplate;      public JdbcTemplate getJdbcTemplate() {            return jdbcTemplate ;      }      public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {            this.jdbcTemplate = jdbcTemplate;      }      public void saveClasses() {            this.jdbcTemplate .execute("insert into classes(cname,description) values(‘a‘,‘a‘)");      }      @Override      public List<Classes> getClasses() {            return null ;      } } =================================================== /**  * 方式三:继承JdbcTemplate,写一个以DataSource作为参数的构造函数。  */ public class ClassesDaoImpl3 extends JdbcTemplate implements ClassesDao{            public ClassesDaoImpl3(DataSource dataSource){            super(dataSource);      }            public void saveClasses() {            this.execute("insert into classes(cname,description) values(‘a‘,‘a‘)");      }
     @Override      public List<Classes> getClasses() {            return null;      } } =================================================== /**  * 方式四:自定义模板。  *  * 在spring内部完成是面向接口编程  * 在spring的配置文件中,通过set方法或者构造器,给接口注入实现的类  *  */ public class ItHeimaTemplate {      private DataSource dataSource;            public DataSource getDataSource() {            return dataSource ;      }      public void setDataSource(DataSource dataSource) {            this.dataSource = dataSource;      }      public ItHeimaTemplate(){}      public ItHeimaTemplate(DataSource dataSource){            this.dataSource = dataSource;      }      /**       * 实现插入数据       */      public void insert(String sql){            try {               Connection conn = this.d

热心网友 时间:2022-04-08 05:22

defaultAutoCommit 的意思是你如果没有使用事物来控制点的话,他会自动提交(一条语句执行就会提交)

比如:在一个service的save方法中
public void save(){
.save1(); 执行完save1后会自动提交。如果你使用了事物控制,那么会在这个方法都执行完后提交的
.save2();
}
换句话就是说就算你不配置事物,数据也会保存到数据库中的,应为spring默认的是defaultAutoCommit自动提交
理解不?追问大概理解了,也就是说如果配置了事务的话,就跟defaultAutoCommit 的设置无关了对吗?

顺便再教教我吧,比如说在service里面两个save方法,如果是
@Transaction
public void save1(){...}
@Transaction
public void save2(){...}
然后一个方法当中同时调用了save1和save2这是两个事务还是一个啊?

追答肯定是两个事务了。
事务的控制一般都是在service的,service表示的就是业务逻辑的操作!

热心网友 时间:2022-04-08 06:40

这样可能不太规范 可以后期还是会出现问题的
不管你是用标签,还是用注释 commit只能放在DAO层里面就可以了 (sql语句不出DAO)
如果说你要用标签的话你可以把commint 放到标签类中 标签调用 或者是 直接把commit 直接写在增删改查类中的方法中insert update delete select 之后 jdbcTemplate.conmit (调用那边的commit方法)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
交通事故致人死亡,该如何处理? 爱普生LQ1600KIIIH 断色带 爱普生针式打印机LQ1600KⅢH近两月来总频繁中断打印,同时电脑显示是通讯... ACQUA DI PARMA 帕尔玛之水 蓝色地中海系列 桃金娘加州桂中性淡香水 E... 女士香水推荐-ACQUA DI PARMA 帕尔玛之水 优雅木兰女士浓香水 EDP 50... ACQUA DI PARMA帕尔玛之水克罗尼亚系列中性香水套装-适用对象 帕尔玛 | 必须拥有的小众沙龙香 ACQUA DI PARMA/帕尔玛之水克罗尼亚系列黑调男士古龙水-适用对象 ACQUA DI PARMA 帕尔玛之水 克罗尼亚系列 风度中性古龙水 EDC 20ml... ACQUA DI PARMA/帕尔玛之水-绅士男士古龙水EDC 1. 关于WORD表格,以下说法不正确的是___。 WORD表格最多可达63列 建 word中这几个题都怎么做啊?答案是什么啊? 我在晚上七点钟看电视用英语怎么翻译? 等于每行中最大字符高度两倍的行距被称为___行距。 我每天晚上看电视用英语怎么说(be going 形式) 业务招待费 广告费 业务宣传费扣除比例 我昨天晚上七点正在看电视 用英语怎么说 如何计算业务费和广告费的扣除? 用英语怎么说 :1.他在听音乐时,我在看电视 2.我们在做饭时,她在做作业 我经常在晚上看电视用英语怎么说 我在看春晚用英语怎么说,急! 在我的空余时间我喜欢看直播和看小说用英语怎么说? 我用手机看直播用英语怎么说怎么说? 华为edl一al10如何开启颜色反转? vie一al10华为手机忘记数字密码怎么开? 华为HonoYNoToE8型号EDl AL10打不开腾讯天天桥牌游戏 ,请问如何才能正常进行游刷? 华为型号为EDl-AL10的手机壳怎么拆? 华为edl一al10手机价钱 华为手机型号EDl一AL10后直摄像头甩环了到那里去买?多少钱一个? EXCEL怎么什么都显示不了啦?? Word的双倍行距是什么 计算机考试 关于word excel powerpoint的问题 word文档中,行间距则指某段中行与行之间的距离对吗 在Word中,对于设置每行的高度为1.5倍行距,下列说法正确的是? 怎么计算将退休人员的养老金(大连),可否提供一个具体的计算公式 企业养老保险退休金计算方法 大胸和小胸手感一样吗 企业退休人员养老金怎么计算方法 别以为男人只爱看大胸 手感才是第一位的! 我非常想知道大胸是什么手感 请教:辽宁省企业职工退休养老金计算方法 男人为什么喜欢大胸? 一个男生说“ 胸小手感好 胸大只是看着好看 ”可信吗 (此问题源于男朋友对我的评价) 请问胸部大的女生把手抚在胸上时能感觉到心跳吗? 隆胸后手感好吗? 羽绒的等级怎么区分的? 梦见同事闹离婚,自己去劝 羽绒服和羽绒棉有什么区别? cad卫生间立面图 客厅风水布局怎么摆放才好,客厅风水有哪些禁忌?