增删改(DML)操作

时间:2023-03-08 21:17:26
  1. 增删改(DML)操作

1.1事务(transaction)

  • 事务是数据库操作的最小单元,又ACID的特性,应该保证一个事务的sql语句要么同时成功,要么都不成功。
  • Mybatis中配置了事务管理器,type属性设置为JDBC。表示M ybatis采用和原生JDBC相同的事务管理机制。
  • 在Mybatis执行的开始时,将自动提交功能关闭了。所以,在执行DML操作时,需要手动提交事务。

  设置为sqlsession.openSession(true); 则可以自动提交。

   默认情况下是false。如果不设置true,则conn.autocommit(false),dml操作是必须手动提交。

1.2新增(insert)

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<settings>
<!-- 设置MyBatis使用log4j日志支持 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- typeAliases给类型取别名 -->
<typeAliases>
<!-- 给user类取别名 -->
<!-- <typeAlias type="com.bjsxt.pojo.User" alias="u"/> -->
<!-- 别名都是类的名字 -->
<package name="com.bjsxt.pojo"/>
</typeAliases>
<!-- 用于指定使用哪个开发
用于指定使用的环境id
-->
<environments default="dev">
<!-- 用于配置开发环境
id:环境的唯一识别码
-->
<environment id="dev">
<!-- 事务管理器
type:用于设定mybatis采用什么方式管理事务
JDBC表示和JDBC一样事务的管理方式
-->
<transactionManager type="JDBC"/>
<!-- 数据源/连接池
用于配置链接池和数据库链接的参数
type:用于设置mybatis是否采用链接池技术
连接池:用来存数据库链接的,减少数据库的频繁开关
POOLED表示mybatis采用连接池技术
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 扫描mapper文件 -->
<!-- 文件的全限制路径要用/ -->
<mappers>
<mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
</mappers>
</configuration>

 1 <?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">
<!-- namespa:命名空间,可以随意定义,一般情况下要写全限定路径(包名加类)
MyBatis管理SQL语句是通过namespace+id来定位的
-->
<mapper namespace="com.bjsxt.mapper.UserMapper">
<!-- 新增 -->
<insert id="insUser" parameterType="user" >
insert into t_user values (default,#{username},#{password})
</insert> </mapper>
 package com.bjsxt.util;

 import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { private static SqlSessionFactory factory=null;
static{ try {
InputStream is=Resources.getResourceAsStream("mybatis.xml");
factory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static SqlSession getSession(){
SqlSession session =null;
if(factory!=null){
//true表示开启
session= factory.openSession(true);
}
return session;
}
}
 package com.bjsxt.test;

 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import com.bjsxt.pojo.User;
import com.bjsxt.util.MyBatisUtil; public class TestInsert {
@Test
public void testIns(){
SqlSession session = MyBatisUtil.getSession();
User user=new User();
user.setUsername("XIAOWEI");
user.setPassword("123"); int num=session.insert("com.bjsxt.mapper.UserMapper.insUser",user);
if(num>0){
//提交事务
//session.commit();
System.out.println("SUCCESS!");
}else{
//session.rollback();
System.out.println("FAILED!");
}
//
session.close();
}
}

1.4修改和删除

 <?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">
<!-- namespa:命名空间,可以随意定义,一般情况下要写全限定路径(包名加类)
MyBatis管理SQL语句是通过namespace+id来定位的
-->
<mapper namespace="com.bjsxt.mapper.UserMapper">
<!-- 新增 -->
<insert id="insUser" parameterType="user" >
insert into t_user values (4,#{username},#{password})
</insert> <!-- 修改 -->
<update id="updUser" parameterType="user" >
update t_user set username=#{username},password=#{password} where id=#{id}
</update> <!-- 删除 -->
<delete id="delUser" parameterType="int">
delete from t_user where id=#{0}
</delete>
</mapper>
 package com.bjsxt.test;

 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import com.bjsxt.pojo.User;
import com.bjsxt.util.MyBatisUtil; public class TestInsert {
@Test
public void testDel(){
SqlSession session =MyBatisUtil.getSession(); int num=session.update("com.bjsxt.mapper.UserMapper.delUser", 9);
if(num>0){
session.commit();
System.out.println("success"); }else
{
System.out.println("false");
session.rollback();
}
session.close();
}
@Test
public void testUpd(){
SqlSession session = MyBatisUtil.getSession(); User user1=new User();
user1.setId(4);
user1.setUsername("daming");
user1.setPassword("abc"); int num=session.update("com.bjsxt.mapper.UserMapper.updUser", user1);
if(num>0){
session.commit();
System.out.println("success"); }else
{
System.out.println("false");
session.rollback();
}
session.close();
}
@Test
public void testIns(){
SqlSession session = MyBatisUtil.getSession();
User user=new User();
user.setUsername("XIAOWEI");
user.setPassword("123"); int num=session.insert("com.bjsxt.mapper.UserMapper.insUser",user);
if(num>0){
//提交事务
//session.commit();
System.out.println("SUCCESS!");
}else{
//session.rollback();
System.out.println("FAILED!");
}
//
session.close();
}
}