初識mybatis(二)

上篇文章我們介紹通過Java代碼來創建mybatis的配置文件,港真,這種方式看起來有意思實際在開發中用的並不多,mybatis的配置還是以xml配置爲主,本文我們就來看看如何通過xml文件來配置mybatis。關於mybatis的一些基礎知識小夥伴們可以參考這篇博客 初識mybatis。另外,上篇博客中,小夥伴們也看到了通過添加jar包的方式來搭建mybatis環境太過於麻煩,so,本文我們還是迴歸到Maven上吧。OK,廢話不多說,開始今天的coding之旅吧。

創建Project並添加Maven支持

我這裏以IntelliJ爲例來說明如何創建,先創建一個普通的java工程,創建成功之後,選中工程右鍵單擊,選擇Add Framework Support,然後選擇Maven,點擊OK就可以了。添加Maven支持src目錄下多了幾個文件夾,同時也多了一個pom.xml文件,如下: 
這裏寫圖片描述 
然後在pom.xml文件中添加相關依賴,我們這裏一共添加三個,一個mybatis、單元測試、mysql驅動,如下:

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>

    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

OK,如此我的mybatis環境就搭建好了。接下來我們還是按照上文的順序來看看要怎麼做。

通過xml創建mybatis配置

在創建xml配置文件的時候,對於數據庫的配置信息我們可以直接創建一個db.properties文件,然後將數據庫的配置信息放入其中,如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=sang
  • 1
  • 2
  • 3
  • 4

注意,所有的配置文件我們都放在resources文件夾下(小夥伴如果放錯了會出現文件找不到的情況,這個時候仔細檢查下都很好解決的),如下圖: 
這裏寫圖片描述 
有了數據庫配置信息,接下來我們就可以創建mybatis的配置文件了,我這裏配置文件取名爲mybatis-conf.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>
    <properties resource="db.properties"/>
    <typeAliases>
        <typeAlias type="org.sang.bean.User" alias="user"/>
    </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="userMapper.xml"/>
    </mappers>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

關於這個配置文件我說如下幾點:

1.第6行我們引入剛剛創建的db.properties文件,方便我們在配置數據庫的時候通過${XXX}來直接引用其中的值。

2.第7-9行給我們的User實體類取一個別名,這樣在Mapper的配置文件中我們就可以直接使用這裏的別名了。

3.從第10行開始配置我們的mybatis運行環境,我們可以在environments節點中配置多個environment,比如開發環境下的environment,生產環境下的environment,然後在environments中通過default屬性來選擇你要使用哪一種環境。

4.14-17行配置數據庫相關屬性,通過${XXX}來直接引用db.properties中的值。

5.第21行到23行配置映射器Mapper,下面我們來說說如何創建Mapper

有了這個XML文件,接下來我們就可以通過這個xml文件來獲取一個SqlSession了,當然,如上篇博客所述,我們需要把SqlSessionFactory搞成單例模式,所以創建方式如下:

public class DBUtils {
    private static SqlSessionFactory sqlSessionFactory = null;
    private static final Class CLASS_LOCK = DBUtils.class;

    public static SqlSessionFactory initSqlSessionFactory() {
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream("mybatis-conf.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        synchronized (CLASS_LOCK) {
            if (sqlSessionFactory == null) {
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            }
        }
        return sqlSessionFactory;
    }

    public static SqlSession openSqlSession() {
        if(sqlSessionFactory==null)
            initSqlSessionFactory();
        return sqlSessionFactory.openSession();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

關於這個類我這裏就不做過多說明了,小夥伴們有疑問可以參考上篇博客

創建Mapper

上篇博客我們說過Mapper由兩部分組成,Java接口+註解或者Java接口+XML配置,我們在上篇博客中使用Java接口+註解的方式來創建了Mapper,那麼本文我們就來看看一種更常用的方式Java接口+XML配置的方式。

創建Java接口:

public interface UserMapper {
    public User getUser(Long id);

    public int insertUser(User user);

    public int deleteUser(Long id);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

小夥伴們注意,這裏我並沒有給getUser方法添加@Select註解,我們將在xml配置文件中通過xml來解決這個問題,同時我們還添加了兩個方法,一個向數據庫中添加數據,一個刪除數據。

創建配置文件

在resources中創建userMapper.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="org.sang.db.UserMapper">
    <select id="getUser" resultType="user" parameterType="Long">
        select * from user where id = #{id}
    </select>
    <insert id="insertUser" parameterType="user">
        INSERT INTO user(username,password,address) VALUES (#{username},#{password},#{address})
    </insert>
    <delete id="deleteUser" parameterType="Long">
        DELETE FROM user where id=#{id}
    </delete>
</mapper>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

關於這個配置文件我說兩點:

1.mapper節點的namespace屬性就是UserMapper接口的全路徑 
2.select節點的id屬性就是UserMapper中的方法名稱,resultType屬性的值是我們在mybatis-conf.xml中定義給User類定義的別名,parameterType是指getUser方法參數的類型。 
3.insert節點用來執行數據的插入操作 
4.delete節點用來執行數據的刪除操作

OK ,最後再給小夥伴們看看我們的實體類,如下:

public class User {
    private Long id;
    private String username;
    private String password;
    private String address;

    //省略getter/setter
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OK,如此之後,我們就可以來測試代碼啦。

測試

查詢

    @Test
    public void test1() {
        SqlSession sqlSession = null;
        try {
            sqlSession = DBUtils.openSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = userMapper.getUser(1l);
            System.out.println(user);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

查詢結果如下: 
這裏寫圖片描述

添加

    @Test
    public void test2() {
        SqlSession sqlSession = null;
        try {
            sqlSession = DBUtils.openSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            for (int i = 0; i < 3; i++) {
                userMapper.insertUser(new User(null, "u-" + i, "p-" + i, "a-" + i));
            }
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

添加結果: 
這裏寫圖片描述

刪除

    @Test
    public void test3() {
        SqlSession sqlSession = null;
        try {
            sqlSession = DBUtils.openSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            int i = userMapper.deleteUser(5l);
            System.out.println(i);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

刪除結果: 
這裏寫圖片描述

OK,以上就是我們通過xml配置文件來使用mybatis。

本文案例下載: 
本文案例GitHub地址https://github.com/lenve/JavaEETest/tree/master/Test27-mybatis3

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