传统的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映射文件中的namespace与mapper接口的全限定名相同
2.Mapper接口方法名和Mapper.xml映射文件中定义的每个statement的id相同
3.Mapper接口方法的输入参数类型和mapper.xml映射文件中定义的每个sql的parameterType的类型相同
4.Mapper接口方法的输出参数类型和mapper.xml映射文件中定义的每个sql的resultType的类型相同