程序员IT技术篇Java Web知识

Maven学习(一)

2019-03-02  本文已影响7人  giraffecode9668

前言

通过上文对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>

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

上一篇下一篇

猜你喜欢

热点阅读