zoukankan      html  css  js  c++  java
  • MyBatis

    一、Mapper动态代理开发

    Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。

    Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,只需要 编写mapper接口 和 Mappe.xml 配置文件即可。

    程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

    二、开发规范

     - 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.xml配置文件在同一个包下,并且名称保持一致

    ① 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映射文件

    - 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);
        }
    
    }
  • 相关阅读:
    luogu 1169 棋盘制作(单调栈/悬线)
    poj 2769 感觉♂良好 (单调栈)
    hdu 5033 buiding(单调栈)
    hdu1506 直方图中最大的矩形 单调栈入门
    有线电视网(树形dp)
    洛谷P1220 关路灯(区间dp)
    【题解】NOI2009二叉查找树 + NOIP2003加分二叉树
    【题解】AHOI2009中国象棋
    【算法】Matrix
    【题解】WC2008游览计划
  • 原文地址:https://www.cnblogs.com/Dm920/p/12044298.html
Copyright © 2011-2022 走看看