前言
通过上文对Maven有的一个基本入门,我们已经对Maven有了一个初步的体会,接下来我将结合我近期看的书本知识和借助搜索引擎对Maven的每一个元素,各种原理进行解释。该一系列文章为本人学习过程中所做的记录,可能存在疏漏或者错误的地方,望读者不吝指教。
配置文件和映射器
入门项目webapp3的项目结构中,我们新建了三个文件,现在来分析它们的名称和作用。
映射器和配置文件什么是映射器?映射器的主要作用是将SQL查询到结果映射为一个POJO,或者将POJO的数据插入到数据库中,并定义一些关于缓存等的重要内容。
POJO(Plain Ordinary Java Object)是简单的javaBeans,也就是我们常常写的对象实体类,映射器能将java对象和数据库表中的数据交互。
映射器的实现有两种,官方推荐使用的是使用一个接口和xml文件;另外一种是使用一个接口并在接口中写入注解(这种方式创建简单,但是有时过多的SQL语句使注解繁多,代码可读性下降)
什么是配置文件?对Mybatis框架某些属性进行配置的文件。
使用xml实现映射器
项目中使用的是这种映射器方式
步骤 | 内容 |
---|---|
步骤一 | 定义POJO,例子中指entity中的Category.java。 |
步骤二 | 建立接口文件CategoryMapper.java。(这个例子是特例,没有建立接口) |
步骤三 | 建立xml文件CategoryMapper.xml。 |
步骤四 | 在配置文件mybatis-config中引入映射器。 |
引入映射器
mybatis-config.xml配置文件中的代码指引入映射器:
<mappers>
<mapper resource="main/com/test/entity/Category.xml"/>
</mappers>
引入映射器由好几种方法,介绍主要的3种方法
<mappers>
<!--先找xml再找接口,xml和接口可以在不同包-->
<mapper resource="main/com/test/mapper/CategoryMapper.xml"/>
<!--先找接口再找xml,xml和接口在同一包-->
<!--<package name="main.com.test.mapper"/>-->
<!--先找接口再找xml,xml和接口在同一包-->
<!--<mapper class="main.com.test.mapper.CategoryMapper"/>-->
</mappers>
1.用文件路径引入映射器。(例子中使用的)
<mappers>
<!--先找xml再找接口,xml和接口可以在不同包-->
<mapper resource="main/com/test/entity/Category.xml"/>
</mappers>
2.用包名引入映射器
<mappers>
<!--先找接口再找xml,xml和接口在同一包-->
<package name="main.com.test.mapper"/>
</mappers>
3.用类注册引入映射器
<mappers>
<!--先找接口再找xml,xml和接口在同一包-->
<mapper class="main.com.test.mapper.CategoryMapper"/>
</mappers>
映射器xml文件和接口
CategoryMapper.xml中,只有元素<mapper>,在<mapper>中写着我们编写的SQL语句
<mapper namespace="main.com.test.mapper.CategoryMapper">
<select id="getCategoryList" resultType="Category">
select * from category_
</select>
</mapper>
- <mapper>元素中的属性namespace所对应的是接口的全限定名,Mybatis通过它找到对应的接口
- <select>元素是查询语句,属性id是这条语句的唯一标识,属性resultType表示返回值的类型,在<select>元素中编写SQL语句
CategoryMapper.java接口中,方法要和xml文件中SQL语句的id一致,Mybatis才能够实现自动映射的功能(执行该方法执行对应的SQL语句)
public interface CategoryMapper {
List<Category> getCategoryList();
}
使用注解实现映射器
映射器中的SQL语句可以不使用xml文件,而是用注解的形式补充在接口对应的方法上,可以把CategoryMapper.java修改为
public interface CategoryMapper {
@Select("select * from category_")
List<Category> getCategoryList();
}
配置文件中改为类名注册
<mappers>
<!--先找xml再找接口,可以在不同包-->
<!--<mapper resource="main/com/test/mapper/CategoryMapper.xml"/>-->
<!--先找接口再找xml,同一包-->
<!--<package name="main.com.test.mapper"/>-->
<!--先找接口再找xml,同一包-->
<mapper class="main.com.test.mapper.CategoryMapper"/>
</mappers>
将CategoryMapper.xml注释掉代码
<mapper namespace="main.com.test.mapper.CategoryMapper">
<!--<select id="getCategoryList" resultType="Category">-->
<!--select * from category_-->
<!--</select>-->
</mapper>
重新运行代码,运行正常
使用注解实现映射器比xml实现映射器简单得多,如果它和xml方式同时定义时,xml方式将覆盖掉注解方式,所以Mybatis官方推荐使用的是xml方式。同时如果SQL语句复杂,导致注解增多,代码可读性下降
发送SQL的两种方式
//测试类
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
// 方法一:
List<Category> cs =session.selectList("getCategoryList");
// 方法二:
// CategoryMapper c = session.getMapper(CategoryMapper.class);
// List<Category> cs = c.getCategoryList();
for(Category cc:cs){
System.out.println(cc.getName());
}
}
}
SqlSession发送SQL
方法一是使用SqlSession发送SQL,它的参数是接口中的方法和实参组成
Mapper发送SQL
方法二是使用Mapper发送SQL,它调用SqlSession的getMapper方法,并赋给对象,所以使用接口中的某个方法:对象名.xx
网友评论