MyBatis入門

1. 基本概念

  • 基于JAVA的持久層框架
  • 封裝了JDBC操作的很多細節(jié)
  • 使用了ORM思想實現(xiàn)結(jié)果集封裝
  • ORM(Object Relational Mapping):對象映射關系

2. 環(huán)境搭建

  • 2.1 創(chuàng)建maven工程并導入坐標
    在工程的pom.xml中做如下配置
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>org.example</groupId>
      <artifactId>DemoMaven01</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <dependencies>
          <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.4.5</version>
          </dependency>
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.6</version>
          </dependency>
          <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.12</version>
          </dependency>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.10</version>
              <scope>test</scope>
          </dependency>
      </dependencies>
    </project>
    
  • 2.2 創(chuàng)建實體類和dao的接口
    實體類中的類名及屬性嚴格對于數(shù)據(jù)表
  • 2.3 創(chuàng)建Mybatis的主配置文件
    在resource文件夾中創(chuàng)建配置的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>
      <environments default="mysql">
          <environment id="mysql">
              <transactionManager type="JDBC"/>
              <dataSource type="POOLED">
                  <property name="driver" value="com.mysql.jdbc.Driver"/>
                  <property name="url" value="jdbc:mysql://localhost:3306/test1"/>
                  <property name="username" value="${username}"/>
                  <property name="password" value="${password}"/>
              </dataSource>
          </environment>
      </environments>
      <mappers>
          <mapper resource="org/mybatis/example/BlogMapper.xml"/>
      </mappers>
    </configuration>
    
  • 2.4 創(chuàng)建映射配置文件
    配置文件的文件位置必須和dao接口的包結(jié)構(gòu)相同
    配置文件的Mapper標簽namespace屬性值必須為dao接口的全限定類名
    映射配置文件的操作配置其id屬性取值必須是dao接口的方法名

3. 注解配置

使用注解配置模式時可以免去映射配置文件的工作量,書寫更為方便。
其中SqlMapConfig的配置信息改為

<?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="jdbcConfig.properties"></properties>
    <!-- 配置別名 -->
    <typeAliases>
        <package name="com.handsomexu.mybatis"/>
    </typeAliases>
    <!-- 配置環(huán)境 -->
    <environments default="mysql">
        <environment id="mysql">
            <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>
    <!-- 指定帶有注解的dao接口所在位置 -->
    <mappers>
        <package name="com.handsomexu.dao"/>
    </mappers>
</configuration>

定義dao層接口時采用注解配置

package com.handsomexu.dao;

import com.handsomexu.mybatis.Test1;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;

import java.util.List;

/**
 * 在mybatis中爭對crud一共有四個注解為:@Select @Insert @Update @Delete
 */
public interface ITest1 {

    @Select("select * from test1")
    List<Test1> findAll();

    @Insert("insert into test1(username,password) values(#{username},#{password})")
    void insertUser(Test1 test1);
}

最后可在test文件中進行數(shù)據(jù)庫的訪問

package com.handsomxu.test;


import com.handsomexu.dao.ITest1;
import com.handsomexu.mybatis.Test1;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {
    private InputStream in;
    private SqlSessionFactory factory;
    private SqlSession session;
    private ITest1 test1Dao;

    @Before
    public void init() throws IOException {
        //1.讀取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.創(chuàng)建SqlSessionFactory工廠,其為接口 不能new
        factory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工廠生產(chǎn)SqlSession對象
        session = factory.openSession();
        //4.使用SqlSession創(chuàng)建Dao接口代理對象
        test1Dao = session.getMapper(ITest1.class);
    }

    @After
    public void destroy() throws IOException {
        //6.釋放資源
        session.commit();
        session.close();
        in.close();
    }

    @Test
    public void testSelectUser() {
        //5.使用代理對象執(zhí)行方法
        List<Test1> test1s = test1Dao.findAll();
        for(Test1 test1:test1s){
            System.out.println(test1);
        }
    }

    @Test
    public void testInsertUser(){
        Test1 user = new Test1();
        user.setUsername("wangchen");
        user.setPassword("123456");

        test1Dao.insertUser(user);
    }
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容