MyBatis - Mapper动态代理开发

怀抱观古今,寝食展戏谑。这篇文章主要讲述MyBatis - Mapper动态代理开发相关的知识,希望能为你提供帮助。
采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法。
  - Mapper接口开发需要遵循以下规范:

① Mapper.xml文件中的namespace与mapper接口的全类名相同。② Mapper接口方法名和Mapper.xml中定义的statement的id相同。③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同。④ Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同。

  - 注意:
mapper动态代理开发中,根据返回值类型自动选择selectOne与selectList

Mapper动态代理示例演示
Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。
①  Mapper接口文件
- map接口中的方法名必须和配置文件中的id属性值是一致的。
package com.sikiedu.mapper; import java.util.List; import com.sikiedu.beans.User; import com.sikiedu.beans.UserVo; public interface UserMapper {// 根据ID查询用户 public User selectUserById(Integer id); // 根据用户名模糊查询用户 public List< User> selectUserLikeUsername(String username); // 同过包装类UserVo查询用户 public User selectUserByUserVoId(UserVo vo); // 查询用户总条数 public Integer selectUserCount(); }

②  定义mapper映射文件
【MyBatis - Mapper动态代理开发】- namespace必须对应着map接口的全类名。
< ?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"> < mapper namespace="com.sikiedu.mapper.UserMapper"> < !-- 注意这里的 namespace必须对应着map接口的全类名-->
< !-- 查询用户 --> < select id="selectUserById" parameterType="Integer" resultType="com.sikiedu.beans.User"> SELECT * FROM user WHERE id = #{id} < /select> < select id="selectUserLikeUsername" parameterType="String" resultType="User"> < !-- SELECT * FROM coke.user WHERE username LIKE ‘%${value}%‘ --> SELECT * FROM user WHERE username LIKE "%"#{username}"%" < /select> < !-- 同过包装类UserVo查询用户 --> < select id="selectUserByUserVoId" parameterType="UserVo" resultType="user"> SELECT * FROM user WHERE id = #{id} < /select> < !-- selectUserCount --> < select id="selectUserCount" resultType="Integer"> SELECT COUNT(*) FROM user < /select> < /mapper>

③  在SqlMapConfig.xml中加入映射文件
< !--配置映射器的位置 --> < mappers> < !-- 单个配置 --> < !-- < mapper resource="com/sikiedu/mapper/UserMapper.xml" /> --> < !-- < mapper url="file:\D:JavaWorkSpaceJavaEE_SSM_Testssm_mybatissrccomsikiedumapperUserMapper.xml" /> --> < !-- < mapper class="com.sikiedu.mapper.UserMapper" /> --> < !-- 多配置-以包的形式; 推荐使用 --> < package name="com.sikiedu.mapper" /> < /mappers>

④  测试代码
package com.sikiedu.test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.sikiedu.beans.Role; import com.sikiedu.beans.RoleVo; import com.sikiedu.beans.User; import com.sikiedu.beans.UserVo; import com.sikiedu.mapper.RoleMapper; import com.sikiedu.mapper.UserMapper; public class MapperTest {private SqlSessionFactory ssf; @Before public void getSqlSessionFactory() throws Exception {// 读取配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); // 需要sqlSessionFactoryBuilder SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder(); // 创建sqlSessionFactory ssf = ssfb.build(in); }@Test // 根据ID查询用户 public void Test_selectUserById() throws IOException {// 生产一个sqlSession SqlSession sqlSession = ssf.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.selectUserById(3); System.out.println(user); }@Test // 根据用户名模糊查询用户 public void Test_selectUserLikeUsername() throws IOException {// 生产一个sqlSession SqlSession sqlSession = ssf.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List< User> users = userMapper.selectUserLikeUsername(""); for (User user : users) { System.out.println(user); }}@Test // 同过包装类UserVo查询用户 public void Test_selectUserByUserVoId() throws IOException {// 生产一个sqlSession SqlSession sqlSession = ssf.openSession(); // 操作数据库 UserVo vo = new UserVo(); // vo.setId(44); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.selectUserByUserVoId(vo); System.out.println(user); }@Test // 查询用户总条数 public void Test_selectUserCount() throws IOException {// 生产一个sqlSession SqlSession sqlSession = ssf.openSession(); // 操作数据库 UserMapper mapper = sqlSession.getMapper(UserMapper.class); Integer userCount = mapper.selectUserCount(); System.out.println(userCount); }}

 

    推荐阅读