1. 程式人生 > >Java框架學習_Mybatis(二)(查)根據id查詢使用者資訊、抽取工具類,根據使用者名稱模糊查詢

Java框架學習_Mybatis(二)(查)根據id查詢使用者資訊、抽取工具類,根據使用者名稱模糊查詢

原始碼:MybatisDemo增刪改查


1、Mybatis根據id查詢使用者資訊:
前面已經配置過了,現在來做一個測試類

  1. 修改一下user.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">

<!-- 名稱空間,用於隔離sql語句,後續會有重要作用 -->
<mapper namespace
="user">
<!-- id:sql語句的唯一標識 parameterType:入參的資料型別 resultType:返回結果的資料型別 #{}:佔位符,相當於?,裡面的東西隨便寫 ${value}:基本資料型別必須是value --> <select id="getUserById" parameterType="int" resultType="cn.nupt.pojo.User"> select * from user where id = #{id2} <!--或者: select * from user where id = ${value} -->
</select> </mapper>

然後在src下面建一個測試包測試類,這裡用junit做單元測試

package cn.nupt.mybatis.test;

import java.io.IOException;
import java.io.InputStream;

import javax.jws.soap.SOAPBinding.Use;

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 cn.nupt.pojo.User; public class MybatisTest { @Test public void testMybatis() throws IOException { // 建立SqlSessionFactoryBuilder物件 SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder(); // 建立核心配置檔案的輸入流 InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 通過輸入流建立SqlSessionFactory物件 SqlSessionFactory sqlSessionFactory = ssfb.build(stream); // 建立SqlSession物件 SqlSession session = sqlSessionFactory.openSession(); // 執行查詢,第一個引數就是user.xml裡面sql語句的id,最好加上user字首,第二個引數就是佔位符裡面的數了 //這裡就相當於了 select * from user where id = 1 User user = session.selectOne("user.getUserById", 1); System.out.println(user); session.close(); } } 輸出:User [id=1, username=王五, sex=2, birthday=null, address=null]

2、抽取工具類,根據使用者名稱模糊查詢:

就像之前抽取JDBC語句一樣,在這裡也來把通用的步驟抽取一下,主要是抽取SqlSessionFactory物件

新建Utils包,然後建立SqlSessionFactoryUtils:

package cn.nupt.mybatis.utils;

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;

public class SqlSessionFactoryUtils {
	//靜態建立
	private static SqlSessionFactory sqlSessionFactory;
	//靜態程式碼塊,只初始化一次
	static {
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		InputStream stream;
		try {
			stream = Resources.getResourceAsStream("SqlMapConfig.xml");
			sqlSessionFactory = ssfb.build(stream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//增加一個get方法
	public SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}

}

為什麼只抽取到sqlSessionFactory,不抽取到sqlSession?

Mybatis文件裡面是這麼說的:Mybatis文件(中英)

在這裡插入圖片描述

大概意思就是說每個執行緒都應該只擁有自己的sqlSession例項,因為sqlSession是執行緒不安全的,所以它最好作用在請求域或者方法域裡面,不要將sqlSession的引用放在靜態域裡面(就是static修飾的),甚至於不要放在類的方法屬性裡面…最好還需要在一個方法塊(就是{ })裡面把sqlSession關掉


然後我們繼續在user.xml裡面新增sql語句:

<?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">

<!-- 名稱空間,用於隔離sql語句,後續會有重要作用 -->
<mapper namespace="user">


<!-- 
id:sql語句的唯一標識
parameterType:入參的資料型別
resultType:返回結果的資料型別
#{}:佔位符,相當於?,裡面的東西隨便寫
${value}:普通資料型別必須是value
 -->

<select id="getUserById" parameterType="int" resultType="cn.nupt.pojo.User">

	<!-- select * from user where id = #{id2} -->
	<!-- 或者: --> select * from user where id = ${value}

</select>


<select id="getUserByName" parameterType="string" resultType="cn.nupt.pojo.User">

	
	<!-- select * from user where name like '%張%' -->
	<!-- 和下面的一樣都可以,只不過輸入完整的:“%張%”
	select * from user where username like #{id2} -->
	select * from user where username like '%${value}%'

</select>

</mapper>

然後用已經抽取的工具類在測試方法裡面輸入:

package cn.nupt.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.jws.soap.SOAPBinding.Use;

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 cn.nupt.mybatis.utils.SqlSessionFactoryUtils;
import cn.nupt.pojo.User;

public class MybatisTest {
	@Test
	public void testMybatis() throws IOException {

		SqlSessionFactory sessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		SqlSession session = sessionFactory.openSession();

		List<User> list = session.selectList("user.getUserByName", "張");
		for (User user : list) {
			System.out.println(user);
		}
		session.close();

	}

}