Mybatis入门(二):以接口的方式编程

前面一章,已经搭建好了Intellij idea,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:

User user = session.selectOne("com.nextflower.Study.entity.User.selectUserByID", 1);

其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如UserDao.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程。


1、在src源码目录下建立 com.nextflower.Study.dao 这个包,并建立接口类 UserDao, 内容如下:
package com.nextflower.Study.dao;

import com.nextflower.Study.entity.User;

/**
 * Created by root on 2016/3/6.
 */
public interface UserDao {

    public User selectUserByID(int id);

}

请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应
(select id=”selectUserByID”)


2、这里我们提供一个新的User映射文件:User2.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="com.nextflower.Study.dao.UserDao">
    <select id="selectUserByID" parameterType="int" resultType="User">
      select * from `user` where id = #{id}
    </select>
</mapper>

3、测试代码如下:执行testInterface()方法即可。
package com.nextflower.TestCase.Mybatis;

import com.nextflower.Study.dao.UserDao;
import com.nextflower.Study.entity.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;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.Reader;

/**
 * 测试使用mybatis的示例代码
 * Created by root on 2016/3/6.
 * @author nextflower
 */
public class MybatisTest {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    @Before
    public void before() {
        try{
            reader    = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    @Test
    public void test() {

        SqlSession session = sqlSessionFactory.openSession();
        try {
            User user = session.selectOne("com.nextflower.Study.entity.UserDao.selectUserByID", 1);
            System.out.println(user.getUserAddress());
            System.out.println(user.getUserName());
        } finally {
            session.close();
        }

    }

    @Test
    public void  testInterface() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserDao userDao=session.getMapper(UserDao.class);
            User user = userDao.selectUserByID(1);
            System.out.println(user.getUserAddress());
            System.out.println(user.getUserName());
        } finally {
            session.close();
        }
    }

    @After
    public void after() {
    }


}

4、测试结果如下:

这里写图片描述


PS:
这种方式,要注意的一个地方就是。在User2.xml 的配置文件中,mapper namespace=”com.nextflower.Study.dao.UserDao” ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。如果不一致就会出错。


代码地址:
本文示例代码开源中国地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值