这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用
Mapper 代理方式(如下图)则不存在硬编码问题。
根据UserMapper.xml文件配置相关的UserMapper接口,在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
UserMapper,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">
<!--
namespace:名称空间,后跟com.itwq.mapper.UserMapper必须为接口的路径
-->
<mapper namespace="com.itwq.mapper.UserMapper">
<!-- id="selectALL" id后内容为唯一标识 resultType="com.itwq.User" 使用代码块 -->
<select id="selectALL" resultType="com.itwq.User">
select * from tb_user;
</select>
</mapper>
注意resources的包命名用 / 代替 .
UserMaooer接口
package com.itwq.mapper;
import com.itwq.User;
import java.util.List;
public interface UserMapper {
List<User> selectALL();//查询数据库所有数据,返回为列表List<User>
}
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就
是将核心配置文件的加载映射配置文件的配置修改为
<mappers>
<!--加载映射文件-->
<!-- <mapper resource="com/itwq/mapper/UserMapper.xml"/>-->
<!-- mapper代理方法-->
<package name="com.itwq.mapper"/>
</mappers>
Maybaits测试类
public class MyBaitsDemo {
public static void main(String[] args) throws IOException {
// String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//List<User> users = sqlSession.selectList("test.selectALL");
//获取UseMapper接口代理对象对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectALL();
System.out.println(users);
sqlSession.close();
}
}
小知识
类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写
在MyBaits核心配置文件下配置,可在MyBaits官网找到
注意书写位置,要在核心设置前
<typeAliases>
<package name="com.itwq"/>
</typeAliases>