• 增删改(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 }
  • 相关阅读:
    log4j配置只打印指定jar或包的DEBUG信息
    实现cookie跨域访问
    使用轻量级Spring @Scheduled注解执行定时任务
    Docker容器里时间与宿主机不同步
    Wildfly8 更改response header中的Server参数
    JBoss部署项目log4j配置会造成死锁问题,浏览器访问一直pending状态
    json-lib-2.4.jar Bug,json字符串中value为"[value]"结构时,解析为数组,不会解析成字符串
    【转载】分享下多年积累的对JAVA程序员成长之路的总结
    web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)
    rabbitmq+haproxy+keepalived实现高可用集群搭建
  • 原文地址:https://www.cnblogs.com/wq-9/p/10222568.html
Copyright © 2020-2023  润新知