日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis中Mapper动态代理方式

發布時間:2024/8/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis中Mapper动态代理方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 開發規范
    • Mapper接口開發需要遵循以下規范
    • Mapper.xml(映射文件)
    • UserMapper(接口文件)
      • 加載UserMapper.xml文件
  • 總結
    • selectOne和selectList:
    • namespace:

開發規范

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

Mapper接口開發需要遵循以下規范

1、 Mapper.xml文件中的namespace與mapper接口的類路徑相同。
2、 Mapper接口方法名和Mapper.xml中定義的每個statement的id相同
3、 Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql 的parameterType的類型相同
4、 Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同

Mapper.xml(映射文件)

UserMapper.xml配置文件內容:最好把xml都放在config目錄下

<?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 --> <!-- 還有一個很重要的作用,使用動態代理開發DAO,1. namespace必須和Mapper接口類路徑一致 --> <mapper namespace="cn.itcast.mybatis.mapper.UserMapper"><!-- 根據用戶id查詢用戶 --><!-- 2. id必須和Mapper接口方法名一致 --><!-- 3. parameterType必須和接口方法參數類型一致 --><!-- 4. resultType必須和接口方法返回值類型一致 --><select id="queryUserById" parameterType="int"resultType="cn.itcast.mybatis.pojo.User">select * from user where id = #{id}</select><!-- 根據用戶名查詢用戶 --><select id="queryUserByUsername" parameterType="string"resultType="cn.itcast.mybatis.pojo.User">select * from user where username like '%${value}%'</select><!-- 保存用戶 --><insert id="saveUser" parameterType="cn.itcast.mybatis.pojo.User"><selectKey keyProperty="id" keyColumn="id" order="AFTER"resultType="int">select last_insert_id()</selectKey>insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});</insert></mapper>

UserMapper(接口文件)

public interface UserMapper {/*** 根據id查詢* * @param id* @return*/User queryUserById(int id);/*** 根據用戶名查詢用戶* * @param username* @return*/List<User> queryUserByUsername(String username);/*** 保存用戶* * @param user*/void saveUser(User user); }

加載UserMapper.xml文件

修改SqlMapConfig.xml文件,添加以下所示的內容:

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

編寫的測試方法如下:

public class UserMapperTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void init() throws Exception {// 創建SqlSessionFactoryBuilderSqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 加載SqlMapConfig.xml配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 創建SqlsessionFactorythis.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);}@Testpublic void testQueryUserById() {// 獲取sqlSession,和spring整合后由spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 從sqlSession中獲取Mapper接口的代理對象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 執行查詢方法User user = userMapper.queryUserById(1);System.out.println(user);// 和spring整合后由spring管理sqlSession.close();}@Testpublic void testQueryUserByUsername() {// 獲取sqlSession,和spring整合后由spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 從sqlSession中獲取Mapper接口的代理對象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 執行查詢方法List<User> list = userMapper.queryUserByUsername("張");for (User user : list) {System.out.println(user);}// 和spring整合后由spring管理sqlSession.close();}@Testpublic void testSaveUser() {// 獲取sqlSession,和spring整合后由spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 從sqlSession中獲取Mapper接口的代理對象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 創建保存對象User user = new User();user.setUsername("劉備");user.setBirthday(new Date());user.setSex("1");user.setAddress("蜀國");// 執行查詢方法userMapper.saveUser(user);System.out.println(user);// 和spring整合后由spring管理sqlSession.commit();sqlSession.close();} }

總結

selectOne和selectList:

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

namespace:

mybatis官方推薦使用mapper代理方法開發mapper接口,程序員不用編寫mapper接口實現類,使用mapper代理方法時,輸入參數可以使用pojo包裝對象或map對象,保證dao的通用性。

總結

以上是生活随笔為你收集整理的Mybatis中Mapper动态代理方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。