搭建Mybatis+Oracle項目以及簡單的增刪改查語法

1.項目相關(guān)路徑

圖片.png

2.Mybatis的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
<environments default="development"> 

<environment id="development">  
        <transactionManager type="jdbc"></transactionManager>  
        <dataSource type="pooled">  
          <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>  
          <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"></property>  
          <property name="username" value="scott"></property>  
          <property name="password" value="123"></property>    
        </dataSource>  
     </environment>  

</environments> 

<mappers> 
<mapper resource="com/mapping/UserMapping.xml"/> 
</mappers> 
</configuration>

3.Mybatis的工具類

package com.util;

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;

public class Util {  

    private static SqlSessionFactory sqlSessionFactory = null;  

    /** 
     * 初始化Session工廠 
     * @throws IOException 
     */  
    private static void initialFactory() throws IOException {  
        String resource = "Mybatis-config.xml";  
        InputStream inputStream = Resources.getResourceAsStream(resource);  
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
    }  

    /** 
     * 獲取Session 
     * @return 
     */  
    public static SqlSession getSession() {  
        if(sqlSessionFactory == null) {  
            try {  
                initialFactory();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  

        return  sqlSessionFactory.openSession();  
    }  

}  

4.創(chuàng)建實體類以及對應(yīng)的Mapping.xml文件

package com.model;

public class Users { 
    private Integer id; 
    private String name; 
    private int age; 
    public Integer getId() 
    { return id; } 
    public void setId(Integer id) 
    { this.id = id; } 
    public String getName() 
    { return name; } 
    public void setName(String name) 
    { this.name = name; } 
    public int getAge() 
    { return age; } 
    public void setAge(int age)
    { this.age = age; } 
    @Override 
    public String toString() 
    { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
<?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"> 
<mapper namespace="com.mapping.UserMapping"> 
<!-- 1.查詢 -->
<select id="getUser" resultType="com.model.Users"> 
select * from Users
</select> 

<!-- 2.插入 -->
<insert id="insertUser" parameterType="com.model.Users" useGeneratedKeys="true">
insert into Users (id,name,age) values (#{id},#{name},#{age})
</insert>
<!--在Oracle的版本中,有幾點(diǎn)需要注意的:

1.SQL中沒有VALUES赚抡;

2.<foreach>標(biāo)簽中的(selece ..... from dual)蠢甲;

3.<foreach>標(biāo)簽中的separator的屬性為"UNION ALL"掷匠,將查詢合并結(jié)果集滥崩。  -->

<!-- 3.批量插入 list-->
<insert id="insertUserList" parameterType="java.util.List">
insert into Users (id,name,age)
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT
#{item.id} id,
#{item.name} name,
#{item.age} age
FROM dual
</foreach>
</insert>

<!-- 4.批量插入 map-->
<insert id="insertUserMap" parameterType="java.util.Map">
insert into Users (id,name,age)
<foreach collection="map" item="item" index="index" separator="UNION ALL">
SELECT
#{item.id} id,
#{item.name} name,
#{item.age} age
FROM dual
</foreach>
</insert>

<!-- 5.批量插入 List<Map<String,Object>>-->
<insert id="insertUserMapList" parameterType="java.util.List">
insert into Users (id,name,age)
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT
#{item.id} id,
#{item.name} name,
#{item.age} age
FROM dual
</foreach>
</insert>

<!--6.返回值類型是 List<Map<String,Object>>類型的-->
<select id="ListMapData" resultType="java.util.HashMap" >
select u.id id,u.name name from Users u
</select>

<!-- 7.查詢-->
<select id="getUserById" parameterType="int" resultType="com.model.Users">
select * from Users where id=#{id}
</select>

<!-- 8.刪除 -->
<delete id="deleteUserById" parameterType="int">
delete from Users where id=#{id}
</delete>

<!-- 9.批量刪除 -->
<delete id="deleteUser" parameterType="java.util.List" >
delete from Users where id in (
<foreach collection="list" item="item" index="index" separator="UNION ALL">
select 
#{item.id} 
from dual
</foreach>
)
</delete>

<!-- 10.更新-->
<update id="updateUserById" parameterType="com.model.Users">
update Users set name=#{name} where id=#{id}
</update>

</mapper>

5.測試類

package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.After;
import org.junit.Before;
import org.junit.Test;
import com.model.Users;
import com.util.Util;

public class TestMybatis{

      private SqlSession session = null;  
        @Before  
        public void before() {  
            session = Util.getSession();  
        }  

        @After  
        public void after() {  
            session.commit();  
            session.close();  
        } 
    //1.查詢(數(shù)字對應(yīng)Mapping.xml的數(shù)字方法)
       @SuppressWarnings("unchecked")
       @Test  
        public  void testSelectUser() throws IOException { 
         List<Users> userList = session.selectList("com.mapping.UserMapping.getUser");
         for(Users each : userList) {  
            System.out.println("each->" + each);  
        }  
    }

      //2.插入
        @Test  
        public void testInsert() {  
            Users user = new Users(); 
            user.setId(200);
            user.setName("路飛");  
            user.setAge(23);  
            session.insert("com.mapping.UserMapping.insertUser" , user);  
        } 
     //7.根據(jù)id查詢數(shù)據(jù)
        @Test  
        public void testSelectUserById() throws IOException { 

            Users user = (Users) session.selectOne("com.mapping.UserMapping.getUserById",1);
            System.out.println("each->" + user.toString());  

        }

       //8.根據(jù)id刪除數(shù)據(jù)
        @Test  
        public void testDeleteUserById() throws IOException { 
              session.delete("com.mapping.UserMapping.deleteUserById",1);
              System.out.println("刪除成功!");  
        }

      // 10.更新數(shù)據(jù)
        @Test  
        public void testUpdateUserById() throws IOException { 
            Users user = (Users) session.selectOne("com.mapping.UserMapping.getUserById",1);
            user.setName("11111111");
            session.update("com.mapping.UserMapping.updateUserById",user);
            System.out.println("更新成功讹语!");  
        }
        //3.批量插入list
        @Test  
        public void testInsertUserList() throws IOException { 
            Users user = new Users(); 
            user.setId(100);
            user.setName("路飛");  
            user.setAge(23);  
            Users user1 = new Users(); 
            user1.setId(101);
            user1.setName("路飛");  
            user1.setAge(23);  
            List<Users> userList = new ArrayList<Users>();
            userList.add(user);
            userList.add(user1);
            session.insert("com.mapping.UserMapping.insertUserList" , userList);  
            System.out.println("插入成功钙皮!");  
        }

        //4.批量插入map
        @Test  
        public void testInsertUserMap() throws IOException { 
            Users user = new Users(); 
            user.setId(106);
            user.setName("路飛");  
            user.setAge(23);  
            Users user1 = new Users(); 
            user1.setId(104);
            user1.setName("路飛");  
            user1.setAge(23);  
            List<Users> list =new ArrayList<Users>();
            list.add(user1);
            list.add(user);
            Map<String,List<Users>> map = new HashMap<String,List<Users>>();  
            map.put("map",list);//map存放的key值要與mapper.xml文件中的<foreach>的collection名稱一致
            session.insert("com.mapping.UserMapping.insertUserMap" , map);  
            System.out.println("插入成功!");  
        }

      //  5.批量插入List<Map<String,Object>>數(shù)據(jù)
        @Test  
        public void testInsertUserListMap() throws IOException { 
            List<Map<String,Object>> list =new ArrayList<Map<String,Object>>();
            Map<String,Object> map = new HashMap<String,Object>(); 
            map.put("id",23);
            map.put("name", "ui0");
            map.put("age", 21);
            list.add(map);
            session.insert("com.mapping.UserMapping.insertUserMapList" , list);  
            System.out.println("插入成功顽决!");  
        }

        //6.返回值類型為List<Map<String,Object>>
            @Test  
            public void testSelectUserListData() throws IOException { 
            List<Map<String,Object>> list = session.selectList("com.mapping.UserMapping.ListMapData");
            for (int i=0;i<list.size();i++) {
                System.out.println(list.get(i).toString());

            }
            }

//9.批量刪除
            @Test      
            public void testDeleteUserByList() throws IOException { 
//              List<Integer> userList =new ArrayList<Integer>();
//              userList.add(23);
//              userList.add(24);
                List<Users> userList = new ArrayList<Users>();
                Users user = new Users(); 
                user.setId(1);
                Users user2 = new Users(); 
                user2.setId(2);
                userList.add(user2);
                userList.add(user);
                session.delete("com.mapping.UserMapping.deleteUser",userList);
                System.out.println("刪除成功短条!");  
            }
}

foreach知識總結(jié)

foreach的主要用在構(gòu)建in條件中,它可以在SQL語句中進(jìn)行迭代一個集合才菠。

foreach元素的屬性主要有 item茸时,index,collection赋访,open可都,separator,close蚓耽。

item表示集合中每一個元素進(jìn)行迭代時的別名渠牲,index指定一個名字,用于表示在迭代過程中步悠,每次迭代到的位置签杈,open表示該語句以什么開始,separator表示在每次進(jìn)行迭代之間以什么符號作為分隔符鼎兽,close表示以什么結(jié)束答姥,在使用foreach的時候最關(guān)鍵的也是最容易出錯的就是collection屬性铣除,該屬性是必須指定的,但是在不同情況 下踢涌,該屬性的值是不一樣的,主要有一下3種情況:

1.如果傳入的是單參數(shù)且參數(shù)類型是一個List的時候序宦,collection屬性值為list

2.如果傳入的是單參數(shù)且參數(shù)類型是一個array數(shù)組的時候睁壁,collection的屬性值為array

3.如果傳入的參數(shù)是多個的時候,我們就需要把它們封裝成一個Map了互捌,當(dāng)然單參數(shù)也可以封裝成map

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潘明,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秕噪,更是在濱河造成了極大的恐慌钳降,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腌巾,死亡現(xiàn)場離奇詭異遂填,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)澈蝙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門吓坚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灯荧,你說我怎么就攤上這事礁击。” “怎么了逗载?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵哆窿,是天一觀的道長。 經(jīng)常有香客問我厉斟,道長挚躯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任擦秽,我火速辦了婚禮秧均,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘号涯。我一直安慰自己目胡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布链快。 她就那樣靜靜地躺著誉己,像睡著了一般。 火紅的嫁衣襯著肌膚如雪域蜗。 梳的紋絲不亂的頭發(fā)上巨双,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天噪猾,我揣著相機(jī)與錄音,去河邊找鬼筑累。 笑死袱蜡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慢宗。 我是一名探鬼主播坪蚁,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镜沽!你這毒婦竟也來了敏晤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤缅茉,失蹤者是張志新(化名)和其女友劉穎嘴脾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬墩,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡译打,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扶平。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片结澄。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡猜扮,死狀恐怖齿桃,靈堂內(nèi)的尸體忽然破棺而出短纵,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布梗脾,位于F島的核電站瑞妇,受9級特大地震影響自赔,放射性物質(zhì)發(fā)生泄漏润脸。R本人自食惡果不足惜爆价,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一等限、第九天 我趴在偏房一處隱蔽的房頂上張望埂软。 院中可真熱鬧炫七,春花似錦吟策、人聲如沸诅福。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姿染。三九已至盾戴,卻和暖如春橄仆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工铣猩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峦椰。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓滔金,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忿族。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容