国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - MyBatis快速入門之環(huán)境搭建和單表映射

MyBatis快速入門之環(huán)境搭建和單表映射

2020-09-02 10:15落葉的博客 Java教程

一說(shuō)起對(duì)象關(guān)系映射框架,大家第一時(shí)間想到的肯定是Hibernate。Hibernate作為一個(gè)著名的框架,功能十分強(qiáng)大。但是由于Hibernate如此強(qiáng)大的功能,導(dǎo)致了它的缺點(diǎn)。好吧,不多說(shuō)了,具體詳情大家通過(guò)本文一起學(xué)習(xí)吧

一.MyBatis簡(jiǎn)介

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

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

二.配置環(huán)境

1.依賴引入

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

?
1
2
3
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的配置和映射文件。所有這些配置文件最好放在類路徑上,對(duì)于Gradle項(xiàng)目來(lái)說(shuō)就是src/main/resources文件夾下。我們先來(lái)編寫一個(gè)配置文件。配置文件每個(gè)部分的詳細(xì)作用請(qǐng)參見(jiàn)官方文檔,這里只簡(jiǎn)單說(shuō)明一下。

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?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>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="12345678"/>
    <property name="driver.useSSL" value="false"/>
  </properties>
  <!--系統(tǒng)設(shè)置-->
  <settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
  </settings>
  <!--指定簡(jiǎn)寫名-->
  <typeAliases>
    <package name="yitian.study.entity"/>
  </typeAliases>
  <!--配置環(huán)境,可以配置多個(gè)環(huán)境用于測(cè)試、調(diào)試和生產(chǎn)-->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <!--配置映射文件-->
  <mappers>
    <mapper resource="BaseEntityMapper.xml"/>
  </mappers>
</configuration>

3.創(chuàng)建SqlSessionFactory

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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了。這里先回過(guò)頭看看如何創(chuàng)建MyBatis映射文件。然后我們?cè)诶^續(xù)使用MyBatis。

三.單表映射

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

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

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

?
1
2
3
4
5
public class Person {
   private int id;
   private String username;
   private LocalDate birthday;
 }

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

?
1
2
3
4
5
CREATE TABLE person (
  id    INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) NOT NULL UNIQUE,
  birthday DATE
 );

2.映射文件

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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="yitian.study.dao.mapper">
   <select id="selectPerson"
       resultType="Person" parameterType="Person">
     SELECT *
     FROM Person
     WHERE id = #{id}
   </select>
   <select id="selectPersonByName"
       resultType="Person">
     SELECT *
     FROM Person
     WHERE username = #{username}
   </select>
   <insert id="insertPerson"
       useGeneratedKeys="true">
     INSERT INTO Person (username, birthday) VALUES (#{username}, #{birthday})
   </insert>
   <update id="updatePerson">
     UPDATE Person
     SET birthday = #{birthday}
     WHERE id = #{id}
   </update>
   <delete id="deletePerson">
     DELETE FROM Person
     WHERE id = #{id}
   </delete>
 </mapper>

四.使用MyBatis

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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);//自動(dòng)提交
   }
   @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í)候指定了自動(dòng)提交,這樣我們的所有更改都會(huì)立即反映到數(shù)據(jù)庫(kù)中。

五.使用映射類

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

?
1
2
3
4
5
6
7
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è)映射類。做法就是將映射文件的命名空間改為對(duì)應(yīng)的映射文件的類名。

?
1
<mapper namespace="yitian.study.mapper.PersonMapper">

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

?
1
2
3
4
5
6
7
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);

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

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

原文鏈接:http://www.cnblogs.com/wangyayun/archive/2017/03/28/6631748.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97超碰免费 | 亚洲免费婷婷 | 91免费网站| 精品国产乱码久久久久久牛牛 | 精品一区二区不卡 | 午夜视频在线观看网站 | 日韩中文字幕一区 | 亚洲在线视频 | 久久久精品一区二区 | 日韩av资源网 | www午夜 | 国产欧美日韩一级大片 | 午夜激情在线观看 | 久久只有精品 | 亚洲www啪成人一区二区 | 日本全黄裸体片 | 97av在线| 成人h动漫在线看 | 一级在线| 欧美日韩国产不卡 | 日本久久久久久 | 国产亚洲精品美女久久久久久久久久 | 国产精品视屏 | 男女激情网站 | 韩国精品一区二区三区 | 免费看黄色一级 | 国产精品美女久久久久aⅴ国产馆 | 久久精品视频免费观看 | 国产毛片区| av黄色在线看 | 9999777做爰| 国内外成人激情免费视频 | 一级特色黄大片 | 中文字幕久久伊人 | 激情中文网 | 在线一二三区 | 国产激情精品一区二区三区 | 自拍小电影 | 精品欧美乱码久久久久久 | 国产精品久久久av | 欧美成人一区二区三区片免费 |