zoukankan      html  css  js  c++  java
  • MyBatis入门程序之Mapper代理方式

      Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可,MyBatis会自动为mapper接口生成动态代理实现类。

    一、开发规范

      1、mapper接口的全限定名要和mapper映射文件的namespace的值相同

      2、mapper接口的方法名称要和mapper映射文件中的statement的id相同

      3、mapper接口的方法参数一般只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致

        (传一个参数,可以直接以键值对方式匹配参数;如果想传多个参数,statement中不能写parameterType,SQL语句使用#{0}、#{1}```等形式占位符或者接口方法中使用注解@Param("username") String username形式

      4、mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致

    二、全局配置文件通过mapper的resource属性引入mapper映射文件

    1、编写mapper接口

    package com.hjp.mapper;
    
    import com.hjp.po.User;
    
    public interface UserMapper {
    
        User findUserById(int id) throws Exception;
    
        void insertUser(User user) throws Exception;
    
    }

    2、编写mapper映射文件,注意namespace为接口的全限定名

    <?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.hjp.mapper.UserMapper">
        <select id="findUserById" parameterType="int" resultType="com.hjp.po.User">
            SELECT * FROM USER WHERE id=#{id}
        </select>
        <insert id="insertUser" parameterType="com.hjp.po.User">
            INSERT INTO USER (username,sex,birthday,address) VALUES (#{userName},#{sex},#{birthday},#{address})
        </insert>
    </mapper>

    3、将映射文件加入全局配置文件

    4、测试代码

    import com.hjp.mapper.UserMapper;
    import com.hjp.po.User;
    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 java.io.InputStream;
    import java.util.Date;
    
    public class MapperDemoTest {
    
        private SqlSessionFactory factory;
    
        @Before
        public void setUp() throws Exception {
            String resource="sqlMapConfig.xml";
            InputStream inputStream= Resources.getResourceAsStream(resource);
            factory=new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void findUserById() throws Exception {
            SqlSession session=factory.openSession();
            //创建mapper代理对象
            UserMapper userMapper=session.getMapper(UserMapper.class);
            User user=userMapper.findUserById(1);
            System.out.println(user);
            session.close();
        }
    
        @Test
        public void insertUser() throws Exception {
            SqlSession session=factory.openSession();
            UserMapper userMapper=session.getMapper(UserMapper.class);
            User user=new User();
            user.setUserName("流水年华");
            user.setSex("1");
            user.setBirthday(new Date());
            user.setAddress("bj");
            userMapper.insertUser(user);
            session.commit();
            session.close();
        }
    
    }

     三、全局配置属性设置

    1、properties,如设置数据库配置信息

    db.properties文件内容如下

    在全局配置文件中使用如下

     

     2、typeAliases定义别名

    1)单个别名定义,全局配置文件sqlMapConfig.xml添加全局属性如下

    在mapper映射文件UserMapper.xml中可以修改根据ID查询用户配置如下

    2)批量别名定义,全局配置文件如下

    3、mapper四种映射器配置方式(注意在IDEA Maven项目下,3)和4)配置有问题,因为IDEA Maven项目默认不会把src下除Java外的文件打包进class文件中,详见···

    1)使用相对路径,如前面例子中一样

    <mapper resource="mapper/UserMapper.xml"></mapper>

    2)使用绝对路径(不推荐)

    <mapper url="file:///F:IDEAWebmybatisdemosrcmain
    esourcesmapperUserMapper.xml"></mapper>

    3)使用mapper接口全限定名,但这要求映射文件名称要和接口名称相同,并且和接口在同一个包下 

    <mapper class="com.hjp.mapper.UserMapper"></mapper>

    4)注册指定包下所有映射文件,但这要求映射文件名称要和接口名称相同,并且和接口在同一个包下(推荐),如下

    <package name="com.hjp.mapper"/>

  • 相关阅读:
    开源项目
    [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像
    Android 布局 中实现适应屏幕大小及组件滚动
    EF 错误记录
    EasyUI 加载时需要显示和隐藏 panel(面板)内容破版问题
    IE 报表缩放后页面破版
    VS 2017 引入nuget 问题
    SSRS 报表显示页面 asp net session丢失或者找不到 asp net session has expired or could not be found()
    log4net 配置
    网站
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/7082282.html
Copyright © 2011-2022 走看看