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();
    }
}

结果

这里写图片描述

原文地址:https://www.cnblogs.com/A-yes/p/9894183.html