實訓-mybatis-經驗總結
阿新 • • 發佈:2018-07-05
ima img pub bject util sele example ces 表示
只要文件在有符號的src包下 ,就不必寫src 這節目錄 // 假如我將mybatis-config.xml放到comm.icss.control包下,那麽我就得 // String config = "com/icss/control/mybatis-config.xml"; (省略src) String config = "mybatis-config.xml"; //官網模板String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(config); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession openSession = sqlSessionFactory.openSession(); Object oneUser = openSession.selectOne("getUserById", 1); System.out.println(oneUser);
2. 執行xml哪個SQL語句 並先知道它的id
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession openSession = sqlSessionFactory.openSession(); Object oneUser = openSession.selectOne("getUserById", 1); // Object oneUser = openSession.selectOne("com.icss.mapping.user.getUserById", 1); 這樣就更加精準了,更唯一了,因為如果只寫"getUserById",可能還有一個XML裏的SQL id也叫這個getUserById System.out.println(oneUser);
3. XML 裏SQL的 標簽 #{} 等於JDBC的占位符 ?
//resultType->查詢後返回的結果是什麽類型 , parameterType表示查詢是傳入的參數是什麽類型, <select id="getUserById" resultType="com.icss.entity.User" parameterType="int"> select * from user where id=#{id} </select> //parameterType表示傳入占位符#{}的是User類型。 切記,#{pwd2} , #{user2} 和實體類user的成員變量名字要相同,框架會幫你自動準確填入,不然你傳的user.id,user.pwd不知填到哪個占位符裏 <update id="updateByUser" parameterType="com.icss.entity.User"> UPDATE user set user=#{user2},pwd=#{pwd2} where user=#{user2} </update> <insert id="insertByUser" parameterType="com.icss.entity.User" > insert into user values(#{id},#{user2},#{pwd2},#{status},#{role}) </insert> <delete id="deleteByid" parameterType="int"> delete from user where id =#{id} </delete>
4.查詢返回的結果是集合的 情況
<!-- 因為要傳入兩個參數,但 parameterType只能寫一個東西的,所以寫map-->
<select id="listByPage" resultMap="userlist" parameterType="map">
//註意:這個占位符#{}是有講究的,#{index}, #{pagesize} 意味著,方法調用那邊也要起這個名字,框架才能準確對應起來 。具體請看下面圖片
select * from user limit #{index},#{pagesize}
</select>
//上面查詢語句有一個id,下面集合也要有一個id,各自有名字才能對應起來 。上面的resultMap填的就是下面的集合的id 名字
//type代表集合的成員類型
<resultMap id="userlist" type="com.icss.entity.User">
// column對應的是mysql數據庫的那個列名
//property對應的是實體類User 裏的成員屬性名
<result column="id" property="id"/>
<result column="user" property="user2"/>
<result column="pwd" property="pwd2"/>
<result column="status" property="status"/>
<result column="role" property="role" />
</resultMap>
工具類
package com.icss.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SQLSessionUtil {
private static SqlSessionFactory factory=null;
// static
static Reader read=null;
static{
String config="mybatis-config.xml";
try {
read= Resources.getResourceAsReader(config);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @return
* 單例設計模式,只得到一個工廠對象
*/
private static SqlSessionFactory getSqlSessionFacory(){
if(factory==null){
factory =new SqlSessionFactoryBuilder().build(read);
}
return factory;
}
/***
* 封裝一個得到 SqlSession的對象
*
*/
public static SqlSession getSqlSession(){
return getSqlSessionFacory().openSession();
}
}
整 體原理
實訓-mybatis-經驗總結