01-MyBatis環境配置

MyBatis環境配置

MyBatis是一款優秀的持久層框架,她是半自動的化的ORM(Object Relationship Mapping)框架。

1.準備工具

  • jdk 13.0.2
  • maven 3.6.3
  • MyBatis 3.5.4
  • junit 4.13
  • logback 1.2.3
  • MySQL-connector-java 8.0.20
  • slf4j 1.7.25

2.創建一個空的maven項目

  • 可以使用IDE創建,比如IDEA或者Eclipse之類的;
  • 也可以使用命令行創建
mvn archetype:generate -DgroupId=com.kestiny -DartifactId=mybatis -Dversion=0.1.0

3.導入MyBatis依賴包

MyBatis相關依賴包主要是MySQL驅動,都可在maven倉庫中查找到;

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.20</version>
    <scope>runtime</scope>
</dependency>

4.編寫MyBatis核心配置文件

MyBatis的配置和使用都可參見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>
    <properties resource="application.porperties"/>

    <typeAliases>
        <package name="com.kestiny.mybatis.entities"/>
    </typeAliases>

    <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="mapper/PersonMapper.xml"/>
        <mapper resource="mapper/SchoolMapper.xml"/>
    </mappers>
</configuration>

注意:

  1. MyBatis的xml配置文件標籤是有順序的,順序和官方定位的不符時,是無法正確的使用的,當前版本時的順序爲:properties=>settings=>typeAliases=>typeHandlers=>objectFactory=>objectWrapperFactory=>reflectorFactory=>plugins=>environments=>databaseIdProvider=>mappers
  2. 變量的引用需要使用**${}**,變量的配置文件需要在properties resource標籤中指定,當然也可以使用代碼的方式讀取;
  3. environment中可以配置多個環境,但是可以生效的只有一個,需要在default中指定;
  4. 數據源類型默認爲POOLED,目前一共有三種內置數據源類型:UNPOOLED、POOLED和JNDI;

5.準備代碼和PersonMapper.xml文件

準備代碼,參見mybatis模塊

編寫PersonMapper.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.kestiny.mybatis.mapper.PersonMapper">
    <resultMap id="BaseResultMap" type="Person">
        <id column="nid" jdbcType="INTEGER" property="id"/>
    </resultMap>
    <select id="selectAll" resultMap="BaseResultMap">
        select * from person
    </select>
</mapper>

6.執行測試

@Test
public void testPerson() {
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = build.openSession();
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        List<Person> personList = mapper.selectAll();
        logger.info("查找數據:" + personList.size());
        for (Person person : personList) {
            logger.info(person.toString());
        }

        sqlSession.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

注意:

  1. 需要從前面的配置文件中,獲取MyBatis的連接;
  2. 從已有連接中獲取一次SqlSession,每次使用完成後,需要把SqlSession釋放;
  3. 使用前,需要先從session中獲取mapper。

7. 獲取SqlSession的優化

每次都從頭創建SqlSessionFactory,在獲取SqlSession,十分不便,並且會導致SqlSessionFactory多次創建,一次啓動SqlSessionFactory只需要一個就可以了。

編寫一個MyBatis工具類

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

測試代碼簡化爲

@Test
public void testPerson() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
    List<Person> personList = mapper.selectAll();
    logger.info("查找數據:" + personList.size());
    for (Person person : personList) {
        logger.info(person.toString());
    }

    sqlSession.close();
}
r.info("查找數據:" + personList.size());
    for (Person person : personList) {
        logger.info(person.toString());
    }

    sqlSession.close();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章