zoukankan      html  css  js  c++  java
  • mabatis之mapper代理开发

    1.1     Mapper动态代理方式   

    1.1.1  开发规范

            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的类型相同 

    1.1.2 Mapper.xml(映射文件)

            定义mapper映射文件UserMapper.xml(内容同Users.xml),需要修改namespace的值为 UserMapper接口路径。将UserMapper.xml放在classpath 下mapper目录 下。

    <?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="cn.itcast.mybatis.mapper.UserMapper">
    <!-- 根据id获取用户信息 -->
        <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
            select * from user where id = #{id}
        </select>
    <!-- 自定义条件查询用户列表 -->
        <select id="findUserByUsername" parameterType="java.lang.String" 
                resultType="cn.itcast.mybatis.po.User">
           select * from user where username like '%${value}%' 
        </select>
    <!-- 添加用户 -->
        <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID() 
        </selectKey>
          insert into user(username,birthday,sex,address) 
          values(#{username},#{birthday},#{sex},#{address})
        </insert>
    
    </mapper>

    1.1.3 Mapper.java(接口文件)

    package com.mybatis.mapper;
    
    import java.util.List;
    
    import com.mybatis.po.User;
    
    public interface UserMapper {
        //根据用户id查询用户信息
        public User findUserById(int id) throws Exception;
        //查询用户列表
        public List<User> findUserByUsername(String username) throws Exception;
        //添加用户信息
        public void insertUser(User user)throws Exception; 
    
    }

    接口定义有如下特点:

    1、  Mapper接口方法名和Mapper.xml中定义的statement的id相同

    2、  Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同

    3、  Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同

    1.1.4  加载UserMapper.xml文件

    <?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.mybatis.mapper.UserMapper">
    <!-- 根据id获取用户信息 -->
        <select id="findUserById" parameterType="int" resultType="com.mybatis.po.User">
            select * from user where id = #{id}
        </select>
    <!-- 自定义条件查询用户列表 -->
        <select id="findUserByUsername" parameterType="java.lang.String" 
                resultType="com.mybatis.po.User">
           select * from user where username like '%${value}%' 
        </select>
    <!-- 添加用户 -->
        <insert id="insertUser" parameterType="com.mybatis.po.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID() 
        </selectKey>
          insert into user(username,birthday,sex,address) 
          values(#{username},#{birthday},#{sex},#{address})
        </insert>
    
    </mapper>

    1.1.5 测试

    package test;
    
    import static org.junit.Assert.*;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.Reader;
    import java.util.Date;
    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.mybatis.mapper.UserMapper;
    import com.mybatis.po.User;
    
    public class UserMapperTest {
        
        private SqlSessionFactory sqlSessionFactory;
        
        @Before
        public void init() throws IOException{
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
            sqlSessionFactory = builder.build(inputStream);
        }
    
        @Test
        public void testFindUserById() throws Exception {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = mapper.findUserById(10);
            System.out.println(user);
        }
    
        @Test
        public void testFindUserByUsername() throws Exception {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> list = mapper.findUserByUsername("张");
            for (User user : list) {
                System.out.println(user);
            }
        }
    
        @Test
        public void testInsertUser() throws Exception {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user=new User();
            user.setUsername("张益达");
            user.setAddress("上海");
            user.setBirthday(new Date());
            user.setSex("2");
            mapper.insertUser(user);
            System.out.println(user.getId());
        }
    
    }

    1.1.6 小结

      selectOne和selectList

    动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。

     

     namespace

    mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。

  • 相关阅读:
    BZOJ1033:[ZJOI2008]杀蚂蚁antbuster(模拟)
    BZOJ4001:[TJOI2015]概率论(卡特兰数,概率期望)
    BZOJ1820:[JSOI2010]Express Service 快递服务(DP)
    BZOJ4066:简单题(K-D Tree)
    2110. [NOIP2015普及]金币
    73. 找最佳通路
    cogs 7. 通信线路
    codevs 3295 落单的数
    151. [USACO Dec07] 建造路径
    必备算法之二叉树的相关操作
  • 原文地址:https://www.cnblogs.com/lxk233/p/8489998.html
Copyright © 2011-2022 走看看