1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      MyBatis快速入門之環(huán)境搭建和單表映射

      一.MyBatis簡介

      成都創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元鄂倫春做網(wǎng)站,已為上家服務(wù),為鄂倫春各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

          一說起對象關(guān)系映射框架,大家第一時(shí)間想到的肯定是Hibernate。Hibernate作為一個(gè)著名的框架,功能十分強(qiáng)大。我們只需要配置好實(shí)體類和數(shù)據(jù)表之間的關(guān)系,Hibernate就會自動幫我們完成生成并執(zhí)行SQL語句,映射結(jié)果集這樣的工作。但是也正是由于Hibernate如此強(qiáng)大的功能,導(dǎo)致了它的缺點(diǎn):一是非常笨重,啟動Hibernate的SessionFactory非常耗時(shí),開銷巨大;二是配置復(fù)雜,學(xué)習(xí)成本較高,系統(tǒng)調(diào)優(yōu)也不容易;三是自定義查詢功能較弱,查詢結(jié)果如果不是映射的實(shí)體類,查詢起來就比較麻煩。因此另一個(gè)ORM框架MyBatis,越來越流行。

          前面說到的幾個(gè)Hibernate的缺點(diǎn),反過來正好就是MyBatis的優(yōu)點(diǎn):一是非常輕量,系統(tǒng)開銷小;二是配置簡單,易于學(xué)習(xí),官方文檔我直覺上感覺比Log4j2的文檔還少;三正好就是MyBatis的特點(diǎn),映射查詢結(jié)果非常靈活。另外MyBatis還有一個(gè)優(yōu)點(diǎn)就是自帶中文文檔,可能有些地方感覺不太通順,但是完全足夠我們學(xué)習(xí)和使用了。

      二.配置環(huán)境

      1.依賴引入

          添加MyBatis最簡單的辦法就是使用Maven或Gradle這樣的構(gòu)建工具。在這里我使用Gradle。在項(xiàng)目中添加如下幾行即可。如果確定不使用新的Java 8 時(shí)間API,那么第二行的依賴還可以去掉。這里我用的數(shù)據(jù)庫是MySQL,因此還需要添加MySQL的JDBC驅(qū)動。

      compile group: 'org.mybatis', name: 'mybatis', version: '3.4.2'
        compile group: 'org.mybatis', name: 'mybatis-typehandlers-jsr310', version: '1.0.2'
        compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'

      2.配置文件

          然后我們需要編寫MyBatis的配置和映射文件。所有這些配置文件最好放在類路徑上,對于Gradle項(xiàng)目來說就是src/main/resources文件夾下。我們先來編寫一個(gè)配置文件。配置文件每個(gè)部分的詳細(xì)作用請參見官方文檔,這里只簡單說明一下。

              屬性部分。在這里定義MyBatis需要的屬性,可以用在下面的多個(gè)地方。另外屬性也可以從外部properties文件中導(dǎo)入。

              系統(tǒng)設(shè)置。在這里指定MyBatis的全局配置。詳細(xì)的配置參加文檔。

              簡寫名。在映射文件中需要指定Java實(shí)體類的全名,我們可以在這里指定簡寫名簡化配置。

              環(huán)境。在這里我們要指定數(shù)據(jù)庫連接、事務(wù)管理器等配置。還可以指定測試環(huán)境、生產(chǎn)環(huán)境等多個(gè)環(huán)境對應(yīng)不同的數(shù)據(jù)庫配置。

              映射文件。在這里指定映射文件,或者也可以添加使用注解配置的類。

        <?xml version="1.0" encoding="UTF-8" ?>
        
        
          
          
            
            
            
            
            
          
          
          
            
            
          
          
          
            
          
          
          
            
              
              
                
                
                
                
              
            
          
          
          
            
          
        

      3.創(chuàng)建SqlSessionFactory

          有了配置文件,我們就可以開始使用MyBatis了。首先要做的事情是創(chuàng)建MyBatis的SqlSessionFactory,它和Hibernate的SessionFactory類似,是主要的工廠類,一個(gè)應(yīng)用程序中只需要?jiǎng)?chuàng)建一個(gè)即可。
          下面是一個(gè)工具類,用雙檢鎖簡單的實(shí)現(xiàn)了一個(gè)線程安全的工具類。核心代碼在最內(nèi)層的if判斷中。由于配置文件在類路徑上,所以我們只需要指定文件名即可。這里用到了MyBatis提供的Resources工具類,創(chuàng)建一個(gè)輸入流,然后交給SqlSessionFactoryBuilder來創(chuàng)建一個(gè)SqlSessionFactory。

       public abstract class MyBatisUtils {
          private static volatile SqlSessionFactory sqlSessionFactory;
          public static final String MyBatisConfigLocation = "configuration.xml";
          public static SqlSessionFactory getSqlSessionFactory() throws IOException {
            if (sqlSessionFactory == null) {
              synchronized (MyBatisUtils.class) {
                if (sqlSessionFactory == null) {
                  InputStream input = Resources.getResourceAsStream(MyBatisConfigLocation);
                  sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
                  input.close();
                }
              }
            }
            return sqlSessionFactory;
          }
        }

          創(chuàng)建好SqlSessionFactory之后,我們就可以開始使用MyBatis了。這里先回過頭看看如何創(chuàng)建MyBatis映射文件。然后我們在繼續(xù)使用MyBatis。

      三.單表映射

      1.數(shù)據(jù)表和實(shí)體類

          在配置文件最后的mapper部分定義的就是映射文件。映射文件也是我們需要重點(diǎn)學(xué)習(xí)的地方。在映射文件中我們需要定義各種SQL語句,并建立它們和Java實(shí)體類之間的關(guān)系。這里我們使用最簡單的單表映射:數(shù)據(jù)表和實(shí)體類之間屬性名相同,一一對應(yīng)。

          首先先來添加一個(gè)實(shí)體類。

       public class Person {
          private int id;
          private String username;
          private LocalDate birthday;
        }

          對應(yīng)的數(shù)據(jù)庫表如下。

       CREATE TABLE person (
         id    INT AUTO_INCREMENT PRIMARY KEY,
         username VARCHAR(255) NOT NULL UNIQUE,
         birthday DATE
        );

      2.映射文件

          然后我們來編寫映射文件。映射文件包含5條SQL語句,分別是增刪查改以及按名稱查找。每一條語句都需要一個(gè)標(biāo)識符,將會在后面再代碼中用到。如果是查詢語句還需要resultType,指定返回類型。MyBatis會將數(shù)據(jù)表列明和這里指定的類型屬性按名稱自動映射起來。如果需要在語句中傳入?yún)?shù),可以使用 parameterType屬性,指定Java實(shí)體類的全名或簡寫,然后就可以在SQL語句中使用#{}來訪問參數(shù)的屬性了。如果是簡單的映射,那么parameterType屬性還可以省略,MyBatis會自動從傳入的Java對象中獲取相應(yīng)的屬性。對于某些數(shù)據(jù)庫(例如MySQL),還可以在插入的時(shí)候指定useGeneratedKeys="true",讓數(shù)據(jù)庫自動生成主鍵。

       <?xml version="1.0" encoding="UTF-8" ?>
        
        
          
          
          
            INSERT INTO Person (username, birthday) VALUES (#{username}, #{birthday})
          
          
            UPDATE Person
            SET birthday = #{birthday}
            WHERE id = #{id}
          
          
            DELETE FROM Person
            WHERE id = #{id}
          
        

      四.使用MyBatis

          以上這些都配置好之后,我們就可以來使用MyBatis了。這里我們使用一個(gè)單元測試來查看MyBatis的功能。在創(chuàng)建SQLSessionFactory之后,我們需要獲取MyBatis最核心的對象SqlSession,所有操作都需要SqlSession來進(jìn)行。另外它是非線程安全的對象,不能放在類的靜態(tài)字段上,最好也不要作為實(shí)例字段。我們要在需要的時(shí)候創(chuàng)建它,不用的時(shí)候及時(shí)釋放。
          常用的方法有增刪查改這幾個(gè)方法。這些方法的第一個(gè)參數(shù)是前面我們在映射文件中定義的語句ID,第二個(gè)參數(shù)是要傳入的參數(shù)。對于查詢來說有selectOne和selectList方法,它們的區(qū)別主要在于返回個(gè)數(shù),如果確定只返回一個(gè)對象就使用selectOne方法。

       import static org.assertj.core.api.Assertions.*;
        public class MyBatisTest {
          private static SqlSessionFactory sqlSessionFactory;
          private SqlSession sqlSession;
          @BeforeClass
          public static void init() throws IOException {
            sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
          }
          @Before
          public void before() {
            sqlSession = sqlSessionFactory.openSession(true);//自動提交
          }
          @After
          public void after() {
            sqlSession.close();
          }
          @Test
          public void testMyBatisUtils() {
            assertThat(sqlSessionFactory).isNotNull();
          }
          @Test
          public void testInsert() {
            Person p = new Person(0, "yitian", LocalDate.of(1993, 5, 6));
            sqlSession.insert("insertPerson", p);
            Person s = sqlSession.selectOne("selectPersonByName", p.getUsername());
            assertThat(s).isNotNull();
            System.out.println(s);
            sqlSession.delete("deletePerson", s);
          }
          @Test
          public void testUpdate() {
            Person p = new Person(1, "leo", LocalDate.of(1993, 5, 6));
            sqlSession.insert("insertPerson", p);
            p = sqlSession.selectOne("selectPersonByName", p.getUsername());
            LocalDate b = LocalDate.of(1987, 7, 8);
            p.setBirthday(b);
            sqlSession.update("updatePerson", p);
            Person s = sqlSession.selectOne("selectPersonByName", p.getUsername());
            assertThat(s.getBirthday()).isEqualTo(b);
            System.out.println(s);
            sqlSession.delete("deletePerson", s);
          }
        }

          另外默認(rèn)情況下MyBatis的事務(wù)管理是開啟的,意味著我們必須顯式使用commit()方法才能提交事務(wù)。這里在打開SqlSession的時(shí)候指定了自動提交,這樣我們的所有更改都會立即反映到數(shù)據(jù)庫中。

      五.使用映射類

          在前面的例子中,使用的都是字符串來指定要使用的查詢。但是這樣做非常不方便,字符串容易發(fā)生錯(cuò)誤,而且無法獲得IDE的智能補(bǔ)全。所以MyBatis提供了另一種方式來執(zhí)行SQL語句,這就是使用映射類。
          映射類其實(shí)就是一個(gè)簡單的接口。該接口中的方法和映射文件中定義的語句一一對應(yīng)。接口方法的名稱必須和語句id完全相同,接口方法的返回值和參數(shù)和相應(yīng)的語句相對應(yīng)。

      public interface PersonMapper {
          Person selectPerson(int id);
          Person selectPersonByName(String name);
          void insertPerson(Person person);
          void updatePerson(Person person);
          void deletePerson(Person person);
        }

             僅僅增加映射類還不夠,我們需要修改映射文件,以便讓MyBatis能找到這個(gè)映射類。做法就是將映射文件的命名空間改為對應(yīng)的映射文件的類名。

          映射類定義和配置好之后,我們就可以使用了。使用方法很簡單,在SqlSession上調(diào)用getMapper方法,并傳入要獲取的Mapper類即可。

       PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        Person p = new Person(0, "yitian", LocalDate.of(1993, 5, 6));
        mapper.insertPerson(p);
        Person s = mapper.selectPersonByName(p.getUsername());
        assertThat(s).isNotNull();
        System.out.println(s);
        mapper.deletePerson(p);

          有了映射對象,我們就可以以類型安全的方式來存取對象了,同時(shí)還可以獲得IDE的補(bǔ)全功能。

      以上所述是小編給大家介紹的MyBatis快速入門之環(huán)境搭建和單表映射,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!


      名稱欄目:MyBatis快速入門之環(huán)境搭建和單表映射
      轉(zhuǎn)載源于:http://www.ef60e0e.cn/article/jicpgg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        马龙县| 海南省| 甘南县| 灵宝市| 九江县| 武鸣县| 辉南县| 莱西市| 博客| 勃利县| 红桥区| 洛隆县| 通化市| 梓潼县| 大荔县| 阿城市| 沂源县| 吴桥县| 桂阳县| 丹棱县| 茌平县| 康乐县| 专栏| 建水县| 梁河县| 临江市| 开阳县| 延川县| 闸北区| 舟曲县| 商都县| 江川县| 宝坻区| 城口县| 呼玛县| 三亚市| 大悟县| 安平县| 民丰县| 乌拉特前旗| 晴隆县|