MyBatis創建項目(2)-動態代理

MyBatis創建項目(2)是基於MyBatis創建項目(1)的改進版:

1、刪除Dao接口的實現類;

--->

2、修改SQL映射文件的namespace屬性值爲接口的全限定名;

<?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">
  
<!-- namespace就相當於java中的package -->
<mapper namespace="com.wolfhome.mybatis.hrz.dao.UserDao">
	<insert id="saveAddUser" parameterType="com.wolfhome.mybatis.hrz.domain.User">
		insert into user (username,password) values(#{username},#{password})
	</insert>
	<delete id="deleteUserById" parameterType="_int">
		delete from user where id=#{id}
	</delete>
</mapper>


3、確保接口中的方法名與SQL映射文件中的SQL映射id完全相同;確保接口中方法傳遞的參數類型和SQL映射的sql標籤中的屬性中所配置的參數和返回值類型要一模一樣; 

4、Test類中通過SqlSession對象的getMapper(Class clazz)方法創建接口的動態代理對象,參數爲接口的Class;

package com.wolfhome.mybatis.hrz.test;

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 com.wolfhome.mybatis.hrz.dao.UserDao;
import com.wolfhome.mybatis.hrz.domain.User;

/**
 * <p>ClassName:Test</p>
 * @功能描述 測試類
 * <p>Company:wolfhome</p>
 * @author Hrzhi
 * @date 2017年11月10日 下午5:42:48
 */
public class Test {

	public static void main(String[] args) throws IOException {

		// 用流的形式加載mybatis主配置文件
		String resource = "resources/mybatis/mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 獲得SqlSessionFactory對象
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 獲得SqlSession對象,與數據庫會話的對象
		SqlSession session = sqlSessionFactory.openSession();
		// 利用反射機制創建dao實現類,以多態的形式返回給dao接口
		UserDao userDao = session.getMapper(UserDao.class);

		// 添加用戶
		User user = new User();
		user.setUsername("李四");
		user.setPassword("123456");

		try {
			int result = userDao.saveAddUser(user);
			session.commit();
			System.out.println("添加成功" + result + "個新用戶");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			session.close();
		}
	}

}



5、將動態代理對象賦值給接口變量,並調用接口中的方法;

6、MyBatis動態SQL:點擊“MyBatis動態SQL”查看,其實就是用了<where>、<if>等標籤的sql語句。


總結:
1、實現代碼簡潔,少寫了dao層的實現類;

2、dao層接口名和SQL映射文件名必須一樣;

3、SQL映射文件中命名空間namespace是接口的“包名.類名”;

4、SQL映射文件中id值必須和接口中的方法名一樣;

5、接口中方法所傳遞的參數必須和SQL映射文件中的參數類型一致。



MyBatis開發步驟總結:

1、導包:mybatis.jar相關jar和數據庫驅動包mysql-connector-java.jar;
2、創建實體類;
3、定義Dao接口和接口實現類;
4、安裝MyBatis:在src目錄下創建MyBatis主配置文件;在Dao接口的同級別目錄下創建SQL映射文件;
5、配置主配置文件的運行環境,即數據庫連接屬性配置;
6、在主配置文件中加入SQL映射文件;
7、編寫Dao方法,調用SQL映射文件;
8、創建測試類,調用dao方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章