Ibatis3中基於接口,class對象調用的例子

[文章出處]文章出處

IbatisConfiguration.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> 
<environments default="development"> 
<environment id="development"> 
<transactionManager type="JDBC" /> 
<dataSource type="POOLED"> 
<property name="driver" value="com.mysql.jdbc.Driver" /> 
<property name="url" value="jdbc:mysql://localhost:3306/ibatis" /> 
<property name="username" value="root" /> 
<property name="password" value="" /> 
</dataSource> 
</environment> 
</environments> 
<mappers> 
<mapper resource="pojo/Account.xml" /> 
</mappers> 
</configuration> 

Account.java 

package pojo; 

public class Account { 
private int id; 
private String username; 

public int getId() { 
return id; 


public void setId(int id) { 
this.id = id; 


public String getUsername() { 
return username; 


public void setUsername(String username) { 
this.username = username; 




Account.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="liyixing"> 
<select id="getAccount" parameterType="string" resultType="pojo.Account"> 
select * from Account where username = #{username} 
</select> 
</mapper> 

test.java 

package test; 

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

import org.apache.ibatis.io.Resources; 
import org.apache.ibatis.session.SqlSessionFactory; 
import org.apache.ibatis.session.SqlSessionFactoryBuilder; 

import pojo.Account; 

public class Test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
try { 
Reader reader = Resources 
.getResourceAsReader("test/IbatisConfiguration.xml"); 
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder() 
.build(reader); 

Account account = (Account) sqlMapper.openSession().selectOne( 
"liyixing.getAccount", "liyixing"); 

System.out.println("id: " + account.getId()); 
System.out.println("name: " + account.getUsername()); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 





基於接口,class調用 
上面例子中進行修改,首先添加dao類 

package dao; 

import pojo.Account; 

public interface AccountDao { 
public Account getAccount(String name); 


修改映射文件 
<?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="dao.AccountDao"> 
<select id="getAccount" parameterType="string" resultType="pojo.Account"> 
select * from Account where username = #{username} 
</select> 
</mapper> 
可以看到,首先要改mapper的namespace值,該值和dao接口的包名完全相同。其次是看接口中的方法名,方法名必須在map文件中,存在相同的id才行,否則會報錯。這種方式可以將dao接口的實現轉移到配置文件中。 

修改test類 
package test; 

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

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 dao.AccountDao; 

import pojo.Account; 

public class Test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
try { 
Reader reader = Resources 
.getResourceAsReader("test/IbatisConfiguration.xml"); 
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder() 
.build(reader); 
SqlSession session = sqlMapper.openSession(); 
AccountDao accountDao = session.getMapper(AccountDao.class); 
Account account = accountDao.getAccount("liyixing"); 

System.out.println("id: " + account.getId()); 
System.out.println("name: " + account.getUsername()); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 



這裏通過AccountDao accountDao = session.getMapper(AccountDao.class);方式獲取dao接口的實現。這個實現是ibatis幫助創建的。我們只需要生成對應的配置文件即可。 

Account account = accountDao.getAccount("liyixing"); 
通過調用dao接口的方法,進行數據操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章