mybatis框架——Mapper动态代理方式

1、Mybatis框架的介绍

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2、Mybatis基于Mapper动态代理的方式实现DAO层

用Mapper动态代理的方式实现DAO层有点类似于spring data JPA的方式,都只需要写一个接口,在接口中写操作数据库的方法就可以,不同的是Mapper接口中的方法需要搭配配置文件中的sql语句生成一个动态代理对象,这个对象由底层自动生成,而程序员只需要配置接口对应的xxxMapper.xml文件就可以了。

2.1 XXXMapper.xml(映射文件)的配置

  1. Mapper.xml文件中的namespace与mapper接口的类路径相同。
  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同





	
	
	
	
	
	
	
		
		
			SELECT LAST_INSERT_ID()
		
		INSERT into user (username,birthday,sex,address) 
		values (#{username}, #{birthday}, #{sex}, #{address})
	

 

2.2 Mapper接口

public interface UserMapper {
	
	User getUserById(Integer id);
	
	List getUserByName(String name);
	
	void saveUser(User user);
}

2.3 mybatis的配置文件设置




	
	
		
		
		
		
	
	
	
		
		
		
		
	
	
	
		
		
			
		
			
				
				
				
				
			
		
	
	
	
	
		
		
		
		
		
		
		
		
	

在mybatis的配置文件中,配置mapper映射文件有三种方式:

(1)
使用相对于类路径的资源
如:

(2)
使用mapper接口类路径
如:
注意:此方式需要mapper接口名称和mapper映射文件名称一致并且两者在同一目录下

(3)
注册指定包下的所有mapper接口
如:
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

2.4 测试类

Public class UserMapperTest extends TestCase {

	private SqlSessionFactory sqlSessionFactory;
	
	protected void setUp() throws Exception {
		//mybatis配置文件
		String resource = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//使用SqlSessionFactoryBuilder创建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 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);
		//要添加的数据
		User user = new User();
		user.setUsername("张三");
		user.setBirthday(new Date());
		user.setSex("1");
		user.setAddress("北京市");
		//通过mapper接口添加用户
		userMapper.insertUser(user);
		//提交
		session.commit();
		//关闭session
		session.close();
	}

}

 

你可能感兴趣的:(框架学习)