增删改(DML)操作

  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)

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5   <configuration>
 6       <properties resource="db.properties"/>
 7       <settings>
 8           <!-- 设置MyBatis使用log4j日志支持 -->
 9           <setting name="logImpl" value="LOG4J"/>
10       </settings>
11       <!-- typeAliases给类型取别名 -->
12       <typeAliases>
13           <!-- 给user类取别名 -->
14           <!-- <typeAlias type="com.bjsxt.pojo.User" alias="u"/> -->
15           <!-- 别名都是类的名字 -->
16           <package name="com.bjsxt.pojo"/>
17       </typeAliases>
18       <!-- 用于指定使用哪个开发
19                                 用于指定使用的环境id
20        -->
21       <environments default="dev">
22           <!-- 用于配置开发环境
23                id:环境的唯一识别码
24            -->
25           <environment id="dev">
26               <!-- 事务管理器
27                    type:用于设定mybatis采用什么方式管理事务
28                    JDBC表示和JDBC一样事务的管理方式
29                -->
30               <transactionManager type="JDBC"/>
31               <!-- 数据源/连接池
32                                                          用于配置链接池和数据库链接的参数
33                    type:用于设置mybatis是否采用链接池技术
34                                                         连接池:用来存数据库链接的,减少数据库的频繁开关
35                    POOLED表示mybatis采用连接池技术                                     
36                -->
37               <dataSource type="POOLED">
38                   <property name="driver" value="${jdbc.driver}"/>
39                   <property name="url" value="${jdbc.url}"/>
40                   <property name="username" value="${jdbc.username}"/>
41                   <property name="password" value="${jdbc.password}"/>
42               </dataSource>
43           </environment>
44       </environments>
45       <!-- 扫描mapper文件 -->
46       <!-- 文件的全限制路径要用/ -->
47       <mappers>
48           <mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
49       </mappers>
50   </configuration>


1
<?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-|3-mapper.dtd"> 5 <!-- namespa:命名空间,可以随意定义,一般情况下要写全限定路径(包名加类) 6 MyBatis管理SQL语句是通过namespace+id来定位的 7 --> 8 <mapper namespace="com.bjsxt.mapper.UserMapper"> 9 <!-- 新增 --> 10 <insert id="insUser" parameterType="user" > 11 insert into t_user values (default,#{username},#{password}) 12 </insert> 13 14 </mapper>
 1 package com.bjsxt.util;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 
11 public class MyBatisUtil {
12     
13     private static SqlSessionFactory factory=null;
14     static{
15         
16         try {
17             InputStream is=Resources.getResourceAsStream("mybatis.xml");
18             factory=new SqlSessionFactoryBuilder().build(is);
19         } catch (IOException e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23     }
24 
25     public static SqlSession getSession(){
26         SqlSession session =null;
27         if(factory!=null){
28             //true表示开启
29          session= factory.openSession(true);
30         }
31         return session;
32     }
33 }
 1 package com.bjsxt.test;
 2 
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.junit.Test;
 5 
 6 import com.bjsxt.pojo.User;
 7 import com.bjsxt.util.MyBatisUtil;
 8 
 9 public class TestInsert {
10 @Test
11     public void testIns(){
12         SqlSession session = MyBatisUtil.getSession();
13         User user=new User();
14         user.setUsername("XIAOWEI");
15         user.setPassword("123");
16         
17         int num=session.insert("com.bjsxt.mapper.UserMapper.insUser",user);
18         if(num>0){
19             //提交事务
20             //session.commit();
21             System.out.println("SUCCESS!");
22         }else{
23             //session.rollback();
24             System.out.println("FAILED!");
25         }
26         //
27         session.close();
28     }
29 }

1.4修改和删除

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-|3-mapper.dtd">
 5   <!-- namespa:命名空间,可以随意定义,一般情况下要写全限定路径(包名加类)
 6        MyBatis管理SQL语句是通过namespace+id来定位的
 7    -->
 8 <mapper namespace="com.bjsxt.mapper.UserMapper">
 9    <!-- 新增 -->
10  <insert id="insUser"  parameterType="user" >
11      insert into t_user values (4,#{username},#{password})
12  </insert>
13  
14  
15  <!-- 修改 -->
16  <update id="updUser"  parameterType="user" >
17     update  t_user set username=#{username},password=#{password} where id=#{id}
18  </update>
19  
20  <!-- 删除 -->
21  <delete id="delUser" parameterType="int">
22      delete from t_user where id=#{0}
23  </delete>
24 </mapper>
 1 package com.bjsxt.test;
 2 
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.junit.Test;
 5 
 6 import com.bjsxt.pojo.User;
 7 import com.bjsxt.util.MyBatisUtil;
 8 
 9 public class TestInsert {
10     @Test
11     public void testDel(){
12         SqlSession session =MyBatisUtil.getSession();
13         
14     int num=session.update("com.bjsxt.mapper.UserMapper.delUser", 9);
15         if(num>0){
16             session.commit();
17             System.out.println("success");
18             
19         }else
20         {
21             System.out.println("false");
22             session.rollback();
23         }
24         session.close();
25     }
26     @Test
27     public void testUpd(){
28         SqlSession session = MyBatisUtil.getSession();
29         
30         User user1=new User();
31         user1.setId(4);
32         user1.setUsername("daming");
33         user1.setPassword("abc");
34         
35     int num=session.update("com.bjsxt.mapper.UserMapper.updUser", user1);
36         if(num>0){
37             session.commit();
38             System.out.println("success");
39             
40         }else
41         {
42             System.out.println("false");
43             session.rollback();
44         }
45         session.close();
46     }
47 @Test
48     public void testIns(){
49         SqlSession session = MyBatisUtil.getSession();
50         User user=new User();
51         user.setUsername("XIAOWEI");
52         user.setPassword("123");
53         
54         int num=session.insert("com.bjsxt.mapper.UserMapper.insUser",user);
55         if(num>0){
56             //提交事务
57             //session.commit();
58             System.out.println("SUCCESS!");
59         }else{
60             //session.rollback();
61             System.out.println("FAILED!");
62         }
63         //
64         session.close();
65     }
66 }
原文地址:https://www.cnblogs.com/wq-9/p/10222568.html