Mybatis接口注解实现映射

前言

上一篇文章介绍了xml文件映射SQL语句,即User user = (User) sqlSession.selectOne("cn.ddnd.www.Entity.User.getUser", "xue8@qq.com"),但是这种方式过于繁杂,所以我们本篇介绍使用注解SQL语句返回值的接口(如:IUser.class),即可实现xml配置文件的功能。

新建工程

将工程新建成和上篇的一样Mybatis实现数据库操作,即把上篇的内容搬过来。

修改成用注解方式

  1. 可以删除 cn.ddnd.www.Entity包下的User.xml,去掉Mybatis-config.xml的如下代码。因为此时User.xml已经没用了。

    1
    2
    3
    <mappers>
    <mapper resource="cn/ddnd/www/Entity/User.xml"></mapper>
    </mappers>
  2. 新建cn.ddnd.www.Dao包,并且建立IUser接口和方法。
    IUser.java:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    package cn.ddnd.www.Dao;

    import cn.ddnd.www.Entity.User;
    import org.apache.ibatis.annotations.Select;

    public interface IUser {
    @Select("select * from user where email = #{email}")
    public User getUser(String email);
    }
  3. 修改测试类,即增加了sqlSessionFactory.getConfiguration().addMapper(IUser.class);,作用是注册SQL语句映射的接口,去掉User user = (User) sqlSession.selectOne("cn.ddnd.www.Entity.User.getUser", "xue8@qq.com");,增加IUser IUser = (IUser) sqlSession.getMapper(IUser.class); User user = IUser.getUser("xue8@qq.com");即可。
    text.java:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import cn.ddnd.www.Dao.IUser;
    import cn.ddnd.www.Entity.User;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    import org.apache.ibatis.io.Resources;

    import java.io.Reader;
    import java.io.IOException;


    public class test {
    private static Reader reader;
    private static SqlSessionFactory sqlSessionFactory;

    static{
    try{
    reader = Resources.getResourceAsReader("Mybatis-config.xml");
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    // 注册SQL语句映射的接口
    sqlSessionFactory.getConfiguration().addMapper(IUser.class);
    }catch (IOException e){
    e.printStackTrace();
    }
    }
    @Test
    public void a() throws IOException {
    SqlSession sqlSession = sqlSessionFactory.openSession();

    try{
    // User user = (User) sqlSession.selectOne("cn.ddnd.www.Entity.User.getUser", "xue8@qq.com");

    // IUser.class只是个接口 Mybatis面向接口编程 只写接口 不用写接口的实现类 Mybatis帮我们去写实现类了!
    IUser IUser = (IUser) sqlSession.getMapper(IUser.class);
    User user = IUser.getUser("xue8@qq.com");
    System.out.println("用户的邮箱是:" + user.getEmail() + ",用户的名称是:" + user.getName() + ",用户的密码是:" + user.getPassword());
    }finally {
    sqlSession.close();
    }
    }
    }

项目结构

运行结果

运行测试类