关于mybatis进行Update时,无法更新的问题

2017-02-14  传说中的情人节

问题描述:

今天进行mybatis进行update操作时候,发现代码一点错没有,但是数据库始终没有更新

详细代码:

	public Teacher findById(int tid){
		
		try{
			 teacher = sqlSession.selectOne("TeacherNamespace.findById", tid);
			sqlSession.commit();
			MybatisUtil.closeSqlSession();
		}catch(Exception e){
			sqlSession.rollback();
		}	
		return teacher;
	}
public void update1(Teacher teacher){
		SqlSession sqlSession = MybatisUtil.getSqlSession();
	
		try{
			
			int i = sqlSession.update("TeacherNamespace.upd", teacher);
			System.out.println(i);
			sqlSession.commit();
			MybatisUtil.closeSqlSession();
		}catch(Exception e){
			System.out.println(e);
			sqlSession.rollback();			
		}		
	}



结果发现:

我自己将SqlSession sqlSession = MybatisUtil.getSqlSession();这句代码sqlSession设置为了全局变量

更新操作根据ID更新,先找出ID对应的,再进行更新,因为全局变量,所以findById和update1是共用一个sqlSession,但是在执行第一个方法时,由于习惯自己把事务关闭了,所以无法进行Update



解决办法:

1.每个方法对应一个SqlSession对象,依旧是在每个方法的开头,写

Sqlsession sqlSession = MyBatisUtil.getSqlSession;


2.记住select方法不需要提交事务,也不需要关闭对象









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MyBatis进行批量更新操作,可以使用 `update` 标签和 `foreach` 标签来实现。 首先,需要定义一个包含多个更新参数的列表,例如: ``` List<MyEntity> entityList = new ArrayList<MyEntity>(); entityList.add(new MyEntity(1, "value1")); entityList.add(new MyEntity(2, "value2")); entityList.add(new MyEntity(3, "value3")); ``` 然后,在 MyBatis 的 Mapper 文件中,可以使用以下语法来实现批量更新操作: ``` <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="entity" separator=";"> update my_table set my_column = #{entity.myColumn} where id = #{entity.id} </foreach> </update> ``` 在上面的示例中,`batchUpdate` 是更新操作的 ID,`parameterType` 是传递给更新操作的参数类型,这里是一个 `java.util.List`。`foreach` 标签用于遍历更新参数列表中的每个元素,`collection` 属性指定要遍历的列表,`item` 属性指定要遍历的每个元素的变量名,`separator` 属性指定每个更新语句之间的分隔符。 在更新语句中,使用 `#{entity.myColumn}` 和 `#{entity.id}` 来引用参数列表中的每个元素的属性值。 最后,在 Java 代码中,可以调用该更新操作并传递参数列表,例如: ``` SqlSession sqlSession = sqlSessionFactory.openSession(); try { MyMapper mapper = sqlSession.getMapper(MyMapper.class); mapper.batchUpdate(entityList); sqlSession.commit(); } finally { sqlSession.close(); } ``` 在这个示例中,使用 `sqlSessionFactory` 来打开一个新的 `SqlSession`,获取 `MyMapper` 接口的实现,并调用 `batchUpdate` 方法来执行批量更新操作。最后,调用 `commit` 方法提交事务,并关闭 `SqlSession`。 ### 回答2: MyBatis是一种流行的Java持久化框架,它可以轻松访问各种关系型数据库。在应用程序中,我们可能遇到同修改多条数据的情况,这我们就需要用到MyBatis的批量更新功能。 MyBatis中的批量更新是通过使用BatchExecutor和PreparedStatement对象来实现的。BatchExecutor类负责管理批量操作的整个过程,而PreparedStatement类则是专门用于执行SQL语句的对象。 在MyBatis中,我们可以通过使用update语句来实现批量更新操作。这个update语句需要将所有需要更新的数据封装到一个List对象中,并将这个List对象作为参数传递给MyBatisupdate方法。 在使用update方法进行批量更新,我们需要传递两个参数:Mapper文件中定义的update语句和包含需要更新数据的List对象。MyBatis会将这个List对象中的数据分批发送给数据库执行更新操作。当所有数据都被更新完成MyBatis会返回一个整数值表示更新的行数。 为了提高批量更新操作的效率,我们可以使用MyBatis中的BatchExecutor对象。BatchExecutor负责管理批量更新操作的整个过程,包括SQL语句的预处理、参数的设置、SQL语句的执行和结果的返回。在进行批量更新,我们可以通过设置BatchExecutor的batchSize参数来合并多个更新语句,从而避免频繁的SQL语句执行操作。 总的来说,MyBatis中的批量更新可以大大减少数据库访问次数,提高数据更新的效率和性能。对于需要同修改多条数据的应用程序来说,批量更新是一个非常有用的功能,可以极大地提高数据更新的效率。 ### 回答3: MyBatis是一个流行的Java持久层框架,支持各种数据库操作,包括insert、update、select和delete等。当需要更新一组相同数据的候,MyBatis提供了一种批量更新的方法,可以提高数据库的性能。 MyBatis中的批量更新操作通常使用update标签来实现。update标签中可以通过foreach标签来遍历更新的数据,它支持多种数据库类型,包括MySQL、Oracle和SQL Server等。 批量更新的语法如下: ``` <update id="batchUpdate"> <foreach collection="list" item="item" separator=";"> update table_name set column1=#{item.column1},column2=#{item.column2} where id=#{item.id} </foreach> </update> ``` 其中,list为需要更新的集合,item为集合中的每个元素,separator为多条更新语句之间的分隔符。 需要注意的是,批量更新操作不适用于查询操作,因为查询操作可能返回的数据量太大,会导致内存不够用。此外,批量更新操作也不适用于带有主键约束的表,因为如果插入的数据中已经存在相同主键的记录,将会导致更新操作失败。在这种情况下,应该采用单条更新操作来插入或者更新数据。 总之,使用MyBatis中的批量更新操作可以大大提高数据库的性能,特别是在操作大量相同数据。需要注意的是,在实际应用中需要根据具体业务场景来选择是否使用批量更新操作,避免不必要的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值