Mybatis在dao层中的开发使用

传统的dao层开发方式

步骤总结:

1.编写UserMapper接口

2.编写UserMapper实现类

3.编写UserMapper.xml映射文件

4.编写测试类

正文详解(此处以emp表为例):

1.编写EmpMapper接口

package com.lagou.dao;

import java.io.IOException;
import java.util.List;

public interface interfaceEmp {

    public List<Emp> selectAll() throws IOException;
}

2.编写EmpMapper实现类

package com.lagou.dao;

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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class EmpImpl implements interfaceEmp {

    @Override
    public List<Emp> selectAll() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();

        List<Emp> emps = sqlSession.selectList("EmpMapper.select");

        return emps;
    }
}

3.编写EmpMapper.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="EmpMapper">

    <!--编写相关的SQL语句:查询emp表中所有数据-->
    <select id="select" resultType="com.lagou.dao.Emp">
        select * from emp
    </select>

</mapper>

4.编写测试类

package com.lagou.Test;

import com.lagou.dao.Emp;
import com.lagou.dao.EmpImpl;import org.junit.Test;

import java.io.IOException;import java.util.List;

public class EmpTest {/**
     * 调用方法实现测试
     * @throws IOException
     */
    @Test
    public void test() throws IOException {

        EmpImpl emp = new EmpImpl();
        List<Emp> emps = emp.selectAll();
        for (Emp emp1 : emps) {
            System.out.println(emp1);
        }
    }
}

详解:

传统的开发方式中,需要编写UserMapper接口的实现类,并且实现类的内容大体相似,所以mybatis提供了接口的动态代理,此时只需要编写接口和Mapper.xml映射文件,不需要重复编写实现类。

代理后的dao层开发方式

开发步骤:

1.编写UserMapper接口

2.编写UserMapper.xml映射文件

3.编写测试类

正文详解(此处以emp表为例):

1.编写EmpMapper接口

package com.lagou.dao;

import java.io.IOException;
import java.util.List;

public interface interfaceEmp {

    public List<Emp> selectAll() throws IOException;
}

2.编写EmpMapper.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="com.lagou.dao.InterfaceEmp">

<select id="selectAll" resultType="com.lagou.dao.Emp">
select * from emp
</select>

</mapper>

备注:EmpMapper.xml配置文件和EmpMapper接口要保持同包同名(resoures资源目录下的路径)

3.编写测试类

package com.lagou.Test;

import com.lagou.dao.Emp;
import com.lagou.dao.EmpImpl;
import com.lagou.dao.InterfaceEmp;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class EmpTest {

    /**
     * 代理方式后,查询所有emp表中所有数据
     */
    @Test
    public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();

        InterfaceEmp mapper = sqlSession.getMapper(InterfaceEmp.class); //注意,这里是获取getMapper()方法,参数是 接口名.class,也就是表示该接口的实现类
        List<Emp> emps = mapper.selectAll();
        for (Emp emp : emps) {
            System.out.println(emp);
        }

        sqlSession.close();

    }
}

备注:当修改映射文件和接口文件同包同名后,注意SqlMapConfig.xml文件中的加载映射配置

知识点总结:

当采用代理方式在dao层使用mybatis时,编写步骤分为以下几步:

1.编写XxxMapper接口;

2.编写XxxMapper.xml配置文件(注意与接口保持同包同名);

3.编写测试代码;

备注:接口和配置文件在编写的过程中,必须保持如下图的对应关系

1.Mapper.xml映射文件中的namespacemapper接口的全限定名相同
2.Mapper接口方法名和Mapper.xml映射文件中定义的每个statementid相同
3.Mapper接口方法的输入参数类型和mapper.xml映射文件中定义的每个sqlparameterType的类型相同
4.Mapper接口方法的输出参数类型和mapper.xml映射文件中定义的每个sqlresultType的类型相同

原文地址:https://www.cnblogs.com/aloneme/p/14317364.html