先看代码
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的烦恼