第一个文件(POJO):User.java

public class User {
    private Long id;
    private String name;
    private String sex;
    private int age;

    public User() {
    }

    public User(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    //省略了getter,setter
}

第二个文件UserMapper.java

public interface UserMapper {
    public void save(User user);
    public User getUser(Long id);
    }

第三个文件(配置文件)mybatis-config.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="cacheEnabled" value="false"/>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="defaultExecutorType" value="REUSE"/>
    </settings>
    <typeAliases>
        <typeAlias type="mybatis.User" alias="User"></typeAlias>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

第四个文件(映射文件)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">
<mapper namespace="mybatis.UserMapper">
    <insert id="save" parameterType="User">
        insert into "user"(name,age,sex) values(#{name},#{age},#{sex})
    </insert>
    <select id="getUser" parameterType="java.lang.Long">
        SELECT * FROM "user" where id=#{id}
    </select>

</mapper>

第五个文件(工具类)MybatisUtil.java

public class MyBatisUtil {
    private final static SqlSessionFactory sqlSessionFactory;
    static {
        String resource = "mybatis-config.xml";
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }
    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

第六个文件(测试类)TestMapper.java

public class TestMapper {
    static SqlSessionFactory sqlSessionFactory= null;
    static {
        sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
    }
    @Test
    public void testSave(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = new User("Tom","男",13);
            userMapper.save(user);
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
    }
    @Test
    public void getUser(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = userMapper.getUser(1L);
            System.out.println("name:"+user.getName());
        } finally {
            sqlSession.close();
        }
    }
}

note (如果以上代码你直接copy过去的话,以下的问题似乎并不会出现….emmm就当做个记录吧):

1 配置文件和映射文件的文件头别搞混了,不然会报出莫名其妙的错误——Cause: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 36; 必须为元素类型 “mapper” 声明属性 “namespace”。

2 配置文件里别把mapper忘了,不然就会报错——Type interface com.UserMapper is not known to the MapperRegistry(这个错误一般智商不会犯#捂脸#)