Eclipse下MyBatis簡明教程

Eclipse下MyBatis簡明教程

工程搭建

  • 創(chuàng)建Java工程

  • 導(dǎo)入jar包

    把目錄(mybatis-3.2.7/lib)下的文件導(dǎo)入到lib目錄下

      asm-3.3.1.jar
      cglib-2.2.2.jar
      commons-logging-1.1.1.jar
      javassist-3.17.1-GA.jar
      log4j-1.2.17.jar
      log4j-api-2.0-rc1.jar
      log4j-core-2.0-rc1.jar
      mybatis-3.2.7.jar                       -->mybatis的核心包
      mysql-connector-java-5.1.7-bin.jar      -->數(shù)據(jù)庫驅(qū)動包
      slf4j-api-1.7.5.jar
      slf4j-log4j12-1.7.5.jar
    

    build path -> add build path

  • 配置日志文件
    創(chuàng)建config文件夾用于存放配置文件

    在config文件夾中創(chuàng)建log4j.properties文件,輸入如下內(nèi)容

      log4j.rootLogger=DEBUG, stdout
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    
  • 創(chuàng)建po類
    創(chuàng)建user類

      public class User {
          private Integer id;
          private String username;
          private Date birthday;
          private String sex;
          private String address;
          /**
           *  get/set也需要寫,這里不展示了
           **/
      }
    
  • 配置數(shù)據(jù)
    在config文件夾中創(chuàng)建db.properties文件得运,輸入如下內(nèi)容

      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
      jdbc.username=root
      jdbc.password=123456
    
  • 設(shè)置sql映射文件
    在config文件夾中創(chuàng)建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">
          <mapper namespace="test">
    
          <select id="findUserById" parameterType="java.lang.Integer"                 resultType="User類的包名.User">
              select * from user where id=#{id}
          </select>
      </mapper>
    
  • 配置SqlMapConfig.xml
    在config文件夾中創(chuàng)建SqlMapConfig.xml文件乙漓,輸入如下

      <?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>
          <properties resource="db.properties"/>
          <environments default="development">
              <environment id="development">
              <!-- 使用jdbc事務(wù)管理-->
              <transactionManager type="JDBC" />
              <!-- 數(shù)據(jù)庫連接池-->
              <dataSource type="POOLED">
                  <property name="driver" value="${jdbc.driver}" />
                  <property name="url" value="${jdbc.url}" />
                  <property name="username" value="${jdbc.username}" />
                  <property name="password" value="${jdbc.password}" />
              </dataSource>
              </environment>
          </environments>
          
          <mappers>
              <mapper resource="config/User.xml"/>
          </mappers>
      </configuration>
    
  • 測試
    在測試方法中輸入如下內(nèi)容

      String resource = "SqlMapConfig.xml";
      //通過流將核心配置文件讀取進(jìn)來
      InputStream inputStream = Resources.getResourceAsStream(resource);
      //通過核心配置文件輸入流來創(chuàng)建會話工廠
      SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
      //通過工廠創(chuàng)建會話
      SqlSession openSession = factory.openSession();
      //第一個參數(shù):所調(diào)用的sql語句= namespace+.+sql的ID
      User user = openSession.selectOne("test.findUserById", 1);
      System.out.println(user);
      openSession.close();
    

對數(shù)據(jù)庫的增刪改查

1.根據(jù)id查找用戶

在User.xml文件中的

 <mapper namespace="test"> </mapper>

節(jié)點(diǎn)內(nèi)添加:

<select id="findUserById" parameterType="int" resultType="User所在的包.User">
    select * from user where id=#{id}
</select>

注:以下皆是在此節(jié)點(diǎn)下添加

2.根據(jù)用戶名查找用戶

<select id="findUserByUsername" parameterType="java.lang.String" resultType="User所在的包.User">
    select * from user where username like '%${value}%'
</select>

3.添加用戶1

<insert id="insertUser1" parameterType="User所在的包.User">
    insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>

4.添加用戶2

<insert id="insertUser2" parameterType="User所在的包.User">
    <selectKey keyProperty="id" order="AFTER" resultType="int">
        select LAST_INSERT_ID()
    </selectKey>
    insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>

5.修改用戶

<update id="updateUser" parameterType="User所在的包.User">
    update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>

6.刪除用戶

<delete id="deleteUser" parameterType="int">
    delete from user where id=#{id}
</delete>

測試

    private SqlSessionFactory sqlSessionFactory;

@Before
public void createSqlSessionFactory() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

@Test
public void test(){
    SqlSession sqlSession = null;
    sqlSession = sqlSessionFactory.openSession();
    //1.根據(jù)id查找用戶
    //selectUserById(sqlSession);
    //2.根據(jù)用戶名查找用戶
    //selectUserByUsername(sqlSession);
    //3.添加用戶1
    //insertUser1(sqlSession);
    //4.添加用戶2
    //insertUser2(sqlSession);
    //5.修改用戶
    //updateUser(sqlSession);
    //6.刪除用戶
    //deleteUser(sqlSession);
}
//1.根據(jù)id查找用戶
public void selectUserById(SqlSession sqlSession){
    User user = sqlSession.selectOne("test.findUserById",10);
    System.out.println(user);
    sqlSession.close();
}
//2.根據(jù)用戶名查找用戶
public void selectUserByUsername(SqlSession sqlSession){
    List<User> users = sqlSession.selectList("test.findUserByUsername","小明");
    for (User user : users) {
        System.out.println(user);
    }
    sqlSession.close();
}
//3.添加用戶1
public void insertUser1(SqlSession sqlSession){
    User user = new User();
    user.setUsername("美娜");
    user.setSex("2");
    user.setAddress("beijing");
    sqlSession.insert("test.insertUser1",user);
    sqlSession.commit();
    sqlSession.close();
}
//4.添加用戶2
public void insertUser2(SqlSession sqlSession){
    User user = new User();
    user.setUsername("小楠");
    user.setSex("w");
    user.setAddress("beijing");
    sqlSession.insert("test.insertUser2",user);
    sqlSession.commit();
    sqlSession.close();
}
//5.修改用戶
public void updateUser(SqlSession sqlSession){
    User user = new User();
    user.setUsername("美娜");
    user.setSex("w");
    user.setAddress("beijing");
    user.setId(25);
    sqlSession.update("test.updateUser", user);
    sqlSession.commit();
    sqlSession.close();
}
//6.修改用戶
public void deleteUser(SqlSession sqlSession){
    sqlSession.update("test.deleteUser", 25);
    sqlSession.commit();
    sqlSession.close();
}

Mapper動態(tài)代理

接口文件

  1. Mapper接口方法名和Mapper.xml中定義的statement的id相同

  2. Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的statement的parameterType的類型相同

  3. Mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的statement的resultType的類型相同

     public interface UserMapper {
         public User findUserById(Integer id);
         public List<User> findUserByUsername(String userName);
     }
    

映射文件

  1. 接口的名稱和映射文件名稱除擴(kuò)展名外要完全相同

  2. 接口和映射文件要放在同一個目錄下

  3. namespace的值為UserMapper接口路徑

     <?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="UserMapper所在的包.UserMapper">
    
         <!-- 1.通過id查找用戶 -->
         <select id="findUserById" parameterType="int" resultType="User所在的包.User">
             select * from user where id=#{id}
         </select>
         
         <!-- 2.根據(jù)用戶名查找用戶 -->
         <select id="findUserByUsername" parameterType="java.lang.String" resultType="User所在的包.User">
             select * from user where username like '%${value}%'
         </select>
     </mapper>
    

加載映射文件

  1. 單個加載

     <mapper class="UserMapper所在的包.UserMapper"/>
    
  2. 批量加載

    1. 接口的名稱和映射文件名稱除擴(kuò)展名外要完全相同
    2. 接口和映射文件要放在同一個目錄下
    
    <package name="接口所在的包名"/>

測試

private SqlSessionFactory sqlSessionFactory;

@Before
public void createSqlSessionFactory() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

@Test
public void test() throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    // 1.根據(jù)id查找用戶
    // selectUserById(userMapper);
    // 2.根據(jù)用戶名查找用戶
    // selectUserByUsername(userMapper);
}

// 1.根據(jù)id查找用戶
public void selectUserById(UserMapper userMapper) {
    User user = userMapper.findUserById(1);
    System.out.println(user);
}

// 2.根據(jù)用戶名查找用戶
public void selectUserByUsername(UserMapper userMapper) {
    List<User> users = userMapper.findUserByUsername("小明");
    for (User user : users) {
        System.out.println(user);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市释移,隨后出現(xiàn)的幾起案子叭披,更是在濱河造成了極大的恐慌,老刑警劉巖玩讳,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩蜘,死亡現(xiàn)場離奇詭異,居然都是意外死亡熏纯,警方通過查閱死者的電腦和手機(jī)同诫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來樟澜,“玉大人误窖,你說我怎么就攤上這事≈确。” “怎么了霹俺?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長毒费。 經(jīng)常有香客問我丙唧,道長,這世上最難降的妖魔是什么觅玻? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任艇棕,我火速辦了婚禮,結(jié)果婚禮上串塑,老公的妹妹穿的比我還像新娘沼琉。我一直安慰自己,他們只是感情好桩匪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布打瘪。 她就那樣靜靜地躺著,像睡著了一般傻昙。 火紅的嫁衣襯著肌膚如雪闺骚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天妆档,我揣著相機(jī)與錄音僻爽,去河邊找鬼。 笑死贾惦,一個胖子當(dāng)著我的面吹牛胸梆,可吹牛的內(nèi)容都是我干的敦捧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼碰镜,長吁一口氣:“原來是場噩夢啊……” “哼兢卵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绪颖,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤秽荤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柠横,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窃款,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年牍氛,在試婚紗的時候發(fā)現(xiàn)自己被綠了雁乡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡糜俗,死狀恐怖踱稍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悠抹,我是刑警寧澤珠月,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站楔敌,受9級特大地震影響啤挎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卵凑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一庆聘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勺卢,春花似錦伙判、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甫煞,卻和暖如春菇曲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抚吠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工常潮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楷力。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓喊式,卻偏偏與公主長得像孵户,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子垃帅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

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