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"/>

  • 相关阅读:
    linux常用命令
    10.8统计英文词频
    9月10号作业
    华氏温度与摄氏温度转换
    小故事
    Java的工厂模式(三)
    Javascript实现图片翻转
    Java的工厂模式(二)
    Java的工厂模式(一)
    Java新建线程的两种方式
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/7082282.html
Copyright © 2011-2022 走看看