首頁>技術>

例項準備工作

為了便於理解,例項採用eclipse的普通工程加mysql作為講解。

其中資料庫用使用者作為演示的例項,在mysql資料庫中建立使用者表,其使用者結構及資料內容如下:

/*使用者表 */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '使用者編號',  `username` varchar(20) DEFAULT NULL COMMENT '使用者名稱',  `password` varchar(20) DEFAULT NULL COMMENT '密碼',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;insert  into `user`(`id`,`username`,`password`) values (1,'demo','123456');

在eclipse中建立一個java工程。目錄結構如下:

com.example.mybatis.config:用於存放mybatis的配置檔案

com.example.mybatis.entries:用於存放對應的使用者表對應的實體類

com.example.mybatis.mappers:用於存放mytabtis對應對映檔案

test:用於存放對應的測試用例

透過github下載mybatis,把裡面的mybatis-x.x.x.jar、log4j以及對應資料庫型別的驅動放到lib目錄下作為專案環境的依賴jar。

建立及配置MyBatis的資源配置檔案

在com.example.mybatis.config建立一個名為mybatis-config.xml的檔案。檔案內容如下:

編寫配置檔案的測試用例,測試配置資訊是否正確。測試用例程式碼如下:

package com.example.mybatis.config;import static org.junit.Assert.*;import java.io.IOException;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;public class MybatisConfigTest {	@Test	public void test() throws IOException {		String resource = "com/example/mybatis/config/mybatis-config.xml";		InputStream inputStream = Resources.getResourceAsStream(resource);		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);		assertNotNull(sqlSessionFactory);	}}
建立使用者的實體類

在com.example.mybatis.entries目錄下建立使用者實體類檔案:User.java。

package com.example.mybatis.entries;/** * 使用者實體類 * @author root * */public class User {	private Long id;		private String username;		private String password;	public Long getId() {		return id;	}	public void setId(Long id) {		this.id = id;	}	public String getUsername() {		return username;	}	public void setUsername(String username) {		this.username = username;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	@Override	public String toString() {		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";	}}
建立針對使用者表實現的對映介面類

在com.example.mybatis.mappers目錄下建立一個介面類UserMapper.java的檔案。

package com.example.mybatis.mappers;import com.example.mybatis.entries.User;/** * User 介面類 * */public interface UserMapper {	 /**	  * 根據使用者編號獲取使用者詳情	  * @param id	  * @return	  */	public User selectById(Long id);}

在com.example.mybatis.mappers目錄下建立一個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="com.example.mybatis.mappers.UserMapper">  <select id="selectById" resultType="com.example.mybatis.entries.User">    select * from user where id = #{id}  </select></mapper>

注意:namespace一定要是上面介面類的路徑,其中select的屬性id一定是介面中方法的名稱。

把建立的user.xml新增到mybatis配置檔案的對映器中,即加入<mappers></mappers>中。

測試用例程式碼:

package com.example.mybatis;import static org.junit.Assert.*;import java.io.IOException;import java.io.InputStream;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.Test;import com.example.mybatis.entries.User;import com.example.mybatis.mappers.UserMapper;public class GetUserInfoByIdInterfaceTest {	@Test	public void test() {		String resource = "com/example/mybatis/config/mybatis-config.xml";		SqlSession sqlSession=null;		try {			InputStream inputStream = Resources.getResourceAsStream(resource);			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);			sqlSession=sqlSessionFactory.openSession();			UserMapper  userMapper=sqlSession.getMapper(UserMapper.class);			User user= userMapper.selectById(1l);			System.out.println(user.toString());			assertNotNull(user);		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}finally {			sqlSession.close();		}	}}

測試結果:

測試結果資料

總結

mybatis之所以配置介面以後就能執行,因為在生產mapper的時候生成了一個代理,然後透過mapper呼叫介面方法的時候直接被MapperProxy的invoke截斷了,直接去呼叫了mybatis為我們制定的實現。

29
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 面試經典:linux 的 5 種 I/O 模型詳解