-
增删改(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 }