1. 程式人生 > >Mybatis(五):Mybatis的三種使用方式

Mybatis(五):Mybatis的三種使用方式

注意,這篇文章只介紹mybatis單獨使用時如何操作,是沒有用到spring的,如果需要了解mybatis和spring如何搭建,請移步這裡。

方式一:不使用mapper介面

步驟

1.pom檔案裡新增jar包

<dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.3.0</version>
        </dependency
>

2.準備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>
    
    <settings>
        <!-- 列印查詢語句 -->
        <setting name
="logImpl" value="STDOUT_LOGGING" /> </settings> <!-- 和Spring整合後environment配置都會被幹掉 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理,目前由mybatis來管理 --> <transactionManager type="JDBC"
/> <!-- 資料庫連線池,目前由mybatis來管理 --> <dataSource type="POOLED"><!--有關於mysql資料庫的各種資訊--> <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="123456" /> </dataSource> </environment> </environments> <mappers> <!--將操作配置檔案User.xml系新增進mapper--> <mapper resource="mybatis/user.xml" /> </mappers> </configuration>

更多的引數配置,參閱:Mybatis(一):MyBatis配置檔案config.xml詳解

3.準備實體類

public class User {
    
    private String id;
    private String password;
    private String username;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
        this.password=password;
    }
    public String getUsername(){
        return username;
    }
    public void setUsername(String username){
        this.username=username;
    }
}

4.準備實體對應的mapper對映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="user"> <!-- 注意,因為這邊沒有用到mapper介面,所以這裡的namespace不需要是完全的類名 -->

    <!-- 通過id查詢使用者 -->
    <select id="findUserById" parameterType="int" resultType="com.mvc.User">
        <include refid="selectStr"/> id = #{id}
    </select>
    <!--通過name查詢一個list的使用者,模糊匹配-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.mvc.User">
        select * from user where name like '%${value}%'
    </select>
        
    <!--插入使用者資訊-->
    <insert id="insertUser" parameterType="com.mvc.User">
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            select uuid()
<!--            這裡是對於主鍵屬性的id進行賦值 -->
        </selectKey>
        insert into user(id,username,password) values(#{id},#{username},#{password})
    </insert>
    <!--刪除使用者資訊-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>
    <!--更新使用者資訊-->
    <update id="updateUser" parameterType="com.mvc.User">
        <!-- update user set name=#{name},password=#{password} where id=#{id} -->
        update user
        <set>
            <if test="username != null && username != ''">username=#{username},</if>
            <if test="password != null && password != ''">password=#{password},</if>
        </set>
        where id= #{id}
    </update>
</mapper>

5.準備一個獲取sqlsession的工具類

import java.io.IOException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisSessionUtil {

    static SqlSessionFactory sqlSessionFactory = null;
    static{
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        try {
            sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
    
}

6.準備dao

import org.apache.ibatis.session.SqlSession;

import com.mvc.User;
import com.mybatis.mapper.User2Mapper;

public class UserDao {

    SqlSession session = MybatisSessionUtil.getSession();
    
    public int insert(User user){
        int rint = session.insert("user.insertUser",user); // 第一個引數是mapper xml裡的namespace+MappedStatement對應的id
        session.commit();// 不要忘記提交
        return rint;
    }
}

7.看下資料裡user表

8.測試類

import com.mvc.User;
import com.mybatis.util.UserDao;

public class MybatisNoSpringTest {

    public static void main(String[] args) {
        
        UserDao userDao = new UserDao();
        User user = new User();
        user.setUsername("wwwttt");
        user.setPassword("33333");
        
        if (userDao.insert(user) == 1) {
            System.out.println("insert success...");
        }else{            
            System.out.println("insert fail...");
        }

    }
    
}

 方式二:使用mapper介面

步驟

1.pom檔案裡新增jar包

同方式一

2.準備Mybatis的配置檔案

同方式一,就是換成新的user mapper xml

<mappers>
        <!--將操作配置檔案系新增進mapper-->
        <mapper resource="mybatis/User2Mapper.xml" />
    </mappers>

3.準備實體類

同方式一

4.準備mapper介面(這個是比方式一多出來的)

import com.mvc.User;

// 這邊介面名要和xml對映的檔名一致
public interface User2Mapper {

    int insertUser(User user);
    
    // 其它方法略。。。  
}

5.準備實體對應的mapper對映xml檔案

同方式一,只是namespace需要注意

<?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">
 
 <!-- 這邊的namespace一定要寫完整正確 -->
<mapper namespace="com.mybatis.mapper.User2Mapper">
    <!-- 通過id查詢使用者 -->
    <select id="findUserById" parameterType="int" resultType="com.mvc.User">
        select * from user where id = #{id}
    </select>
    <!--通過name查詢一個list的使用者,模糊匹配-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.mvc.User">
        select * from user where name like '%${value}%'
    </select>
    <!--插入使用者資訊-->
    <insert id="insertUser" parameterType="com.mvc.User">
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            select uuid()
<!--            這裡是對於主鍵屬性的id進行賦值 -->
        </selectKey>
        insert into user(id,username,password) values(#{id},#{username},#{password})
    </insert>
    <!--刪除使用者資訊-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>
    <!--更新使用者資訊-->
    <update id="updateUser" parameterType="com.mvc.User">
        update user set name=#{name},password=#{password} where id=#{id}
    </update>
    
</mapper>

6.準備一個獲取sqlsession的工具類

同方式一

7.準備dao

import org.apache.ibatis.session.SqlSession;

import com.mvc.User;
import com.mybatis.mapper.User2Mapper;

public class UserDao {

    SqlSession session = MybatisSessionUtil.getSession();
    
    // 使用介面方式
    public int insert2(User user){
        User2Mapper user2Mapper = session.getMapper(User2Mapper.class);
        int rint = user2Mapper.insertUser(user);
        session.commit();
        return rint;
    }
    
}

8.測試類

import com.mvc.User;
import com.mybatis.util.UserDao;

public class MybatisNoSpringTest {

    public static void main(String[] args) {
        
        UserDao userDao = new UserDao();
        User user = new User();
        user.setUsername("wwwttt");
        user.setPassword("33333");
        
        
        // 使用mapper介面方式
        if (userDao.insert2(user) == 1) {
            System.out.println("insert success...");
        }else{            
            System.out.println("insert fail...");
        }
    }
    
}

方式三:使用mybatis框架的註解編寫sql

這種方式,我不推薦使用,本來我們使用mybatis就是為了sql編寫和java程式碼能分開解耦,有更大的靈活性,使用這種方式反而不好。

另外,myatis官方也不推薦這種方式,官方說了,要想使用mybatis強大的sql編寫功能,寫在註解裡是受到限制的,只有寫在mapper xml裡才能發揮的玲離盡致。

所以,這種方法我就不記錄了,有需要的同學自行百度。