mybatis學習筆記(1)-xml實體對映和測試類
阿新 • • 發佈:2019-02-17
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(); } }