Mybatis(4)---封装Mybatis的输出结果,like查询

四、封装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>

第二种方式

<!--
    第二种方式:
        使用<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));
    }
}

解决列名和属性名不一样的第二种方式

使用列别名解决,定义的类别名就是你定义的类的属性名

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

3.like查询

在mybatis中使用like查询的两种方式

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.2 第二种方式

采用字符串拼接的方式

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
今日推荐