1. 程式人生 > >myBatis學習筆記(1)——快速入門

myBatis學習筆記(1)——快速入門

在專案中使用myBatis

  • 匯入jar包
    這裡寫圖片描述
  • 在src下建立配置檔案
<?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>
    <!-- 
        development :開發模式
        work: 工作模式
     -->
    <environments
default="development">
<environment id="development"> <!-- JDBC:直接簡單實用了jdbc的提交和回滾 MANAGED:事務交由容器來管理,比如spring容器 --> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property
name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/bank" /> <property name="username" value="root" /> <property name="password" value="123" /> </dataSource> </environment
>
</environments> <!-- 對映檔案(所有sql語句都寫在對映檔案中) --> <mappers> <mapper resource="userMapper.xml" /> </mappers> </configuration>
  • 建立user實體類
package com.bank.entities;

public class User {

    private String username;
    private int money;

    public User() {
        super();
    }

    public User(String username, int money) {
        super();
        this.username = username;
        this.money = money;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", money=" + money + "]";
    }

}

  • 建立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="com.bank.userMapper">
    <!-- 
        parameterType:入參的型別,可以是實體類或者基本資料型別
                        如果是實體類,要寫全類名(包含包名)
        resultType:返回結果的型別,可以是實體類或者基本資料型別
        使用#{name}來表示入參的值
     -->
    <select id="getUser" parameterType="String"
        resultType="com.bank.entities.User">
        select * from user where username=#{username}
    </select>

    <update id="updateUser" parameterType="com.bank.entities.User">
        update user set money=#{money} where username=#{username}
    </update>

    <delete id="deleteUser" parameterType="String">
        delete from user where username=#{username}
    </delete>
    <!-- 如果查詢集合,resultType也是User,myBatis幫我們自動填充到集合裡 -->
    <select id="getAll" resultType="com.bank.entities.User">
        select * from user
    </select>
</mapper>

在對映檔案中,增刪改查分別對應四個標籤<insert> <delete> <update> <select>

  • 寫一個工具類
package com.bank.utils;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {

    public static SqlSessionFactory getFactory(){
        String resource = "conf.xml";
        //載入 mybatis 的配置檔案(它也載入關聯的對映檔案)
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader(resource);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //構建 sqlSession 的工廠
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        return sessionFactory;
    }

}
  • 建立DAO
package com.bank.dao;

import java.io.IOException;
import java.io.Reader;

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.springframework.stereotype.Repository;

import com.bank.entities.User;
import com.bank.mapper.UserMapper;
import com.bank.utils.MyBatisUtil;

public class UserDAO {
    //增加
    public void addUser(User user){
        SqlSessionFactory factory = MyBatisUtil.getFactory();
        SqlSession session = factory.openSession();
        String statement = "com.bank.userMapper.addUser";
        session.update(statement, user);
        session.commit();
        session.close();
    }
    //刪除
    public void deleteUser(String username){
        SqlSessionFactory factory = MyBatisUtil.getFactory();
        SqlSession session = factory.openSession();
        String statement = "com.bank.userMapper.deleteUser";
        session.update(statement, username);
        session.commit();
        session.close();
    }
    //修改
    public void updateUser(User user){
        SqlSessionFactory factory = MyBatisUtil.getFactory();
        SqlSession session = factory.openSession();
        String statement = "com.bank.userMapper.updateUser";
        session.update(statement, user);
        session.commit();
        session.close();
    }
    //查詢
    public User getUser(String username) {
        SqlSessionFactory factory = MyBatisUtil.getFactory();
        SqlSession session = factory.openSession();
        String statement = "com.bank.userMapper.getUser";
        User user = session.selectOne(statement, username);
        session.close();
        return user;
    }
    //查詢所有
    public List<User> queryUsers(){
        SqlSessionFactory factory = MyBatisUtil.getFactory();
        SqlSession session = factory.openSession();
        String statement = "com.bank.userMapper.getAll";
        List<User> users = session.selectList(statement);
        session.close();
        return users;
    }

}
  • session.commit(),非查詢操作才能起作用。如果不想手動提交,可以使用SqlSession session = factory.openSession(true);,這樣可以自動提交
  • session使用完,記得close()
  • statement為對映檔名的 名稱空間+sql標籤語句的id
  • 增刪改查,在session中都有對應的方法可以呼叫,大家自己檢視吧。使用方法都是一樣。

使用註解方式

我們可以使用註解的方式代替userMapper.xml配置檔案
- 寫一個UserMapper介面

package com.bank.mapper;

import org.apache.ibatis.annotations.Insert;

import com.bank.entities.User;

public interface UserMapper {
    @Insert("insert into user(username,money) values(#{username},#{money})")
    void insert(User user);
}

使用註解,把sql語句寫到註解裡

  • 在conf.xml檔案中要註冊
    <mappers>
        <!-- 配置檔案方式 -->
        <mapper resource="userMapper.xml" />
        <!-- 註解方式 -->
        <mapper class="com.bank.mapper.UserMapper"/>
    </mappers>
  • DAO
    public void insert(User user){
        SqlSessionFactory factory = MyBatisUtil.getFactory();
        SqlSession session = factory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        userMapper.insert(user);
        session.commit();
        session.close();
    }

總結

  • 使用myBatis,需要兩個準備步驟:
    • 配置conf.xml檔案
    • 寫好對映檔案(或者使用註解)
  • 做好準備工作好,我們只需要得到SqlSession就能通過sql語句進行資料庫操作了,因此寫一個工具類,供獲取工廠類,通過工廠類得到SqlSession