【Mybatis】mapper動態代理和sqlMapconfig.xml配置標籤
阿新 • • 發佈:2018-12-25
1.mapper動態代理
使用mapper對映來,聯絡sql語句和程式碼函式。
步驟一:在上一篇基礎的上,新增一個介面,要求與UserMapper的xml配置檔案同名,加入在xml中的所有sql的id相同的方法,即方法名相同,入參和返回值都相同
步驟二:修改usermapper的名稱空間為介面的類路徑
步驟三:在獲得sqlSession之後,使用getMapper(interface.class),會返回一個與入參相同型別的介面物件,可以用該物件來呼叫方法。
package com.test.mapper; import java.util.List; import com.test.domain.User; public interface UserMapper { public void addUser2(User user); public void deleteUser(Integer id); public void updateUser(User user); public User selectUser(Integer id); public List<User> selectAllUser(); }
package com.test.test; import java.io.IOException; 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.Test; import com.test.domain.User; import com.test.mapper.UserMapper; public class test1 { public static SqlSession sqlSession; public static UserMapper mapper; public static void init() throws IOException { SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("sqlMapConfig.xml")); sqlSession = sqlSessionFactory.openSession(); mapper = sqlSession.getMapper(UserMapper.class); System.out.println("test1 init "); } @Test public void testAddUser2() throws Exception { init(); User user = new User(1,"addmapmth"); mapper.addUser2(user); System.out.println(user); sqlSession.commit(); sqlSession.close(); } @Test public void testDeleteUser() throws Exception { init(); //User user = new User(1,"addmapmth"); mapper.deleteUser(1008); sqlSession.commit(); sqlSession.close(); } @Test public void testUpdateUser() throws Exception { init(); User user = new User(1010,"addmapmth"); mapper.updateUser(user); System.out.println(user); sqlSession.commit(); sqlSession.close(); } @Test public void testSelectUser() throws Exception { init(); //User user = new User(1,"addmapmth"); User user = mapper.selectUser(1010);//.addUser2(user); System.out.println(user); sqlSession.commit(); sqlSession.close(); } @Test public void testSelectAllUser() throws Exception { init(); //User user = new User(1,"addmapmth"); List<User> user = mapper.selectAllUser();//.selectUser(1010);//.addUser2(user); for (User user2 : user) { System.out.println(user2); } sqlSession.commit(); sqlSession.close(); } }
2.sqlMapconfig.xml配置標籤
注意:
在配置檔案中(sqlMapConfig.xml)
標籤順序從上到下:properties 、settings、typeAliases、environments 、mappers。順序出錯,也會報錯
思考一下:
properties配置資料庫的驅動,類路徑,帳號,密碼。也可以是別的,算是使用者自定義配置
settings設定二級快取和延遲載入。現在都是用分散式快取,redis,等
typeAliasses設定類別名,以便可以在mapper中使用,所以至少應在mapper之前
environment設定jdbc什麼的,在與spring整合中會被廢棄
mappers存放sql的對映檔案
別名標籤:
<typeAliases>
<!--
<typeAlias 設定類《==》別名
<package 設定包中所有的類《==》別名
-->
<package name="com.test.domain"/>
<!--
<typeAlias type="com.test.domain.User" alias="User"/>
-->
</typeAliases>
對映器標籤:
<mapper class=" " />
使用mapper介面類路徑
如:<mapper class="cn.xxx.mapper.UserMapper"/>
注意:此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。
<package name=""/>
註冊指定包下的所有mapper介面
如:<package name="cn.xxx.mapper"/>
注意:此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。