Mybatis代理

先看代码

java代码部分

package com.test;

import java.io.IOException;
import java.io.InputStream;
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 com.test.model.User;
import com.test.model.UserDao;

public class MybatisTest {

    public static void main(String[] args) throws IOException {

        //读取配置文件
        InputStream configFile = Resources.getResourceAsStream("mybatis.xml");

        //根据配置文件新建一个工作方法
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configFile);

        //利用工程方法启动一个session
        SqlSession session = factory.openSession(true);

        //传统方式,调用查询方法
//        String ids = "1";
//        User user = session.selectOne("user.getUserById",ids);

    
     //使用代理方式 UserDao userDao = session.getMapper(UserDao.class); User user = userDao.getUserById("1"); System.out.println(user); session.close();

Mapper.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="com.test.model.UserDao">

    <!-- 这里的id是唯一标识 -->
    <!-- 这里的parameterType的值是入参类型,多参数传递需要使用其它方式,请看多参数传递的文章 -->
    <!-- 这里的resultType是返回值,这里的意思就是放回一个对应的对象 -->
    <!-- 这里的#{}里面的值名称需要和方法中的第一个参数名一致 -->
    <select id="getUserById" parameterType="java.lang.String" resultType="com.test.model.User">
        select * from users where id=#{id}
    </select>
</mapper>

UserDao

package com.test.model;

public interface UserDao {
    User getUserById(String id);
}

代码分析:

session.getMapper(UserDao.class)就是执行了对应的com.test.model.UserDao的类,并执行了里面对应Key的代码,省去了在代码当中需要写入key的烦恼

猜你喜欢

转载自www.cnblogs.com/oscar1987121/p/10745811.html