MyBatis的單表的CRUD

  • 創(chuàng)建maven項(xiàng)目叹阔,并分別添加依賴师妙,junit诗祸,mysql血久,mybatis(3.4.6)

  • 在resouces下創(chuàng)建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"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3307/mysqls?serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="LKT981016"/>
                </dataSource>
            </environment>
       </environments>
        <mappers>
            <mapper resource="com/pojo/UsersMapper.xml"/>
        </mappers>
    </configuration>
    
  • 數(shù)據(jù)庫文件 db.sql

    CREATE TABLE `user` (
      `uid` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(20) NOT NULL,
      `password` varchar(20) NOT NULL,
      `age` int(11) DEFAULT NULL,
      `addr` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`uid`),
      UNIQUE KEY `username` (`username`)
    ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1
    
  • JavaBean文件 User.java

    public class User {
        private int uid;
        private String username;
        private String password;
        private int age;
        private String addr;
    
        public int getUid() { return uid; }
        public void setUid(int uid) { this.uid = uid; }
        public String getUsername() { return username; }
        public void setUsername(String username) { this.username = username; }
        public String getPassword() { return password; }
        public void setPassword(String password) { this.password = password; }
        public int getAge() { return age; }
        public void setAge(int age) { this.age = age; }
        public String getAddr() { return addr; }
        public void setAddr(String addr) { this.addr = addr; }
    
        @Override
        public String toString() {
            final StringBuffer sb = new StringBuffer("User{");
            sb.append("uid=").append(uid);
            sb.append(", username='").append(username).append('\'');
            sb.append(", password='").append(password).append('\'');
            sb.append(", age=").append(age);
            sb.append(", addr='").append(addr).append('\'');
            sb.append('}');
            return sb.toString();
        }
    }
    
  • 在com.pojo的包下創(chuàng)建UserMapper.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">
    <mapper namespace="com.qfedu.pojo.UserMapper">
        <select id="selectUser" resultType="com.qfedu.pojo.User">
          select * from user
        </select>
        <select id="selectUserCount" resultType="int">
          select count(1) from user;
        </select>
        <select id="selectUsersByPage1" resultType="com.qfedu.pojo.User">
            select * from user limit 3
        </select>
        <select id="selectUsersByPage2" resultType="com.qfedu.pojo.User">
            select * from user limit #{pageSize}
        </select>
        <select id="selectUsersByPage3" resultType="com.qfedu.pojo.User">
            select * from user limit #{startIndex}, #{pageSize}
        </select>
        <delete id="saveUser">
            insert into user values(null, #{username}, #{password}, #{age}, #{addr});
        </delete>
        <delete id="deleteUserByUid">
            delete from user where uid = #{uid}
        </delete>
        <update id="updateUser">
            update user set username= #{username}, password=#{password}, age = #{age}, addr = #{addr} where uid = #{uid};
        </update>
    </mapper>
    
  • 測試類 TestUser.java

    public class TestUser {
        private SqlSessionFactory sf = null;
        private SqlSession session = null;
        @Before
        public void setUp(){
            try {
                sf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
                session = sf.openSession(true);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        @After
        public void tearDown(){
            if(session != null){
                session.close();
                session = null;
            }
        }
        @Test
        public void testGetAllUsers(){
            List<User> users = session.selectList("com.pojo.UserMapper.selectUser");
            for (User u : users) {
                System.out.println(u);
            }
        }
        @Test
        public void testGetAllUsersCount(){
            Integer count = session.selectOne("com.pojo.UserMapper.selectUserCount");
            System.out.println(count);
        }
        @Test
        public void testGetUsersByPage1(){
            List<User> users = session.selectList("com.pojo.UserMapper.selectUsersByPage1");
            for (User u : users) {
                System.out.println(u);
            }
        }
        @Test
        public void testGetUsersByPage2(){
            List<User> users = session.selectList("com.pojo.UserMapper.selectUsersByPage2", 9);
            for (User u : users) {
                System.out.println(u);
            }
        }
        @Test
        public void testGetUsersByPage3(){
            Map<String, Integer> map = new HashMap<>();
            map.put("startIndex", 10);
            map.put("pageSize", 5);
            List<User> users = session.selectList("com.pojo.UserMapper.selectUsersByPage3", map);
            for (User u : users) {
                System.out.println(u);
            }
        }
        @Test
        public  void testSaveUser(){
            User u = new User();
            u.setUsername("lkt");
            u.setPassword("888888");
            u.setAddr("suzhou");
            u.setAge(20);
            int result = session.insert("com.pojo.UserMapper.saveUser", u);
            System.out.println(result);
        }
    }
    
  • 注意事項(xiàng)

    • UserMapper的映射文件:

      • namespace和id在整個(gè)項(xiàng)目中突照,必須要保證唯一
      • namespace+id找到的是唯一的sql語句,標(biāo)簽可能不對應(yīng)洋魂,但是不影響執(zhí)行結(jié)果绷旗,但是還是需要規(guī)范各個(gè)標(biāo)簽
    • TestUser.java

      • 創(chuàng)建SqlSession對象的時(shí)候,SqlSessionFactory對象的openSession()方法不包含參數(shù)副砍,則使用事務(wù)手動提交衔肢,做完增刪改操作后,需要調(diào)用SqlSession對象的commit()方法完成事務(wù)的提交豁翎。如果openSession()方法包含有一個(gè)true角骤,代表自動提交生效,我們做完增刪改操作時(shí)候心剥,就完成了對應(yīng)的增刪改功能邦尊。openSession()方法默認(rèn)的提交方式為手動提交
      • 該類活用了junit的生命周期方法,每個(gè)測試方法執(zhí)行之前都會調(diào)用標(biāo)注有@Before注解的setUp()方法完成環(huán)境的準(zhǔn)備工作优烧,每個(gè)方法完成之后都自動的執(zhí)行標(biāo)注有@After注解的tearDown()方法完成資源的釋放工作
      • SqlSession是mybatis中的核心對象蝉揍,使用該對象即可完成對于所有操作的crud功能,里面有對應(yīng)的方法畦娄,selectList()又沾,查詢列表(集合)弊仪,selectOne()查詢單個(gè)對象,insert()杖刷,delete励饵,update()分別對應(yīng)增刪改功能。這三個(gè)方法的返回值均為受影響的行數(shù)
      • 每次使用完SqlSession對象之后滑燃,使用close()方法將SqlSession對象關(guān)閉役听,不建議關(guān)閉SqlSessionFactory對象
      • 關(guān)于傳遞參數(shù)
        • 傳遞單個(gè)值,sql語句里面的占位符可以任意寫
        • 多個(gè)值表窘,可以使用Map來傳值典予,map中的key要與sql語句中的占位符一致
        • 對象傳值,sql語句中的字段值與對象的屬性名一致
        • 零散值的傳遞乐严,可以使用兩種方式arg0熙参, arg1,...或者param1麦备,param2...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昭娩,隨后出現(xiàn)的幾起案子凛篙,更是在濱河造成了極大的恐慌,老刑警劉巖栏渺,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呛梆,死亡現(xiàn)場離奇詭異,居然都是意外死亡磕诊,警方通過查閱死者的電腦和手機(jī)填物,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霎终,“玉大人滞磺,你說我怎么就攤上這事±嘲” “怎么了击困?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長广凸。 經(jīng)常有香客問我阅茶,道長,這世上最難降的妖魔是什么谅海? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任脸哀,我火速辦了婚禮,結(jié)果婚禮上扭吁,老公的妹妹穿的比我還像新娘撞蜂。我一直安慰自己盲镶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布谅摄。 她就那樣靜靜地躺著徒河,像睡著了一般。 火紅的嫁衣襯著肌膚如雪送漠。 梳的紋絲不亂的頭發(fā)上顽照,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音闽寡,去河邊找鬼代兵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爷狈,可吹牛的內(nèi)容都是我干的植影。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼涎永,長吁一口氣:“原來是場噩夢啊……” “哼思币!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起羡微,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谷饿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后妈倔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體博投,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年盯蝴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毅哗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧挺,死狀恐怖虑绵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闽烙,我是刑警寧澤蒸殿,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站鸣峭,受9級特大地震影響宏所,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摊溶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一爬骤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莫换,春花似錦霞玄、人聲如沸骤铃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惰爬。三九已至,卻和暖如春惫企,著一層夾襖步出監(jiān)牢的瞬間撕瞧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工狞尔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丛版,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓偏序,卻偏偏與公主長得像页畦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子研儒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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