今天學習了下mybatis,
對其中的autoCommit自動提交事務比較好奇,
研究了下,把配置和代碼都放上
mapper.xml如下:
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 <!-- namespace隔離sql --> 6 <mapper namespace="User"> 7 <!-- id:statement的標識 --> 8 <!-- 9 #{}表示占位符(轉為?),可以防止SQL注入;如果輸入參數類型是簡單類型,輸入參數名稱可以是value或者其它任意名稱 10 --> 11 <select id="getUserById" parameterType="int" resultType="org.pine.mybatis.po.User"> 12 select * from user t where t.id = #{id} 13 </select> 14 15 <!-- resultType:單條記錄的類型 --> 16 <select id="listUserByUserame1" parameterType="java.lang.String" resultType="org.pine.mybatis.po.User"> 17 select * from user t where t.username like #{username} 18 </select> 19 20 <!-- 21 ${}表示拼接SQL(拼接參數),不能防止SQL注入;如果輸入參數類型是簡單類型,輸入參數名稱只能是value 22 --> 23 <select id="listUserByUsername2" parameterType="java.lang.String" resultType="org.pine.mybatis.po.User"> 24 select * from user t where t.username like '%${value}%' 25 </select> 26 27 <!-- 28 輸入參數類型為User類型,是一個pojo 29 #{}表示占位符,輸入參數名稱為username,是pojo里面的一個屬性 30 --> 31 <insert id="insertUser0" parameterType="org.pine.mybatis.po.User"> 32 INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) 33 </insert> 34 35 <insert id="insertUser1" parameterType="org.pine.mybatis.po.User"> 36 INSERT INTO USER(id,username,birthday,sex,address) VALUES(default,#{username},#{birthday},#{sex},#{address}) 37 </insert> 38 39 <insert id="insertUser2" parameterType="org.pine.mybatis.po.User"> 40 INSERT INTO USER(id,username,birthday,sex,address) VALUES(null,#{username},#{birthday},#{sex},#{address}); 41 </insert> 42 </mapper>
MybatisFirst3.java如下:
package org.pine.mybatis.first; import java.io.InputStream; import java.sql.Date; import java.text.SimpleDateFormat; 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 org.junit.Test; import org.pine.mybatis.po.User; public class MybatisFirst3 { @Test public void testInsert0() throws Exception{ String fileName ="SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(fileName); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession();//通過這種方式打開的SqlSession,autoCommit默認為false,需要手動提交事務 User user = new User(); user.setUsername("孫坤鵬"); user.setBirthday(new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1991-09-13").getTime())); user.setSex("男"); user.setAddress("河南新鄉"); sqlSession.insert("User.insertUser2", user); sqlSession.commit(); sqlSession.close(); inputStream.close(); } @Test public void testInsert1() throws Exception{ String fileName ="SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(fileName); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(true);//通過這種方式打開的SqlSession,autoCommit為true,會自動提交事務 User user = new User(); user.setUsername("王起鵬"); user.setBirthday(new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1992-07-20").getTime())); user.setSex("男"); user.setAddress("河南駐馬店"); sqlSession.insert("User.insertUser2", user); sqlSession.close(); inputStream.close(); } @Test public void testInsert2() throws Exception{ String fileName ="SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(fileName); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(false);//通過這種方式打開的SqlSession,autoCommit為false,需要手動提交事務 User user = new User(); user.setUsername("楊豆豆"); user.setBirthday(new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1989-06-19").getTime())); user.setSex("男"); user.setAddress("河南駐馬店"); sqlSession.insert("User.insertUser2", user); sqlSession.commit(); sqlSession.close(); inputStream.close(); } }