Mapper三種形式、工具類以及簡單的增刪改查

不想起名的筱禕發表於2020-09-28

Mapper三種形式

第一種 : sqlSession執行對應語句,就是我上篇文章測試的那種,所以下面就從第二種開始註解.
第二種 : 使用註解(基本不用)
第三種 : 利用介面代理(常用)

第二種 : 使用註解(基本不用)

1 註解方式不需要User.xml
2 需要再對應的介面上新增對應的註解語句
3 mybatis-config.xml中新增對映配置
在這裡插入圖片描述
呼叫
在這裡插入圖片描述

第三種 : 利用介面代理(常用)

1 需要User.xml
2 介面中不需要新增對應的註解
3 mybatis-config.xml中新增對映配置
在這裡插入圖片描述
在這裡插入圖片描述
User.xml
在這裡插入圖片描述
Namespace的值要和介面全名一致
Id的值要和介面中的方法名一致

呼叫
在這裡插入圖片描述

工具類

在這裡插入圖片描述
以上程式碼中,紅框部分我們每次都需要重複編寫,mybatis-config.xml在整個生命週期只需要載入一次就行
而SqlSessionFactory也只需要建立一個
所以 我們把這些封裝成方法
public class MyBatisUtil {
private MyBatisUtil() {

}
private static SqlSessionFactory sessionFactory = null;
static {
	String resource = "mybatis-config.xml";
	// 讀取總配置檔案
	InputStream inputStream = null;
	try {
		inputStream = Resources.getResourceAsStream(resource);
		// 獲取session工廠
		sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		try {
			if (inputStream != null) {
				inputStream.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

public static SqlSession getSession() {
	return sessionFactory.openSession();
}

public static void closeSession(SqlSession session) {
	if (session != null) {
		session.close();
	}
}

}

引入工具類之後 呼叫處就輕鬆了

@Test
public void testAddUser() {
SqlSession session = MyBatisUtil.getSession();
User user = new User();
user.setUsername(“test”);
user.setPassword(“test”);
user.setNickname(“平民”);
user.setType(0);
session.getMapper(IUserDao.class).add(user);
session.commit();
MyBatisUtil.closeSession(session);
}

總結 :
使用工具類,能夠降低我們dao的程式碼量,
並且也能更好的優化程式碼,比如關閉資源,和建立資源(能夠保證某些資源在生命週期中只會被建立一次)
工具類,使用方便,複用價值高

基礎的增刪改查

User.xml


insert into t_user
(username,password,nickname,type) values
(#{username},#{password},#{nickname},#{type})


delete from t_user where id =
#{id}


update t_user set password =
#{password} , nickname=#{nickname} ,type=#{type} where id = #{id}


select * from
t_user where id = #{id}


<!–
SQL語句中,不能出現 < > 用< > >=

		resultType : 返回值型別,並且能夠自動注入,前提是 資料庫查詢的列 必須和成員變數一致,如果不一致 可以使用別名的方式一致,或者手動對映
		
		resultMap : 返回值型別,但是資料需要手動注入,一般查詢列和成員變數不一致時  使用resultMap手動對映,尤其是多表查詢
		
		parameterType : 引數型別
		
		parameterMap : 和resultMap類似
 -->

UserDao實現類

新增

@Override
public void add(User user) {
SqlSession session = null;
try {
session = MyBatisUtil.getSession();
session.insert(“User.add”, user);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
MyBatisUtil.closeSession(session);
}

}

刪除

@Override
public void delete(int id) {
	SqlSession session = null;
	try {
		session = MyBatisUtil.getSession();
		session.delete("User.delete", id);
		session.commit();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		MyBatisUtil.closeSession(session);
	}
}

更新

@Override
public void update(User user) {
	SqlSession session = null;
	try {
		session = MyBatisUtil.getSession();
		session.update("User.update", user);
		session.commit();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		MyBatisUtil.closeSession(session);
	}
}

查詢

@Override
public User load(int id) {
	SqlSession session = null;
	User user = null;
	try {
		session = MyBatisUtil.getSession();
		user = session.selectOne("User.load", id);
		session.commit();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		MyBatisUtil.closeSession(session);
	}
	return user;

}

相關文章