1. 程式人生 > >mybatis學習筆記(1)-xml實體對映和測試類

mybatis學習筆記(1)-xml實體對映和測試類

1.user.xml配置檔案包含了增刪改查

<?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">
<!-- namespace:名稱空間,用於隔離sql,還有一個很重要的作用,後面會講 -->
<mapper namespace="user">

	<!-- id:statement的id 或者叫做sql的id -->
	<!-- parameterType:宣告輸入引數的型別 -->
	<!-- resultType:宣告輸出結果的型別,應該填寫pojo的全路徑 -->
	<!-- #{}:輸入引數的佔位符,相當於jdbc的? -->
	<select id="queryUserId" parameterType="int"
		resultType="com.skiff.www.domain.User">
		select * from user where id = #{id}
	</select>

	<!-- 如果返回多個結果,mybatis會自動把返回的結果放在list容器中 -->
	<!-- resultType的配置和返回一個結果的配置一樣 -->
	<select id="queryUserByUsername1" parameterType="string"
		resultType="com.skiff.www.domain.User">
		SELECT * FROM user WHERE username LIKE #{username}
	</select>

	<!-- 如果傳入的引數是簡單資料型別,${}裡面必須寫value -->
	<select id="queryUserByUsername2" parameterType="string"
		resultType="com.skiff.www.domain.User">
		SELECT * FROM `user` WHERE username LIKE '%${value}%'
	</select>

	<!-- 插入語句中values中括號的欄位和資料庫中的表中的資料是一一對應的 而value後面的資料是實體的物件中對應的屬性 -->
	<!-- 儲存使用者 -->
	<insert id="saveUser" parameterType="com.skiff.www.domain.User">
		<!-- selectKey 標籤實現主鍵返回 -->
		<!-- keyColumn:主鍵對應的表中的哪一列 -->
		<!-- keyProperty:主鍵對應的pojo中的哪一個屬性 -->
		<!-- order:設定在執行insert語句前執行查詢id的sql,在執行insert語句之後執行查詢id的sql -->
		<!-- resultType:設定返回的id的型別 -->
		<selectKey keyColumn="id" keyProperty="id" order="AFTER"
			resultType="int">
			SELECT LAST_INSERT_ID()
		</selectKey>
		INSERT INTO `user`
		(username,birthday,sex,address) VALUES
		(#{name},#{birthday},#{sex},#{address})
	</insert>

	<!-- 更新使用者 -->
	<update id="updateUserById" parameterType="com.skiff.www.domain.User">
		UPDATE `user` SET
		username = #{name},
		address = #{address},
		birthday = #{birthday} WHERE id = #{id}
	</update>

	<!-- 刪除使用者 -->
	<delete id="deleteUserById" parameterType="int">
		delete from user where
		id=#{id}
	</delete>



</mapper>


2.採用junit測試增刪改查

/**     
 * @檔名稱: TestUser.java   
 * @描述: TODO  
 * @作者:  一葉扁舟(skiff)
 * @時間:2018年1月9日 上午10:16:07  
 * @版本:V1.0     
 */ 
package test.com.skiff.www.testUser;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

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.Before;
import org.junit.Test;

import com.skiff.www.domain.User;

/**  
 * @類功能說明:    
 * @作者: 一葉扁舟 (skiff)
 * @建立時間:2018年1月9日 上午10:16:07  
 * @版本:V1.0  
 */
public class TestUser {
	
	
		private SqlSessionFactory sqlSessionFactory = null;
		
		@Before
		public void  init() throws IOException{
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			
			//2.載入sqlMapConfig.xml檔案
			InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
			//3.建立一個factory工廠
			sqlSessionFactory = builder.build(is);
	
		}
		
		@Test
		public void testSelect(){
			User user = new User();
			user.setName("一葉扁舟");
			user.setAddress("福州");
			user.setSex("1");
			user.setBirthday(new Date());
//			4.建立一個session
			SqlSession  session  = sqlSessionFactory.openSession();
			
			// 5. 執行SqlSession物件執行查詢,獲取結果User
			// 第一個引數是User.xml的statement的id,第二個引數是執行sql需要的引數;
			User user1 = session.selectOne("queryUserId",1);

			// 6. 列印結果
			System.out.println(user1);

			// 7. 釋放資源
			session.close();
			
		}
		
		@Test
		public void testSaveUser(){
			
			User user = new User();
			user.setName("一葉扁舟");
			user.setAddress("福州");
			user.setSex("1");
			user.setBirthday(new Date());
			SqlSession session = sqlSessionFactory.openSession();
			session.insert("saveUser",user);
			System.out.println(user);
			session.commit();
			session.close();
			
		}
		
		@Test
		public void queryName(){
			
			// 4. 建立SqlSession物件
			SqlSession sqlSession = sqlSessionFactory.openSession();

			// 5. 執行SqlSession物件執行查詢,獲取結果User
			// 查詢多條資料使用selectList方法
			List<Object> list = sqlSession.selectList("queryUserByUsername1", "%張%");

			// 6. 列印結果
			for (Object user : list) {
				System.out.println(user);
			}

			// 7. 釋放資源
			sqlSession.close();
		}
		
		
		@Test
		public void testQueryUserByUsername2() throws Exception {
			// 4. 建立SqlSession物件
			SqlSession sqlSession = sqlSessionFactory.openSession();

			// 5. 執行SqlSession物件執行查詢,獲取結果User
			// 查詢多條資料使用selectList方法
			List<Object> list = sqlSession.selectList("queryUserByUsername2", "王");

			// 6. 列印結果
			for (Object user : list) {
				System.out.println(user);
			}

			// 7. 釋放資源
			sqlSession.close();
		}
		@Test
		public void testUpdateUserById() {
			// 4. 建立SqlSession物件
			SqlSession sqlSession = sqlSessionFactory.openSession();

			// 5. 執行SqlSession物件執行更新
			// 建立需要更新的User
			User user = new User();
			user.setId(30);
			user.setName("關羽");
			user.setSex("1");
			user.setBirthday(new Date());
			user.setAddress("魔都");

			sqlSession.update("updateUserById", user);

			// 需要進行事務提交
			sqlSession.commit();

			// 7. 釋放資源
			sqlSession.close();
		}
		
		@Test
		public void testDeleteUserById() {
			// 4. 建立SqlSession物件
			SqlSession sqlSession = sqlSessionFactory.openSession();

			// 5. 執行SqlSession物件執行刪除
			sqlSession.delete("deleteUserById", 30);

			// 需要進行事務提交
			sqlSession.commit();

			// 7. 釋放資源
			sqlSession.close();
		}
		
}