Mybatis(4)---クエリのようにMybatisの出力結果をカプセル化します

第四に、Mybatisの出力結果をカプセル化します

出力は、mybatisがsqlステートメントを実行した後に取得されたJavaオブジェクトを参照します

1.resultType

1. resultType:結果タイプ。SQLステートメントの実行後にデータが変換されるJavaオブジェクトを参照します(オブジェクトのタイプは任意です)

処理メソッド:
(1)Mybatisはsqlステートメントを実行し、クラスのパラメーターなしの構築メソッドを呼び出してオブジェクトを作成します
(2)Mybatisは、ResultSetの指定された列の値を同じ名前の属性に割り当てます

といった:

<select id="selectMutiParam" resultType="customDAO.Test">
        SELECT id,name FROM t_test;
</select>

対応するjdbc:

ResultSet rs = executeQuery("SELECT id,name FROM t_test");
while(rs.next())
{
    
    
	Test t = new Test();
	t.setId(rs.getInt("id"));
	t.setName(rs.getString("name"));
}

2. resultTypeの値:
(1)型の完全修飾名
(2)型のエイリアス(たとえば、java.lang.Integerのエイリアスはintです)

3.カスタムタイプのエイリアスを定義します
(1)mybatisメイン構成ファイルで定義し、<typeAlias>を使用してエイリアスを定義します
(2)resultTypeでカスタムエイリアスを使用します

最初の方法

<typeAliases>
    <!--
        指定自定义类型的别名
        type:全限定名称
        alias:自定义的别名
    -->
    <typeAlias type="customDAO.Test" alias="Test"></typeAlias>
</typeAliases>

2番目の方法

<!--
    第二种方式:
        使用<package>标签
        name是包名,这个包中所有类的类名就是别名
-->
<package name="customDAO"></package>

4.戻り値はMapです

対応するdaoインターフェース

package customDAO;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

//定义操作test表的接口
public interface TestDao
{
    
    
    //定义方法返回Map
    public Map<Object,Object> selectIdByMap(Integer id);
}

SQLマッピングファイル

<!--
    返回map:
        (1)列名是map的key,列值是map的value
        (2)sql查询结果最多只能有一条,如果多于一条会产生异常
-->
<select id="selectIdByMap" resultType="java.util.HashMap">
    SELECT * FROM t_test WHERE id = #{id};
</select>

2.resultMap

resultMap:結果マッピング。列名とJavaオブジェクトの属性の間の対応を指定するために使用されます

(1)属性にカスタム列値を割り当てる
(2)列名が属性名と異なる場合は、resultMapを使用する必要があります

対応するdaoインターフェース

package customDAO;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

//定义操作test表的接口
public interface TestDao
{
    
    
    //使用resultMap定义映射关系
    public List<Test> selectAlltests();
}

SQLマッピングファイル

<!--
    使用resultMap
        (1)定义resultMap
        (2)在select标签中引用(1)中定义好的resultMap
-->
<!--
    定义resultMap
        id:自定义名称,表示你定义的这个resultMap
        type:Java类型的全限定名称
-->
<resultMap id="testMap" type="customDAO.Test">
    <!--
        指定列名和java对象属性间的关系
    -->
    <!--
        主键列使用id标签
            column:列名
            property:java类型的属性名
    -->
    <id column="id" property="id"></id>
    <!--
        非主键类使用result标签
    -->
    <result column="name" property="name"></result>
</resultMap>
<select id="selectAlltests" resultMap="testMap">
    SELECT * FROM t_test;
</select>

テスト機能

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestMybatis
{
    
    
    @Test
    public void testselectAllTests()
    {
    
    
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        TestDao testDao = sqlSession.getMapper(TestDao.class);
        List<customDAO.Test> list = testDao.selectAlltests();
        list.forEach(t-> System.out.println(t));
    }
}

列名と属性名の違いを解決する2番目の方法

列エイリアスを使用して解決します。定義されたカテゴリ名は、定義したクラスの属性名です。

<select id="selectAlltests" resultMap="testMap">
    SELECT id as stuId FROM t_test;
</select>

3.クエリのように

mybatisでクエリのように使用する2つの方法

3.1最初の方法

ワイルドカード文字を含む文字列を直接渡す

daoインターフェースの方法

import java.util.List;

//定义操作test表的接口
public interface TestDao
{
    
    
    //第一种模糊查询:在java代码中指定like的内容
    public List<Test> selectLikeOne(String name);
}

SQLマッピングファイル内のステートメント

<!--
    第一种like查询
-->
<select id="selectLikeOne" resultType="customDAO.Test">
    SELECT * FROM t_test WHERE name LIKE #{name};
</select>

着信パラメータ

@Test
public void testLikeOne()
{
    
    
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    TestDao testDao = sqlSession.getMapper(TestDao.class);
    //这里的字符串直接传入%name%,包含通配符
    List<customDAO.Test> list = testDao.selectLikeOne("%张%");
    list.forEach(t-> System.out.println(t));
}

3.22番目の方法

文字列スプライシングを使用する

SQLマッピングファイル

<!--
    第二种like查询
        拼接字符串
-->
<select id="selectLikeTwo" resultType="customDAO.Test">
    SELECT * FROM t_test WHERE name LIKE "%" #{name} "%";
</select>

試験方法

@Test
public void testLikeTwo()
{
    
    
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    TestDao testDao = sqlSession.getMapper(TestDao.class);
    //这里的字符串直接传入name
    List<customDAO.Test> list = testDao.selectLikeTwo("李");
    list.forEach(t-> System.out.println(t));
}

daoインターフェースのメソッド

import java.util.List;
//定义操作test表的接口
public interface TestDao
{
    
    
    //第二种模糊查询:在mapper文件中拼接like的内容
    public List<Test> selectLikeTwo(String name);
}

おすすめ

転載: blog.csdn.net/weixin_46841376/article/details/114640654