mybatis-动态代理式模式详细

mybatis-动态代理式模式

      • 核心配置文件:SqlMapConfig.xml
      • 映射文件
      • 实体类示例
      • 接口示例
      • 测试
      • 附:项目文件结构

核心配置文件:SqlMapConfig.xml

该配置文件主要注意:

  • 加载参数配置
  • typeAliases 别名的配置 (包扫描方式)
  • mappers 加载映射文件配置(映射文件包扫描,推荐方式:)




	
	
		
		
	
	
	
		
		
		
		
	
	
	
	
		
			
			
			
			
				
				
				
				
			
		
	
	
	
	
		
		
	


映射文件

下边以UserMapper.xml 示例
需要注意的点:

  • 动态代理开发规则:
  1. namespace必需是接口的全路径名
  2. 接口的方法名必需与sql id 一致
  3. 接口的入参与parameterType类型一致
  4. 接口的返回值必须与resultType类型一致
  • 多参数查询时 where 和 if 标签 的使用
  • foreach循环标签collection:要遍历的集合
    1. open: 循环开始之前输出的内容
    2. item: 设置的循环变量
    3. separator : 分隔符
    4. close : 循环结束周输出的内容
  • 使用result绑定普通字段 , 以及sql语句起别名
  • collection用于配置一对多关联
    property:User当中Order的属性
    ofType:orders的数据类型,支持别名




	


	
	
		`id`,
		`username`,
		`birthday`,
		`sex`,
		`address`
	

	
	

	
	

	
	
	
		
		
		INSERT INTO `user`
		(`username`,
		`birthday`,
		`sex`,
		`address`)
		VALUES (#{username},
		#{birthday},
		#{sex},
		#{address});
	

	
	
	    DELETE FROM `user` WHERE `id` = #{id}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
		
		
		
		
			
			
			
			 
			
			
			
			
		
	
	
	


实体类示例

mybatis-动态代理式模式详细_第1张图片

接口示例

package com.mapper;

import java.util.List;

import com.bo.QueryVo;
import com.bo.User;

/**
 * 用户信息持久化接口  动态代理 不需要实现类
 * @author Steven
 *
 */
public interface UserMapper {
   
	/**
	 * 根据用户ID查询用户信息
	 * @param id
	 * @return
	 */
	User getUserById(Integer id);
	/**
	 * 根据用户名查找用户列表
	 * @param userName
	 * @return
	 */
	List getUserByUserName(String userName);
	/**
	 * 添加用户
	 * @param user
	 */
	void insertUser(User user);
	
	/**
	 * 删除用户
	 * @param id
	 */
	void deleteUser(Integer id);
	//**********************************************
	/**
	 * 包装类查询用户
	 * @param queryvo
	 * @return
	 */
	User getUserByQueryVo(QueryVo queryvo);
	
	/**
	 * 根据 用户名 和 性别查询用户
	 * @param user
	 * @return
	 */
	List getUsersByQueryVo(User user);
	/**
	 * 演示-foreach标签的使用,跟据用户id列表查询用户
	 * @param vo
	 * @return
	 */
	List getUserByIds(QueryVo vo);
	/**
	 * 演示一对多关联查询-ReaultMap
	 * @param user
	 * @return
	 */
	List getUserOrderMap();
}

测试

package com.test;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.bo.Order;
import com.bo.QueryVo;
import com.bo.User;
import com.mapper.UserMapper;
import com.tuils.SqlSessionFactoryUtils;
public class UserMapperTest {
	@Test
	public void testGetUserById() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		User user = userMapper.getUserById(10);	
		System.out.println(user);
		sqlSession.close();
	}
	//根据用户名查找用户
	@Test
	public void testGetUserByUserName() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		List userList = userMapper.getUserByUserName("张");
		
		for(User user : userList) {
			System.out.println(user);
		}
		//关闭sqlSession
		sqlSession.close();
	}
	
	//根据用户名查找用户
	@Test
	public void testInsertUser() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		User user = new User();
		user.setBirthday(new Date());
		user.setAddress("阿拉斯加");
		user.setSex("熊");
		user.setUsername("熊二");
		userMapper.insertUser(user);
		System.out.println(user+"---------");
		sqlSession.commit();
		//关闭sqlSession
		sqlSession.close();
	}
	
	//删除用户
	@Test
	public void deleteUser() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(true);
	    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	    mapper.deleteUser(31);
	    sqlSession.close();
	}
	//====================================================2=====================================
	//简单的包装类
	@Test
	public void testQueryVoById() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		QueryVo queryvo = new QueryVo();
		User user = new User();
		user.setId(29);
		queryvo.setUser(user);
		User result_user = userMapper.getUserByQueryVo(queryvo);
		System.out.println(result_user);
		sqlSession.close();
	}
	
	// 多参数查询  根据用户名和性别查询
	// 
	@Test
	public void testQueryPojo() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		//QueryVo queryvo = new QueryVo();
		User user = new User();
		user.setUsername("熊二");
		user.setSex("熊");
	//	queryvo.setUser(user);
		List userList = userMapper.getUsersByQueryVo(user);
		 for(User user2 : userList) {
			 System.out.println(user2);
		 }
		sqlSession.close();
	}
	
	//简单的包装类  ids ***** 参数为集合
	@Test
	public void testQueryVoByIds() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		QueryVo queryvo = new QueryVo();
		//构建id列表
		queryvo.setIds(Arrays.asList(1,10,16,24));
		List userList = userMapper.getUserByIds(queryvo);
		 for(User user2 : userList) {
			 System.out.println(user2);
		 }
		sqlSession.close();
	}
	// 一对多
	@Test
	public void getUserOrderMap() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		//获取接口的代理人实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		List list = userMapper.getUserOrderMap();
		for (User user2 : list) {
			System.out.println(user2);
			for (Order order : user2.getOrders()) {
				if(order.getId() != null){
					System.out.println("      此用户下的订单有:" + order);
				}
			}
		}
		sqlSession.close();
	}
}

附:项目文件结构

mybatis-动态代理式模式详细_第2张图片

你可能感兴趣的:(#,mybatis)