MyBatis 学习笔记(XML配置)

  本文是本人在学习MyBatis过程中对于一些知识点的一些小总结,由于本人能力有限,若有不对的还望指正

  1、快速开始

    首先要从xml中获得SqlSessionFactory,再从SqlSessionFactory获得SqlSession,代码如下:

public class JavaDemo {

    //获得SqlSessionFactory
    public static SqlSessionFactory getSqlFactory() {
        InputStream inputStream=null;
        try {
            String resource = "mybatis-config.xml";
            inputStream = Resources.getResourceAsStream(resource);
            return new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(inputStream!=null)
                    inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Test
    public void test() {
        SqlSessionFactory sqlFactory = JavaDemo.getSqlFactory();

        SqlSession sqlSession = sqlFactory.openSession();

    }
}

    再通过SqlSession获得接口对象,调用接口对象的函数,最后将SqlSession关闭,代码如下:

      AuthorMapper mapper = sqlSession.getMapper(AuthorMapper.class);
    
      System.out.println(mapper.getAutById(1));

      sqlSession.close();

    其中mapper.getAutById(1)调用了select方法,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="jdbc.properties"></properties>

    <!--类型别名-->
    <typeAliases>
        <package name="com.study.day01"/>
    </typeAliases>

    <!--环境配置-->
    <environments default="development">
        <environment id="development">
            <!--事务管理的类型-->
            <transactionManager type="JDBC"/>
            <!-- 使用连接池-->
            <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>

    <!--支持多数据库厂商-->
    <databaseIdProvider type="DB_VENDOR">
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
        <property name="SQL Server" value="sqlserver"/>
    </databaseIdProvider>

    <!--映射文件路径-->
    <mappers>
        <mapper resource="mapper/AuthorMapper.xml"/>
        <mapper resource="mapper/BookMapper.xml"/>
    </mappers>

</configuration>

    对于简单的MyBatis demo,我们只需要关注 mappers、environments、properties标签,映射文件如下:

<?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.study.day01.AuthorMapper">

    <resultMap id="MyAuthor" type="com.study.day01.Author">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <result column="nation" property="nation"></result>
    </resultMap>

    <select id="getAutById" resultMap="MyAuthor">
        select * from authors where id=#{id}
    </select>

</mapper>        

    映射文件需要保存在mapper/下。

    jdbc.properties配置如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/books?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=weiwei1997

    java代码如下:

package com.study.day01;

import org.apache.ibatis.type.Alias;

import java.util.List;

@Alias(value = "auth")
public class Author {

    private int id;
    private String name;
    private String nation;public List<Book> getBooks() {
        return books;
    }

    public void setBooks(List<Book> books) {
        this.books = books;
    }

    public Author() {
    }

    public Author(int id, String name, String nation, List<Book> books) {
        this.id = id;
        this.name = name;
        this.nation = nation;
        this.books = books;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String au_name) {
        this.name = au_name;
    }

    public String getNation() {
        return nation;
    }

    public void setNation(String nation) {
        this.nation = nation;
    }

    @Override
    public String toString() {
        return "Author{" +
                "id=" + id +
                ", au_name='" + name + '\'' +
                ", nation='" + nation + '\'' +
                '}';
    }

}


package com.study.day01;

import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface AuthorMapper {

    public Author getAutById(Integer id);
}

 

  2、配置文件xml

    1)properties

      这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。如将username值设为dev_user,代码如下:

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>

    2)settings

      一套配置完全的settings标签设置为:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

    3)类型别名

      给java对象起一个别名,在package下,所有类的别名为首字母小写,比如com.study.day01.Author的别名为author,但是我们一般不这么用,因为在debug的时候,会根据完整的类名去debug。

<typeAliases>
        <package name="com.study.day01"/>
</typeAliases>

    4)environment

      MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

      不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

      所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:

      为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);

      如果忽略了环境参数,那么将会加载默认环境,如下所示:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);

      配置文件的代码如下:

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <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>

 

    

posted on 2021-05-18 16:16  ustcwei  阅读(74)  评论(0)    收藏  举报