1. 程式人生 > >Mybatis簡介及入門

Mybatis簡介及入門

mybatis簡介

MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

mybatis操作對比

操作資料庫:JDBC——>DbUtils(QueryRunner)——>jdbcTemplate:小工具

                    框架:整體解決方案

jdbc處理流程:

功能簡單,sql寫在Java程式碼裡——>硬編碼,高耦合

Hibernate:全自動ORM(Object Relation Mapping)框架:目的在於消除sql,沒法操作sql(希望把sql語句交給開發人員)


Mybatis: 半自動框架,輕量級的,sql與編碼分離,sql是開發人員控制

mybatis之Helloworld

按照官方文件

1、新建實體類

2、maven依賴

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>

3、全域性配置資訊mybatis-config

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE configuration
PUBLIC "-//mapper.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置mybatis執行環境-->
<environments default="development"
> <environment id="development"> <!--type=“JDBC”代表使用JDBC的提交和回滾來管理事務--> <transactionManager type="JDBC"/> <!--mybatis提供了3種資料來源型別,分別是POOLED、UNPOOLED、JNDI--> <!--POOLED表示支援JDBC資料來源連線池--> <!--UNPOOLED表示不支援資料來源連線池--> <!--JNDI表示支援外部資料來源連線池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--註冊Mapper對映檔案方式--> <!--將sql對映檔案註冊到全域性配置檔案中--> <mappers> <!--註冊方式1,一個一個的配置--> <mapper resource="mapper/EmployMapper.xml"/> <!--註冊方式2,自動包內的mapper介面與配置檔案--> <!--<package name="mapper"/>--> </mappers> </configuration>

4、測試

1)根據xml全域性配置檔案獲得sqlSessionFactoty

2)獲得sqlSession物件

3)執行sql

4)關閉sqlSession

package test;
import bean.Employee;
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.testng.annotations.Test;
import java.io.IOException;
import java.io.Reader;
/**
 * @author chenpeng
 * @date 2018/5/16 11:40
 */
public class MybatisTest {
    @Test
public void test() throws IOException {
        /**
         * 1、根據xml配置檔案(全域性配置檔案),建立一個sqlSessionFactory物件
         */
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//2、獲取sqlSession例項,能直接執行已經對映的sql語句
SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            //3、兩個引數分別是唯一標識和要傳入的引數
Employee employee = sqlSession.selectOne("select",1);
System.out.println(employee);
} finally {
            //4、關閉sqlSession
sqlSession.close();
}

    }
}

5、建立對映的sql檔案

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE mapper
PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Employee">
<!--namespace:名稱空間
        id:唯一標識
        resultType:返回值型別
        #{id}:標識從傳過來的引數中取出id
    -->
<select id="select" resultType="bean.Employee">
SELECT * FROM t_employee WHERE id = #{id}
    </select>
</mapper>

然而報錯了:

目錄結構:


在pom中配置:

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>
  </resources>
</build>

參考:https://blog.csdn.net/qq_23184291/article/details/78089115

mybatis介面式程式設計

介面式程式設計需要新建一個dao類:

public interface EmployeeMapper {
    EmployeeMapper getEmployeeById(Integer id );
}

mapper對映檔案的變化:

namespace內容變為介面的路徑,唯一識別符號變為介面的方法名

@Test
public void test1() throws IOException {
    //獲取sqlSession物件
SqlSession sqlSession = getSession();
    try {
        //獲取介面的實現類
     //為介面建立一個代理物件mapper
    EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee =  mapper.getEmployeeById(1);
System.out.println(employee);
} finally {
        //關閉sqlSession物件
sqlSession.close();
}
通過getMapper方法獲得口類的代理物件,從而呼叫介面的方法。

小結:

1、推薦使用介面式程式設計:

2、SqlSession代表和資料庫一次會話,用完必須關閉

3、SqlSession和connection一樣都是非執行緒安全的,每次使用都應該獲取新的物件,不要放在共享成員變數。

4、mapper介面沒有實現類,但是mybatis會生成一個代理物件。(將介面和xml對映檔案進行繫結)

EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

5、兩個重要的配置檔案:

mybatis全域性配置檔案:包含資料庫連線池資訊,事務管理等資訊,系統執行環境

sql對映檔案:儲存了每一個sql語句的對映資訊。