MyBatis 操作DML语句及工具类提取

MyBatis操作DML

配置默认事务处理

我们默认使用JDBC的事务处理模式

<transactionManager type="JDBC"/>

配置mapper中的操作

<insert id="insUser" parameterType="user">
    insert into myuser(id, name, register, integral, sex)
    values (default, #{name},  #{register}, #{integral}, #{sex})
</insert>

封装MyBatis工具类

package pers.jssd.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;
import java.io.InputStream;

/**
 * @author jssdjing@gmail.com
 */
public class MyBatisUtil {

    private static SqlSessionFactory factory = null;

    static  {
        try {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-cfg.xml");
            factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 取得sqlSession对象
     * @param autoCommit 是否设置事务自动提交, false则不自动提交, true则自动提交
     * @return SqlSession
     */
    public static SqlSession getSession(boolean autoCommit) {
        SqlSession session = null;
        if (factory != null) {
            session = factory.openSession(autoCommit);
        }
        return session;
    }

    /**
     * 取得sqlSession对象. 默认事务不会自动提交
     * @return SqlSession
     */
    public static SqlSession getSession() {
        return getSession(false);
    }
}

测试代码

注意此处插入数据的时候, 需要手动提交事务和回滚, 否则事务默认回滚. 可以在取得SqlSession的时候, 使用openSesiion(true) 来不关闭自动提交.

@Test
public void insertUser() {
    User user = new User(0, "233", new Date(), 11, "女");
    SqlSession session = MyBatisUtil.getSession();
    int num = session.insert("pers.jssd.mapper.UserMapper.insUser", user);
    if (num >= 1) {
        session.commit();
    } else {
        session.rollback();
    }
    session.close();
}

更新和删除

<update id="updUser" parameterType="user">
    update myuser
    set name = #{name}
    where id = #{id}
</update>

<delete id="delUser" parameterType="int">
    delete from myuser where id = #{0}
</delete>

测试代码:

@Test
public void updateUser() {
    User user = new User(2005, "144", new Date(), 15, "女");
    SqlSession session = MyBatisUtil.getSession();
    int num = session.update("pers.jssd.mapper.UserMapper.updUser", user);
    if (num >= 1) {
        session.commit();
        System.out.println("成功");
    } else {
        session.rollback();
        System.out.println("失败");
    }
    session.close();
}

@Test
public void deleteUser() {
    SqlSession session = MyBatisUtil.getSession();
    int num = session.delete("pers.jssd.mapper.UserMapper.delUser", 2005);
    if (num >= 1) {
        session.commit();
    } else {
        session.rollback();
    }
    session.close();
}

总结

事实上, 所有的增删改操作, 在底层调用的都是jdbc中的executeUpdate方法. 操作是一样的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值