发表于: 2017-11-02 21:55:05
2 758
day13
今日完成
Mapper的动态代理
采用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的类型相同。
项目结构
userMapper接口如图所示:
package com.mybatis.mapping;
import com.mybatis.domin.User;
import java.util.List;
public interface userMapper
{
User getUser(int id) ;
List<User> getAllUsers() ;
int addUser(User user) ;
int deleteUser(int id) ;
int updateUser(User user) ;
}
测试类
import com.mybatis.domin.User;
import com.mybatis.mapping.userMapper;
import com.mybatis.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class TestProxyMapper {
@Test
public void testInsert() throws Exception{
User user=new User();
int i=2;
while(i<10) {
user.setName("李" + i + 1 + "光");
user.setId(i + 1);
user.setAge(23 + i);
i++;
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
userMapper userMapper = sqlSession.getMapper(userMapper.class);
userMapper.addUser(user);
//关闭session
sqlSession.close();
}
System.out.println("---------执行完毕-----------");
}
@Test
public void testGetUser() throws Exception{
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
userMapper userMapper=sqlSession.getMapper(userMapper.class);
User user=userMapper.getUser(6);
System.out.println(userMapper);
System.out.println(user);
//关闭session
sqlSession.close();
System.out.println("---------执行完毕-----------");
}
@Test
public void testUpdateUser(){
SqlSession sqlSession=MyBatisUtil.getSqlSession(true);
userMapper userMapper=sqlSession.getMapper(userMapper.class);
User user=new User();
user.setId(3);
user.setName("周杰伦123");
user.setAge(100);
int retResult=userMapper.updateUser(user);
sqlSession.close();
System.out.println(retResult);
System.out.println("---------执行完毕-----------");
}
@Test
public void testGetAllUsers() throws Exception{
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
userMapper userMapper=sqlSession.getMapper(userMapper.class);
List<User> allUsers=userMapper.getAllUsers();
System.out.println(allUsers);
//关闭session
sqlSession.close();
System.out.println("---------执行完毕-----------");
}
@Test
public void testDeleteUser(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
userMapper userMapper = sqlSession.getMapper(userMapper.class);
int retResult = userMapper.deleteUser(7);
System.out.println(retResult);
sqlSession.close();
System.out.println("---------执行完毕-----------");
}
}
遇到的困难
出现异常:
org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in com/mybatis/mapping/userMapper.java (best guess)
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.binding.BindingException: Type interface com.mybatis.mapping.userMapper is already known to the MapperRegistry.
如图,根据异常将config.xml文件中mapper去掉后,成功运行
明日计划
学习junit4,尝试编写单元测试
收获
进一步熟悉了mybatis,了解了mapper代理的过程
评论