第四に、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);
}