[MyBatis]-07 增删改(DML)操作


prtyaa
prtyaa 2023-12-27 16:26:19 63094
分类专栏: 资讯

事务是操作数据库的最小单元,应该保证一个事物中的sql语句要么同时成功,要么同时不成功

MyBatis 中配置了事务管理器,type 属性设置为JDBC.表示MyBatis采用和原生JDBC相同的事务管理机制

一般mybatis 会关闭自动提交,所以在执行DML操作时需要手动提交

这里就涉及到事务管理(ACID)

谈到事务一般都是以下四点

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)

事务前后数据的完整性必须保持一致。

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

 

提取一个工具类

package com.lin.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

public class MyBatisUtil {
    private static SqlSessionFactory factory = null;
    static {
        try {
            //工厂一个就够了,所以用静态代码块,运行一次就够了
            factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSession(){
        SqlSession session =null;
        if (factory!=null){//这里openSession默认是false是关闭事务,改为true可开启自动提交
         session = factory.openSession();
    }
        return session;
    }
}

新增INSERT

mapper:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 
	namespace: 命名空间, 可以随意定义, 一般情况下要写全限定路径
	MyBatis管理SQL语句是通过namespace+id来定位的
 -->
<mapper namespace="com.lin.mapper.UserMapper">

<!--新增操作 没有返回类型默认返回数字-->
	<insert id="insUser" parameterType="User">
		insert into tb_user values(default,#{username},#{password})
	</insert>
</mapper>

test类:

package com.lin.test;

import com.lin.pojo.User;
import com.lin.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class TestMyBatisDML {
    @Test
    public void insUser(){
        SqlSession session = MyBatisUtil.getSession();
        User user = new User();
        user.setUsername("小强");
        user.setPassword("123");
        int flag = session.insert("com.lin.mapper.UserMapper.insUser", user);
        if (flag>0){
            //成功提交事务
            session.commit();
            System.out.println("SUCCESS");
        }else {
            //失败事务回滚
            session.rollback();
            System.out.println("FAILED");
        }
        //关闭资源
        session.close();
    }
}

更新

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 
	namespace: 命名空间, 可以随意定义, 一般情况下要写全限定路径
	MyBatis管理SQL语句是通过namespace+id来定位的
 -->
<mapper namespace="com.lin.mapper.UserMapper">


<!--更新-->
	<update id="updUser" parameterType="User">
		update tb_user set username=#{username} ,password=#{password} where id= #{id}
	</update>

</mapper>

 

package com.lin.test;

import com.lin.pojo.User;
import com.lin.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class TestMyBatisDML {


    @Test
    //更新
    public void updUser(){
        SqlSession session = MyBatisUtil.getSession();
        User user = new User();
        user.setUsername("小小");
        user.setPassword("123");
        user.setId(1);
        int flag = session.update("com.lin.mapper.UserMapper.updUser", user);
        if (flag>0){
            session.commit();
            System.out.println("更新成功");
        }else {
            session.rollback();
            System.out.println("更新失败");
        }
        session.close();
    }
}

 

删除

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 
	namespace: 命名空间, 可以随意定义, 一般情况下要写全限定路径
	MyBatis管理SQL语句是通过namespace+id来定位的
 -->
<mapper namespace="com.lin.mapper.UserMapper">


<!--删除-->
	<delete id="delUser" parameterType="User">
		delete from tb_user where id=#{0}
	</delete>
</mapper>

 

package com.lin.test;

import com.lin.pojo.User;
import com.lin.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class TestMyBatisDML {

    @Test
    //删除
    public void delUser(){
        SqlSession session = MyBatisUtil.getSession();
        int flag = session.delete("com.lin.mapper.UserMapper.delUser", 5);
        if (flag>0){
            session.commit();
            System.out.println("删除成功");
        }else {
            session.rollback();
            System.out.println("删除失败");
        }
        session.commit();
    }
}

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31592
赞同 0
评论 0 条
prtyaaL0
粉丝 1 发表 2554 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1448
银河麒麟打印带有图像的文档时出错  1365
银河麒麟添加打印机时,出现“server-error-internal-error”  1151
统信桌面专业版【如何查询系统安装时间】  1073
统信操作系统各版本介绍  1070
统信桌面专业版【全盘安装UOS系统】介绍  1028
麒麟系统也能完整体验微信啦!  984
统信【启动盘制作工具】使用介绍  627
统信桌面专业版【一个U盘做多个系统启动盘】的方法  575
信刻全自动档案蓝光光盘检测一体机  484
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!