• MyBatis学习总结[2]-接口式调用


    创建接口

    package me.dao;
    
    import java.util.List;
    import me.model.User;
    
    public interface UserDao {
        /**
         *注意,
         *1.mapper.xml文件中namespace要设置为接口的全名,即包名+接口名
         *2.select标签的Id要与接口方法名一直
         */
        List<User> selectById(@Param("id")int id);
    }

    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">
     <!-- namespace与映射的接口相对应 -->
    <mapper namespace="me.dao.UserDao">
        <!-- id与接口中的方法名相对应 -->
      <select id="selectById" parameterType="int" resultType="User">
        select * from users where id = #{id}
      </select>
    </mapper>
    

    配置文件

    <!-- 在配置文件的最下面添加 -->
      <mappers>
      <!--
      mapper的属性有3个
          1.resource,指定类路径下的mapper.xml文件
          2.url,完全限定资源定位符
          3.class,指定接口
                  如果指定了接口,就只能用接口的注解方式执行查询了,不再
                  映射mapper文件中的配置
    
      mappers还有一个标签
          <package name=""/>
          用来指定一个包下的所有接口,效果为同时指定多个class
    
    *对于每个元素有且只能有一种注册方式,即上述几种之一*
      -->
        <!-- 注册Mapper -->
        <mapper resource="me/mapper/UserMapper.xml"/>
      </mappers>

    Service类中调用方法

    package me.service;
    
    import java.io.InputStream;
    import java.util.List;
    
    import me.dao.UserDao;
    import me.model.Car;
    import me.model.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;
    
    public class UserService {
        String resource = "conf.xml";
        InputStream is = UserService.class.getClassLoader().getResourceAsStream(
                resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(is);
        SqlSession session = sqlSessionFactory.openSession();
    
    
        public void selectUserById(int id) {
            //利用session的getMapper方法获得UserDao的代理类(com.sun.proxy.$Proxy5)
            UserDao udao=session.getMapper(UserDao.class);
            List<User> list= udao.selectById(id);
            for (User user : list) {
                System.out.println(user.getName()+" "+user.getCar());
            }
        }
        public void close(){
            session.close();
        }
    }

    接口的注解方式实现

    当查询语句较简单的时候推荐

    package me.dao;
    
    import java.util.List;
    import org.apache.ibatis.annotations.Select;
    import me.model.User;
    
    public interface UserDao {
        /**
         *使用是只需要,再接口内的方法名上添加注解并把sql语句写到value里即可
         *使用注解的方法的调用方式和配置了xml的方法一致
         *注意,
         *mapper里使用resource的时候也可以使用注解,但是
         *在xml配置了语句的方法就不可再配置注解
         */
        @Select("select * from users where id = #{id}")
        List<User> selectById(@Param("id")int id);
    }
    

    测试类

    package me.service;
    
    import static org.junit.Assert.*;
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class UserServiceTest {
        static UserService s=null;
        @BeforeClass
        public static void before(){
            s=new UserService();
        }
        @Test
        public void test() {
            s.selectUserById(2);
        }
        @AfterClass
        public static void after(){
            s.close();
        }
    }

    结果

    这里写图片描述

  • 相关阅读:
    盒子高度是百分比的时候里面的内容垂直居中
    echarts -- 饼图引导线的设置
    列出你所知道可以改变⻚⾯布局的属性
    vue 组件传值(父传子,子传父,兄弟组件之间传值)
    动态设置缩放区域(数据不累计叠加)
    pytest之mark标签注册及用例匹配规则修改
    Django(1)--安装与文件解析
    visual studio code django
    day01 红蓝球
    day02 基本数据类型
  • 原文地址:https://www.cnblogs.com/A-yes/p/9894183.html
Copyright © 2020-2023  润新知