IDEA建立mybatisDemo,並實現簡單的CRUD

Mybatis 是支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。在Java或者Java Web項目中,添加Mybatis必須的核心包,就能對數據表進行增刪改查操做了。下面以MySQL數據庫oa中的數據表userinfo爲例,使用Mybatis實現數據的增刪改查。java

準備工做

爲了方便,我是用IDEA+Maven來解決項目的包管理工做,IDEA配置Maven的方法,參考連接,本Demo使用的開發版本以下:mysql

  • IDE:IntelliJ IDEA 2019.3.1 x64
  • Maven: apache-maven-3.3.9

一、新建項目

File->new->project,選擇左側的maven,設置項目的project SDk:jdk 1.8,勾選Create from archetype,在列表中勾選maven-archetype-quickstartgit

而後,填寫項目名mybatisDemo,項目位置,配置Maven(此處的User settings file 和 local repository均勾選Override),finish建立項目,初始化目錄結構以下圖a,完整運行的項目目錄結構以下圖bgithub

二、編寫項目代碼

編寫配置文件pom.xml,添加依賴項以下,而後IDE出現提示信息,選擇 reimport changes便可,隨後Maven開始下載須要的包到本項目中。
本項目使用的jdbc驅動版本爲5.1.18,使用較新的版本,須要注意後面mysql.properties配置文件的編寫,二者有區別。web

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>

編寫實體類 UserInfo.java,同時在MySQL數據庫中建立對應的數據表userinfo,如上圖csql

package org.example;

import java.io.Serializable;

public class UserInfo implements Serializable {
    private int id;
    private String username;
    private String password;

    public UserInfo(){}

    public UserInfo(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在src/main目錄下建立java的同級文件夾resource,並右鍵 Mark Directory as -> Sources Root,在resource下新建mapper包,新建SQL映射的UserInfo.xml文件數據庫

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace設置格式:包名+SQL映射文件名-->
<mapper namespace="com.mybatis.mapper.UserInfoMapper">
    <!--根據用戶ID查詢用戶信息-->
    <select id="findUserInfoById" parameterType="int" resultType="UserInfo">
        select * from userinfo where id = #{id}
    </select>

    <!--根據用戶名模糊查詢用戶-->
    <select id="findUserInfoByUserName" parameterType="String" resultType="UserInfo">
        select * from userinfo where username like CONCAT(CONCAT('%',#{username}),'%')
    </select>

    <!--添加用戶-->
    <insert id="addUserInfo" parameterType="UserInfo">
        insert into userinfo(id,username,password) values(#{id},#{username},#{password})
    </insert>

    <!--修改用戶信息-->
    <update id="updateUserInfo" parameterType="UserInfo">
        update userinfo set password = #{password} where id = #{id}
    </update>

    <!--刪除用戶信息-->
    <delete id="deleteUserInfo" parameterType="int">
        delete from userinfo where id = #{id}
    </delete>

</mapper>

在resource文件夾下,新建兩個屬性文件:mysql.propertieslog4j.properties,用於配置MySQL和log4japache

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/oa
username=root
password=8636hyh
### 設置Logger輸出級別和輸出目的地 ###
log4j.rootLogger=debug,stdout,logfile

### 把日誌信息輸出到控制檯 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

### 把日誌信息輸出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

### 顯示SQL語句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

最後,添加mybatis的核心配置文件mybatis-config.xmlsession

<?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="mysql.properties"></properties>
    <!--給包中的類註冊別名-->
    <typeAliases>
        <typeAlias type="org.example.UserInfo" alias="UserInfo"/>
    </typeAliases>
    <!--配置環境-->
    <environments default="development">
        <!--配置一個id爲development的環境-->
        <environment id="development">
            <!--使用JDBC事務-->
            <transactionManager type="JDBC"></transactionManager>
            <!--數據庫鏈接池-->
            <!-- mybatis提供了3種數據源類型,分別是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC數據源鏈接池 -->
            <!-- UNPOOLED 表示不支持數據源鏈接池 -->
            <!-- JNDI 表示支持外部數據源鏈接池 -->
            <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="mapper/UserInfo.xml"/>
    </mappers>
    <!-- Continue going here -->

</configuration>

三、編寫測試文件

編寫測試類AppTest.java,使用單元測試來逐項檢查「增刪改查」功能,只須要在各方法名上右鍵運行,便可進行測試;
其中註解的含義:在測試類中,每個用@Test註解修飾的方法稱爲測試方法,它們的調用順序爲@Before->@Test->@After。所以,每次執行一個單元測試方法,都會先運行init()方法初始化,創建數據庫會話,而後運行測試函數,最後調用destroy()釋放資源。mybatis

package org.example;

import static org.junit.Assert.assertTrue;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLOutput;
import java.util.List;

/**
 * Unit test for simple App.
 */
public class AppTest {
    /**
     * Rigorous Test :-)
     */
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession;

    @Before
    public void init() {
        //讀取mybatis配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream;
        try {
            //獲得配置文件流
            inputStream = Resources.getResourceAsStream(resource);
            //根據配置文件信息,建立會話工廠
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //經過工廠獲得Sqlsession
            sqlSession = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //根據id查詢用戶
    @Test
    public void testFindUserInfoById() {
        //經過sqlSession執行映射文件中定義的SQL,並返回映射結果
        UserInfo ui = sqlSession.selectOne("findUserInfoById", 101);
        //打印輸出結果
        System.out.println(ui.toString());
    }

    //根據用戶名模糊查詢用戶
    @Test
    public void testFindUserInfoByUserName() {
        //執行映射文件中定義的SQL,並返回結果集
        List<UserInfo> uis = sqlSession.selectList("findUserInfoByUserName", "ang");
        for (UserInfo ui : uis) {
            System.out.println(ui);
        }
    }

    //添加用戶
    @Test
    public void testAddUserInfo() {
        //建立UserInfo對象ui
        UserInfo ui = new UserInfo(104, "xia", "12334");
        int res = sqlSession.insert("addUserInfo", ui);
        if (res > 0) {
            System.out.println("insert successfully!");
        } else {
            System.out.println("insert failed!");
        }
    }

    //修改用戶
    @Test
    public void testUpdateUserInfo(){
        //加載編號爲103的用戶
        UserInfo ui = sqlSession.selectOne("findUserInfoById",103);
        ui.setPassword("13345");
        int res = sqlSession.update("updateUserInfo",ui);
        if(res > 0){
            System.out.println("update successfully!");
        }else{
            System.out.println("update failed!");
        }
    }

    @Test
    public void testDeleteUserInfo(){
        //執行sqlSession的delete方法,返回結果受影響的行數
        int res = sqlSession.delete("deleteUserInfo",102);
        if(res > 0){
            System.out.println("delete successfully!");
        }else{
            System.out.println("delete failed!");
        }
    }

    @After
    public void destroy() {
        //提交事務
        sqlSession.commit();
        //關閉sqlSession
        sqlSession.close();
    }
}

四、控制檯輸出驗證

使用用戶名模糊查詢用戶的結果,結果正確。

五、Demo源碼https://github.com/sdifv/JavaWebDemo/tree/master/SSM/mybatisDemo

相關文章
相關標籤/搜索