使用getMapper()面向接口編程

前言: 前面寫代碼時我們使用sqlSession.selectList("SQLID"),完全是在面向String字符串類型的SQLID編程,雖然能達到操作數(shù)據(jù)庫的目的,但這種代碼寫法是不規(guī)范的。理想中規(guī)范的寫法是面向接口編程。MyBatis提供了“接口-SQL映射” 的功能。
還記得使用MyBatis Generator工具操作MySQL數(shù)據(jù)庫示例中生成的xxxMapper.xml與xxxMapper.java文件,兩者是對應的,這就是“接口-SQL映射”
對應關系:
namespace對應包名和接口名:

//xxxMapper.xml
<mapper namespace="mapping.UserinfoMapper">
//xxxMapper.java
package mapping;
public interface UserinfoMapper {}

id對應方法名,parameterType對應參數(shù)類型:

//xxxMapper.xml
<insert id="insert" parameterType="bean.Userinfo">
//xxxMapper.java
int insert(Userinfo record);

示例:
使用MyBatis Generator工具操作MySQL數(shù)據(jù)庫示例基礎上操作
修改修改Test.java如下:

package test;

import java.io.IOException;
import java.io.InputStream;
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 bean.Userinfo;
import mapping.UserinfoMapper;

public class Test {

    public static void main(String[] args) {
        try {
            Userinfo userinfo=new Userinfo();
            userinfo.setUsername("張三");
            userinfo.setPassword("123456");
            userinfo.setAge(80);
            
            String resource="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession=sessionFactory.openSession();
            
            //通過動態(tài)代理設計模式創(chuàng)建出接口UserinfoMapper.java的實現(xiàn)類
            UserinfoMapper userinfoMapper=sqlSession.getMapper(UserinfoMapper.class);
            System.out.println(userinfoMapper);
            
            userinfoMapper.insert(userinfo);
            
            sqlSession.commit();
            sqlSession.close();
            /*userinfo.getId()獲取新插入記錄在數(shù)據(jù)庫中自動增長生成的值
             * 要獲取到值必須將UserinfoMapper.xml中<insert id="insert" parameterType="bean.Userinfo">修改為
             * <insert id="insert" parameterType="bean.Userinfo" useGeneratedKeys="true" keyProperty="id">
             * 否則獲取到null,后面的文章再詳解*/
            System.out.println("createId="+userinfo.getId());
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

OutPut:

org.apache.ibatis.binding.MapperProxy@36f6e879
createId=xxx     //數(shù)據(jù)庫自動增長生成的一個整數(shù)值

這里MyBatis動態(tài)地創(chuàng)建出了接口UserinfoMapper.java的實現(xiàn)類,示例代碼如下:

UserinfoMapper userinfoMapper=sqlSession.getMapper(UserinfoMapper.class);
System.out.println(userinfoMapper);

注意: 這里userinfo.getId()獲取新插入記錄在數(shù)據(jù)庫中自動增長生成的值。想要獲取到值必須將UserinfoMapper.xml中如下代碼

<insert id="insert" parameterType="bean.Userinfo">

修改為

 <insert id="insert" parameterType="bean.Userinfo" useGeneratedKeys="true" keyProperty="id">

否則獲取到null,關于GeneratedKeys后面的文章再詳解。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容