1. 程式人生 > >MyBatis的環境搭建以及簡單案例

MyBatis的環境搭建以及簡單案例

MyBatis的環境搭建以及簡單案例

MyBatis框架簡介

MyBatis的前身是iBatis,是一個開源的資料持久層(Dao)框架,在實體類和SQL語句之間建立對映關係,是一種半自動化的ORM實現。

MyBatis內部封裝了通過JDBC訪問資料庫的操作,支援普通的SQL查詢、儲存過程和高階對映,幾乎消除了所有的JDBC程式碼和引數的手工設定以及結果集的檢索。

資料持久化(概念)

	資料持久化是將記憶體中的資料模型轉換為儲存模型,已將儲存模型轉換為記憶體中的資料模型的統稱。
	例如:檔案的儲存、資料的讀取等都是資料持久化操作。資料模型可以是任何資料結構或物件模型,儲存模型可以是關係模型、XML、二進位制流等。

ORM(資料持久化技術)

ORM(Object/RelationaI Mapping)及物件/關係對映,是一種資料持久化技術。它在物件模型和關係型資料庫之間建立起對應關係,並且提供了一種機制,通過JavaBean物件去操作資料庫表中的資料。

MyBatis環境搭建

	這裡我們使用mybatis-3.2.2版本、MyEclipse、mysql資料庫演示
  1. 下載需要的jar檔案

    	jar包以及原始碼包地址:http://github.com/mybatis/mybatis-3/releases	
    
  2. 部署jar檔案

    	將mybatis-3.2.2.jar 檔案以及jdbc驅動檔案複製到lib目錄中,並新增到Libraries中。
    
  3. 建立MyBatis核心配置檔案mybatis-config.xml

    	PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
    	"http://mybatis.org/dtd/mybatis-3-config.dtd">
    	<configuration>
    		<!-- 引入 database.propertiesMySql檔案 -->
    		<properties resource="database.properties"> <!-- 先讀取內部配置,外部會覆蓋內部配置,resource中是引入外部的database檔案,也可以不設定,直接在內部設定 -->
    			<property name="driver" value="com.mysql.jdbc.Driver"/>
    			<property name="url" value="jdbc:mysql://laptop-4p6qt61b:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8"/>
    			<property name="username" value="root"/>
    			<property name="password" value="123456"/>
    		</properties>
    		<settings>
    			<!-- 配置mybatis的log實現為LOG4J -->
    			<setting name="logImpl" value="LOG4J"></setting>
    			<!-- 設定resultMap的自動對映級別為Full(自動匹配所有) -->
    			<setting name="autoMappingBehavior" value="FULL"/>
    		</settings>
    		<!-- 配置類型別名(pojo) -->
    		<typeAliases>
    			<package name="cn.smbms.pojo"/>		<!-- 2.通過pojo包來自動掃描類名生成類型別名 -->
    		</typeAliases>
    		<!-- 配置mybatis多套執行環境 -->
    		<environments default="development">
    			<environment id="development">
    				<!-- 配置事物管理,採用JDBC的事物管理  MANAGED(託管)-->
    				<transactionManager type="JDBC"></transactionManager>
    				<!-- POOLED:mybatis自帶的資料來源,JNDI:基於tomcat的資料來源  UNPOOLED:-->
    				<dataSource type="POOLED">
    					<property name="driver" value="${driver}"/>
    					<property name="url" value="${url}"/>
    					<property name="username" value="${username}"/>
    					<property name="password" value="${password}"/>
    				</dataSource>
    			</environment>
    		</environments>
    		<!-- 將mapper對映檔案加入到配置檔案中 -->
    		<mappers>
    			<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>	<!-- 方式1:使用類資源路徑獲取資源 -->
    		</mappers>
    	</configuration>
    
    
  4. 建立持久化類POJO

持久化類是指其例項狀態需要被MyBatis持久化到資料庫中的類。在應用的設計中,持久化類通常對應需求中的業務實體。MyBatis一般採用POJO程式設計模型來實現持久化類,與POJO類配合完成持久化工作是MyBatis最常用的工作模式。

	javascrip package cn.smbms.pojo;
	import java.util.Date;
	import java.util.List;
	
	public class User {
		
		/*欄位*/
		private Integer id ;			//id
		private String userCode;		//使用者編碼
		private String userName;		//使用者名稱稱
		private String userPassword;	//使用者密碼
		private Integer gender;			//性別
		private Date birthday;			//出生日期
		private String phone;			//電話
		private String address;			//地址
		private Integer userRole;		//使用者角色
		private String userRoleName;	//使用者角色名稱
		private Integer createdBy;		//建立者
		private Date creationDate;		//建立時間
		private Integer modifyBy;		//更新者
		private Date modifyDate;	//更新時間
		private Role role;		//使用者角色
		private List<Address> addressList;	//使用者地址列表
   }
  1. 建立SQL對映檔案與User介面類(為了方便暫時把它們放在dao.user包下)

SQL對映檔案一般對應於相應的POJO,所以一般都是採用POJO的名稱+Mapper的規則來進行命名。

SQL對映檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.smbms.dao.user.UserMapper">
	<!-- 根據使用者名稱稱查詢使用者列表 -->
	<select id="getUserListByUserName" resultType="User" parameterType="string">
		select * from smbms_user where userName like CONCAT('%',#{userName},'%')
	</select>	
</mapper>

User介面類

  	package cn.smbms.dao.user;
	import java.util.List;
	import java.util.Map;
	import org.apache.ibatis.annotations.Param;
	import cn.smbms.pojo.User;
	/**
	 * 繫結對映語句的介面(User對映器)
	 * @author 一支菸
	 *
	 */
	public interface UserMapper {
		/**
		 * 根據使用者名稱稱查詢使用者列表(方法名名稱與對映檔案的select中id一致)
		 * @param userName
		 * @return
		 */
		public List<User> getUserListByUserName(String userName);
	}
  1. 建立測試類(可以使用JUnit或者main方法)

    public class UserMapperTest {
    private Logger logger = Logger.getLogger(UserMapperTest.class);
    @Test
    public void test() {
    	String resource = "mybatis-config.xml";
    	SqlSession sqlSession = null;
    	List<User> userList = null;
    	try {
    		//1.讀取全域性配置檔案:mybatis-config.xml
    		//獲取mybatis-config.xml檔案的輸入流  
    		InputStream is = Resources.getResourceAsStream(resource);
    		//2.建立SqlSessionFactory物件,此物件可以完成對配置檔案的讀取 
    		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    		//3.建立SqlSession物件,此物件的作用是呼叫mapper檔案進行資料操作  
    		sqlSession = factory.openSession();
    		//4.通過getMapper方法獲取UserMapper介面物件 (官方推薦使用方式)
    		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    		//5.呼叫UserMapper中的方法
    		userList = mapper.getUserListByUserName("張");
    	} catch (Exception e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}finally{
    		//4.關閉SqlSession物件
    		if(null != sqlSession){
    			sqlSession.close();
    		}
    	}
    	if(null != userList){
    		for (User user:userList) {
    			//使用Log4j輸出也可使用System輸出
    			logger.debug("testGetUserList userCode:"+user.getUserCode()+
    					" and userName:"+user.getUserName()+
    					" and userRole:"+user.getUserRole()+
    					" and userRoleName:"+user.getUserRoleName()+
    				/*	" and age:"+user.getAge()+*/
    					" and address:"+user.getAddress());
    		}
    	}
    }
    }