欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis實現(xiàn)Mapper動態(tài)代理方式詳解

 更新時間:2017年08月18日 11:47:08   作者:魚笑笑  
這篇文章主要為大家詳細介紹了Mybatis實現(xiàn)Mapper動態(tài)代理方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、實現(xiàn)原理

        Mapper接口開發(fā)方法只需要程序員編寫Mapper接口(相當于Dao接口),由Mybatis框架根據(jù)接口定義創(chuàng)建接口的動態(tài)代理對象,代理對象的方法體同上邊Dao接口實現(xiàn)類方法。

Mapper接口開發(fā)需要遵循以下規(guī)范:

1、Mapper.xml文件中的namespace與mapper接口的類路徑相同。

2、 Mapper接口方法名和Mapper.xml中定義的每個statement的id相同 

3、Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個sql 的parameterType的類型相同

4、Mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的每個sql的resultType的類型相同

二、Mapper.xml映射文件

       定義mapper映射文件UserMapper.xml(內容同Users.xml),需要修改namespace的值為 UserMapper接口路徑。將UserMapper.xml放在classpath 下mapper目錄下。 

<?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"> 
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper"> 
<!-- 根據(jù)id獲取用戶信息 --> 
 <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User"> 
  select * from user where id = #{id} 
 </select> 
<!-- 自定義條件查詢用戶列表 --> 
 <select id="findUserByUsername" parameterType="java.lang.String" 
   resultType="cn.itcast.mybatis.po.User"> 
  select * from user where username like '%${value}%' 
 </select> 
<!-- 添加用戶 --> 
 <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"> 
 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> 
  select LAST_INSERT_ID() 
 </selectKey> 
  insert into user(username,birthday,sex,address) 
  values(#{username},#{birthday},#{sex},#{address}) 
 </insert> 
 
</mapper> 

三、Mapper.java(接口文件) 

/** 
 * 用戶管理mapper 
 */ 
Public interface UserMapper { 
 //根據(jù)用戶id查詢用戶信息 
 public User findUserById(int id) throws Exception; 
 //查詢用戶列表 
 public List<User> findUserByUsername(String username) throws Exception; 
 //添加用戶信息 
 public void insertUser(User user)throws Exception; 
} 

接口定義有如下特點:

1、Mapper接口方法名和Mapper.xml中定義的statement的id相同
2、Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的statement的parameterType的類型相同
3、Mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的statement的resultType的類型相同 

四、加載UserMapper.xml文件

修改sqlMapConfig.xml文件: 

<!-- 加載映射文件 --> 
 <mappers> 
 <mapper resource="mapper/UserMapper.xml"/> 
 </mappers> 

五、測試  

Public class UserMapperTest extends TestCase { 
 
 private SqlSessionFactory sqlSessionFactory; 
  
 protected void setUp() throws Exception { 
  //mybatis配置文件 
  String resource = "sqlMapConfig.xml"; 
  InputStream inputStream = Resources.getResourceAsStream(resource); 
  //使用SqlSessionFactoryBuilder創(chuàng)建sessionFactory 
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
 } 
 
  
 Public void testFindUserById() throws Exception { 
  //獲取session 
  SqlSession session = sqlSessionFactory.openSession(); 
  //獲取mapper接口的代理對象 
  UserMapper userMapper = session.getMapper(UserMapper.class); 
  //調用代理對象方法 
  User user = userMapper.findUserById(1); 
  System.out.println(user); 
  //關閉session 
  session.close(); 
   
 } 
 @Test 
 public void testFindUserByUsername() throws Exception { 
  SqlSession sqlSession = sqlSessionFactory.openSession(); 
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
  List<User> list = userMapper.findUserByUsername("張"); 
  System.out.println(list.size()); 
 
 } 
Public void testInsertUser() throws Exception { 
  //獲取session 
  SqlSession session = sqlSessionFactory.openSession(); 
  //獲取mapper接口的代理對象 
  UserMapper userMapper = session.getMapper(UserMapper.class); 
  //要添加的數(shù)據(jù) 
  User user = new User(); 
  user.setUsername("張三"); 
  user.setBirthday(new Date()); 
  user.setSex("1"); 
  user.setAddress("北京市"); 
  //通過mapper接口添加用戶 
  userMapper.insertUser(user); 
  //提交 
  session.commit(); 
  //關閉session 
  session.close(); 
 } 
  
 
} 
 

六、總結 

 selectOne和selectList

         動態(tài)代理對象調用sqlSession.selectOne()和sqlSession.selectList()是根據(jù)mapper接口方法的返回值決定,如果返回list則調用selectList方法,如果返回單個對象則調用selectOne方法。

namespace

         mybatis官方推薦使用mapper代理方法開發(fā)mapper接口,程序員不用編寫mapper接口實現(xiàn)類,使用mapper代理方法時,輸入?yún)?shù)可以使用pojo包裝對象或map對象,保證dao的通用性。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • IntelliJ IDEA引入第三方jar包或查看Java源碼的時候報decompiled.class file bytecode version:52.0(java 8)錯誤的解決辦法

    IntelliJ IDEA引入第三方jar包或查看Java源碼的時候報decompiled.class file byt

    今天小編就為大家分享一篇關于IntelliJ IDEA引入第三方jar包或查看Java源碼的時候報decompiled.class file bytecode version:52.0(java 8)錯誤的解決辦法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • java判斷字符串包含某個字符的實例方法

    java判斷字符串包含某個字符的實例方法

    在本篇文章里小編給大家整理的是一篇關于java判斷字符串包含某個字符的實例方法,有需要的朋友們學習下。
    2019-12-12
  • SpringBoot返回json和xml的示例代碼

    SpringBoot返回json和xml的示例代碼

    本篇文章主要介紹了SpringBoot返回json和xml的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 解讀java.lang.Character.isLetterOrDigit()的使用方式

    解讀java.lang.Character.isLetterOrDigit()的使用方式

    這篇文章主要介紹了解讀java.lang.Character.isLetterOrDigit()的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • java編譯命令和啟動命令的使用方式

    java編譯命令和啟動命令的使用方式

    Java開發(fā)中,編譯源文件需使用javac命令,該命令能將.java文件編譯成.class字節(jié)碼文件,后者可在JVM上運行,常用編譯選項包括-d指定輸出目錄,-classpath設置類搜索路徑等,啟動Java程序使用java命令,它加載并運行包含main方法的類
    2024-10-10
  • Java中的javaBean、vo、entity、domain和pojo

    Java中的javaBean、vo、entity、domain和pojo

    這篇文章主要介紹了Java中的javaBean、vo、entity、domain和pojo用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring?Boot?DevTools?全局配置學習指南

    Spring?Boot?DevTools?全局配置學習指南

    這篇文章主要介紹了Spring?Boot?DevTools?全局配置,注意包括直接重啟項目與devtools重啟的區(qū)別,DevTools配置,DevTools全局配置及trigger-file控制重啟行為的相關知識,需要的朋友可以參考下
    2022-03-03
  • SpringBoot源碼剖析之屬性文件加載原理

    SpringBoot源碼剖析之屬性文件加載原理

    這篇文章主要給大家介紹了關于SpringBoot源碼剖析之屬性文件加載原理的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • 一文簡介Java中BlockingQueue阻塞隊列

    一文簡介Java中BlockingQueue阻塞隊列

    本文主要介紹了一文簡介Java中BlockingQueue阻塞隊列,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • JAVA使用commos-fileupload實現(xiàn)文件上傳與下載實例解析

    JAVA使用commos-fileupload實現(xiàn)文件上傳與下載實例解析

    這篇文章主要介紹了JAVA使用commos-fileupload實現(xiàn)文件上傳與下載的相關資料,需要的朋友可以參考下
    2016-02-02

最新評論