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动态代理方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载保存】Selenium WebDr
- 下一篇: 单向链表 双向链表 java代码实现