四、MyBatis的别名配置(typeAliases) CRUD及事务

 typeAliases 别名:主要作用就是为了简化书写提高效率。

 配置方法:我们要简化的一般都是mybatis.xml中入参的参数类型(parameterType),以及返回的参数类型(resultType)

 假设我们没有简化前,都是写全路径:

这种写法特别麻烦,且效率低下。

进行别名配置:

一般推荐方案二

别名配置好了,我们在对应的*mapper.xml文件中使用就特别简单了:

 功能:从应用程序角度出发,软件具有哪些功能.

 业务:完成功能时的逻辑.对应 Service 中一个方法

 事务:从数据库角度出发,完成业务时需要执行的 SQL 集合,统称一个事务.

 事务回滚.如果在一个事务中某个 SQL 执行事务,希望回归到事务的原点,保证数据库数据的完整性.

在 mybatis 中默认是关闭了 JDBC 的自动提交功能:

1.每一个 SqlSession 默认都是不自动提交事务.

不自动提交的原因:首先我们在mybatis.xml<transactionManager/> type中配置有两种方案,JDBC 或者 MANAGED

    1.当type使用jdbc时,TransactionFactory默认实现类为JdbcTransaction,里面实质是对java.sql.connection的简单封装,而jdbc的原生事务是设置自动提交的,但是mybatis框架做了处理,在SqlSessionFactory.openSession时把autoCommit默认设置成了false,所以不自动提交。

    2.当type使用MANAGED时,TransactionFactory默认实现类为ManagedTransaction,它默认的commit和rollback方法都是空的,它让容器管理事务transaction的整个生命周期。也就是说,ManagedTransaction不会帮我们commit和rollback。 

2. session.commit()提交事务.

3.openSession(true);自动提交.setAutoCommit(true);

 MyBatis的新增 删除 修改 及事务:

 mybatis 底层是对 JDBC 的封装.  JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int,表示受影响的行数.

 mybatis 中<insert> <delete> <update>标签没有 resultType 属性,认为返回值都是 int

 

mapper.xml

<insert id="insertPeople" parameterType="People">
	insert into people values(default,#{name},#{age})
</insert>
	
<update id="updatePeople" parameterType="People">
	update people set name=#{name} where id=#{id}
</update>
	
<delete id="deletePeople" parameterType="int">
	delete from people where id=#{0}
</delete>

Test:

        /**
	 *	MyBatis新增操作
	 */
	@Test
	public void testInsert() throws Exception {
		People p = new People();
		p.setName("钱八");
		p.setAge(25);
		int index = session.insert("com.tao.mapper.PeopleMapper.insertPeople", p);
		
		if(index>0){
			System.out.println("新增成功");
		}else{
			System.out.println("新增失败");
		}
		session.commit();
	}

        @Test
	public void testUpdate() throws Exception {
		People p = new People();
		p.setId(6);
		p.setName("钱八");
		int index = session.update("com.tao.mapper.PeopleMapper.updatePeople", p);
		if(index>0){
			System.out.println("修改成功");
		}else{
			System.out.println("修改失败");
		}
		session.commit();
	}

        @Test
	public void testDelete() throws Exception {
		int index = session.delete("com.tao.mapper.PeopleMapper.deletePeople",6);
		if(index>0){
			System.out.println("删除成功");
		}else{
			System.out.println("删除失败");
		}
		session.commit();
	}
	

Mybatis事务处理:

/**
	 * MyBatis事务处理
	 * @throws Exception
	 */
	@Test
	public void testTransaction() throws Exception {
		People p = new People();
		p.setName("李九");
		p.setAge(26);
		int index = session.insert("com.tao.mapper.PeopleMapper.insertPeople", p);
		if(index>0){
			System.out.println("新增成功");
		}else{
			System.out.println("新增失败");
		}
		p.setName("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
		
		//在抛错时进行事务回滚
		try {
			int index1 = session.insert("com.tao.mapper.PeopleMapper.insertPeople", p);
			if(index1>0){
				System.out.println("新增成功");
			}else{
				System.out.println("新增失败");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			session.rollback();
		}
		session.commit();
	}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值