天天看點

SSM架構———初識MyBatis

SSM架構———初識MyBatis

一.什麼是MyBatis?

MyBatis源自Apache的iBatis開源項目, 從iBatis3.x開始正式更名為MyBatis。它是一個優秀的持久層架構。

二.為什麼使用MyBatis?

為了和資料庫進行互動,通常的做法是将SQL語句寫在Java代碼中,SQL語句和Java代碼耦合在一起不利于後期維護修改,而MyBatis能夠幫助我們将SQL語句和Java代碼分離,友善了後期因需求變動而對SQL語句進行修改。(聯系properties檔案的作用)

三. 如何使用MyBatis

a、下載下傳MyBatis相應jar包:

https://github.com/mybatis/mybatis-3/releases

b、建立Java工程,導入MyBatis jar包(mybatis-3.4.4.jar)和資料庫驅動包

c、建立user_info表并添加資料(此處使用MySQL)

create table user_info(

id char(36) primary key,

user_name varchar(15) unique,

password varchar(15) not null

)

insert into user_info (id, user_name, password)

values ('3ddcf637-15a8-49d9-a378-b3fa2f2f9c65', 'Aimee', '1983_2560x');

values ('7eb9deed-ec87-416e-abb3-1a5a2ce819de', 'Cassie', 'xm@560_lq');

java代碼部分

方法一:

在src根目錄下建立名為config-mybatis.xml的XML File檔案,代碼如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 配置資料庫連接配接資訊 -->
<environments default="dev">
    <environment id="dev">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
    <environment id="test">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
    <environment id="pro">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>
<!-- 注冊xml檔案 -->
<mappers>
    <mapper resource="./student.xml"/>
</mappers>           

在src根目錄下建立名為student.xml的XML File檔案,代碼如下:

<!-- id:唯一辨別;resultType:傳回值類型; -->
<select id="getNameById" resultType="java.lang.String">
    select name from student where id=1
</select>           

在com.jd.test包下建立Test類。代碼如下

public class Test {

public static void main(String[] args) {
    try {
        InputStream inputStream = Resources.getResourceAsStream("config-mybatis.xml");
        //擷取SqlSessionFactory對象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //擷取SqlSession對象,代表與資料庫的一次會話,用完需要關閉。注意:由于SqlSession為非線程安全的,是以該變量應定義為局部變量,不要定義成全局變量
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String name = openSession.selectOne("com.jd.student.getNameById");        
        System.out.println(name);
        sqlSession.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}           

}

說明:這種配置方式在為SQL語句傳資料時由于參數類型為Object,是以隐藏類型安全問題。

補充說明的是

新手學習mybatis編寫實體映射檔案時,eclipse或者STS或者其他會顯示紅叉叉,将滑鼠放在紅叉叉上會得到這樣的一串提示."The content of element type "mapper" must match "EMPTY". Children of type "comment" are not allowed."

這是因為定義實體映射xml檔案的文檔類型裡面的屬性不對的緣故。

如果是這樣寫的:沒有網絡時,mybatis-3-mapper.dtd加載不到,是以下面定義的元素标簽就會報紅叉叉。

改成這樣就好了

方法二:

建立接口檔案IStudentDao

public interface IStudentDao {

String getNameById();           

在方法一的基礎上,

擷取了SqlSession對象後,try-catch中的代碼變更為

IStudentDao studentDao=sqlSession.getMapper(IStudentDao.class);

System.out.println(studentDao.getClass().getName());

String name=studentDao.getNameById();

System.out.println(name);

說明:這種方法不僅實作了SQL語句的分離,而且彌補了第一種方法的不足,是以推薦使用這種使用方式。

方法三:,

在方法二的的基礎上,

在接口檔案中,在接口方法之前添加注解

@Select("select name from student where id=1")

config-mybatis.xml的XML File檔案中,變更的内容,更改mapper的屬性,把之前的resource指向變為接口的路徑

說明:這種方式不僅使得SQL語句與Java代碼出現了耦合,而且不便于寫複雜的SQL語句,比如當依據多個字段查詢時,where關鍵字後面的條件是動态的,這時就不便于使用注解的方式寫該SQL語句。

作者:馬一鳴Ivk

來源:CSDN

原文:

https://blog.csdn.net/qq_44724446/article/details/94735943

版權聲明:本文為部落客原創文章,轉載請附上博文連結!

繼續閱讀