前面一章,已經搭建好了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 和 接口一致。如果不一致就會出錯。
代碼地址:
本文示例代碼開源中國地址