MyBatis 入門程序

在瞭解了 MyBatis 的一些基本知識後,通過查閱資料搭建 MyBatis 環境實現了對數據庫數據進行增刪改查操作的一個入門程序。

這裏話不多說,直接上乾貨。

環境

  • JDK1.7
  • MySQL 5.5.50
  • mybatis 3.3.0

注:MyBatis 下載地址https://github.com/mybatis/mybatis-3/releases

需要的 jar 包

  • MyBatis jar 包: mybatis-3.3.0.jar
  • MySQL 驅動 jar 包: mysql-connector-java-xxx.jar
  • 日誌記錄 jar 包: log4j-xxx.jar

項目結構

這裏寫圖片描述

入門程序

1.數據庫準備

程序使用的是 MySQL 數據庫。

登錄 MySQL 後新建一個數據庫並取名 mybatis

創建表 user ,sql 代碼如下:

create table user(
    id int primary key auto_increment,
    username varchar(20),
    password varchar(20),
    sex varchar(10),
    address varchar(20));

2. 新建項目工程

(1)首先在 Eclipse 裏新建一個動態 Web 工程(Dynamic Web Project),命名爲 MyBatisTest
(2)將前面提到的三個 jar 包拷貝到工程的/WebContent/WEB-INF/lib/ 目錄下,如下:
這裏寫圖片描述

3. 配置文件 mybatis.cfg.xml

在項目目錄 /Java Resources/src 下新建 MyBatis 配置文件 mybatis.cfg.xml ,用來配置 Mybatis 的運行環境、數據源、事務等。

<?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>    
    <!-- 配置mybatis運行環境 -->
    <environments default="development">
        <environment id="development">
           <!-- type="JDBC" 代表直接使用 JDBC 的提交和回滾設置 -->
            <transactionManager type="JDBC" />

            <!-- POOLED 表示支持JDBC數據源連接池 -->
            <!-- 數據庫連接池,由 Mybatis 管理,數據庫名是 mybatis,MySQL 用戶名 root,密碼爲 root -->
            <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="root" />
            </dataSource>
        </environment>
    </environments> 
</configuration>

4. 實體類 User

在包 com.gler.mybatis.model 下新建類 User.java , 一個用戶具有:id、username、password、sex、address 五個屬性。作爲 mybatis 進行 sql 映射使用,與數據庫表對應。

User 類的代碼如下:

package com.gler.mybatis.model;

public class User {

    private Integer id;
    private String username;
    private String password;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

5.創建方法接口和定義映射文件

新建包 com.gler.mybatis.mapper ,並在包下新建方法接口 UserMapper.java ,提供簡單的增刪改查數據操作。

UserMapper 接口的代碼如下:

package com.gler.mybatis.mapper;

import java.util.List;

import com.gler.mybatis.model.User;

public interface UserMapper {

    /*
     * 新增用戶
     * @param user
     * @return
     * @throws Exception
     */
    public int insertUser(User user) throws Exception;

    /*
     * 修改用戶
     * @param user
     * @param id
     * @return
     * @throws Exception
     */
    public int updateUser(User user) throws Exception;

    /*
     * 刪除用戶
     * @param id
     * @return
     * @throws Exception
     */
    public int deleteUser(Integer id) throws Exception;

    /*
     * 根據id查詢用戶信息
     * @param id
     * @return
     * @throws Exception
     */
    public User selectUserById(Integer id) throws Exception;

    /*
     * 查詢所有的用戶信息
     * @return
     * @throws Exception
     */
    public List<User> selectAllUser() throws Exception;
}

在包 com.gler.mybatis.mapper 下新建映射文件 UserMapper.xml ,用來定義各種 SQL 語句和這些語句的參數,以及要返回的類型等。

UserMapper.xml 的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gler.mybatis.mapper.UserMapper">
    <!-- 自定義返回結果集 -->
    <resultMap id="userMap" type="User">
        <id property="id" column="id" javaType="int"></id>
        <result property="username" column="username" javaType="String"></result>
        <result property="password" column="password" javaType="String"></result>
        <result property="sex" column="sex" javaType="String"></result>
        <result property="address" column="address" javaType="String"></result>
    </resultMap>

    <!-- 定義 SQL 語句,其中 id 需要和接口中的方法名一致 -->
    <!-- useGeneratedKeys:實現自動生成主鍵 -->
    <!-- keyProperty: 唯一標記一個屬性 -->
    <!-- parameterType 指明查詢時使用的參數類型,resultType 指明查詢返回的結果集類型 -->
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into user (username,password,sex,address) values
        (#{username},#{password},#{sex},#{address})
    </insert>

    <update id="updateUser"  parameterType="User">
        update user set
        address=#{address} where
        id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from user where
        id=#{id}
    </delete>

    <!-- 如未爲 Java Bean 起類別名,resultType="com.gler.mybatis.model.User" -->

    <!-- 使用resultType時,一定要保證,你屬性名與字段名相同;如果不相同,就使用resultMap -->
    <select id="selectUserById" parameterType="int" resultType="User">
        select * from user where id=#{id}
    </select>

    <select id="selectAllUser" resultMap="userMap">
        select * from user
    </select>

</mapper>

UserMapper.xml 映射文件寫好後,需要在 mybatis.cfg.xml 中加載它,在 mybatis.cfg.xml 中添加代碼:

<mappers>
    <!-- 通過 mapper 接口包加載整個包的映射文件 -->
    <package name="com/gler/mybatis/mapper" />
</mappers>

同時爲 Java Bean 起別名,在

<!-- 爲JavaBean起類別名 -->
<typeAliases>
    <!-- 指定一個包名起別名,將包內的 Java 類的類名作爲類的類別名 -->
    <package name="com.gler.mybatis.model" />
</typeAliases> 

6.日誌記錄 log4j.properties

使用日誌文件是爲了查看控制檯輸出的 SQL 語句。

在項目目錄 /Java Resources/src 下新建 MyBatis 日誌記錄文件
log4j.properties ,在裏面添加如下內容:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

7.測試類 UserTest

在包 com.gler.mybatis.test 下新建測試類 UserTest.java
用來測試數據的增刪改查操作。

UserTest 類的代碼如下:

package com.gler.mybatis.test;

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

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 com.gler.mybatis.mapper.UserMapper;
import com.gler.mybatis.model.User;

public class UserTest {
    private static SqlSessionFactory sqlSessionFactory;

    public static void main(String[] args) {
        // Mybatis 配置文件
        String resource = "mybatis.cfg.xml";

        // 得到配置文件流
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 創建會話工廠,傳入 MyBatis 的配置文件信息
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        insertUser();
        // updateUser();
        // deleteUser();
        // selectUserById();
        // selectAllUser();

    }

    // 新增用戶
    private static void insertUser() {
        // 通過工廠得到 SqlSession
        SqlSession session = sqlSessionFactory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = new User();
        user.setUsername("Tom");
        user.setPassword("123456");
        user.setSex("male");
        user.setAddress("chengdu");
        try {
            mapper.insertUser(user);

            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }

        // 釋放資源
        session.close();
    }

    // 更新用戶
    private static void updateUser() {

        SqlSession session = sqlSessionFactory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = null;
        try {
            user = mapper.selectUserById(1);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        user.setAddress("chongqing");
        try {
            mapper.updateUser(user);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }

        session.close();
    }

    // 刪除用戶
    private static void deleteUser() {

        SqlSession session = sqlSessionFactory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);
        try {
            mapper.deleteUser(3);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }

        session.close();
    }

    // 根據id查詢用戶信息
    private static void selectUserById() {

        SqlSession session = sqlSessionFactory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);
        try {
            User user = mapper.selectUserById(1);
            session.commit();
            System.out.println(user.getId() + " " + user.getUsername() + " "
                    + user.getPassword() + " " + user.getSex() + " "
                    + user.getAddress());
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }

        session.close();
    }

    // 查詢所有的用戶信息
    private static void selectAllUser() {

        SqlSession session = sqlSessionFactory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);
        try {
            List<User> userList = mapper.selectAllUser();
            session.commit();
            for (User user : userList) {
                System.out.println(user.getId() + " " + user.getUsername() + " "
                        + user.getPassword() + " " + user.getSex() + " "
                        + user.getAddress());
            }
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }

        session.close();
    }
}

8.運行測試

分別調用 UserTest 類中的增刪改查方法。

結果如下:

(1) insertUser()

插入一條用戶數據:

1)控制檯輸出

這裏寫圖片描述

2)查看數據庫
這裏寫圖片描述

(2) updateUser()

將 id 爲1的用戶的 address 修改爲 chongqing:

1)控制檯輸出

這裏寫圖片描述

2)查看數據庫

這裏寫圖片描述

(3) deleteUser()

在進行測試之前,再往數據庫表中插入兩行用戶記錄。

insert into user(username,password,sex,address) values('Jack','13579','male','beijing');
insert into user(username,password,sex,address) values('Rose','24680','female','shanghai');

這裏寫圖片描述

將 id 爲3的用戶刪除:

1)控制檯輸出

這裏寫圖片描述

2)查看數據庫
這裏寫圖片描述

(4) selectUserById()

查詢 id 爲1的用戶信息:
這裏寫圖片描述

(5) selectAllUser()

查詢所有用戶信息:
這裏寫圖片描述

參考鏈接

發佈了39 篇原創文章 · 獲贊 207 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章