在IDEA中使用mybatis进行开发(包括Mapper代理)

在IDEA中使用mybatis进行开发(包括Mapper代理)

本篇是个人观看视频学习后的总结,方便今后重新学习配置,所以十分冗长

1.创建项目,导入mybatis坐标

首先要在idea中配置好maven,然后创建maven项目。在pom.xml中配置依赖,包括mybatis,mysql,junit单元测试,日志等。请看图:
在这里插入图片描述
在这里插入图片描述

<dependencies>
        <!--添加mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!--junit 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!--添加slf4j日志api-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!--添加logback-classic依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!--添加logback-core依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

可以复制一份以后都能使用。
注意logback需要配置文件,

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>
    <!--包名-->
    <logger name="com.test" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>

    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

命名为logback.xml放入resources内就行了。

2.编写mybatis配置文件,

配置文件是用来替代数据库连接信息的。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="自己的路径"/>
                <property name="username" value="数据库用户名"/>
                <property name="password" value="数据库密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql映射文件(xxx.xml),这边可以先看第三点编写sql映射文件后再写-->
        <mapper resource="UsersMapper.xml"/>
    </mappers>
</configuration>

取名mybatis-config.xml同样放入resources内。

3.编写SQL的映射文件

根据用途取名为xxxMapper.xml,比如我执行SQL是为了查询用户表的,那就可以叫UserMapper.xml方便查找。(最后同样是放入resources内)

<?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:名称空间
-->
<mapper namespace="自己取"><!--今后执行sql语句是通过namespace.id查找对应sql的-->
	<!--在这里定义自己的SQL语句,id是对应语句的唯一标识,resultType是语句执行后的返回值类型-->
    <select id="自己取" resultType="根据自己情况(类的路径)">
        select * from tb_user;
    </select>
</mapper>

这边的sql映射文件写完后就能在mybatis配置文件里面加载了

4.配置完成后正式写代码

//1.加载mybatis的核心配置文件,获取SqlSessionFactory,要抛出异常
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取SqlSession对象,用它执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        //传入的test.selectAll就是自己在sql映射文件中写的namespace.id								
        //List<User> users则是我的返回类型,根据自己的sql作用设计
        List<User> users = sqlSession.selectList("test.selectAll");
        System.out.println(users);

5.使用Mapper代理开发

看上图,如果每次执行sql都要传入 namespace.id,那代码的灵活性就降低了,而且每次都要去查找我要执行的sql语句的id是什么,很麻烦。
所以就有了Mapper开发。
1.首先写一个mapper接口,要求该接口要和对应的.xml映射文件在同一个目录下。但在maven规格下.xml文件和代码都是分开的,所以采取另一种方法。
在这里插入图片描述
在这里插入图片描述
看图,我们的接口在com.test.mapper包下,所以只要在resource中new一个Directory,然后将sql映射文件放入,注意命名为com/test/mapper,这个很重要,虽然在idea中用/和.隔开后显示的包名一样,但编译后,以/隔开命名的会生成分层的文件夹,如下图
在这里插入图片描述
如果命名的时候用 . 隔开,只会生成一个叫com.test.mapper的文件夹。
按照以上方法,接口和对应的.xml映射文件经编译后就在同一个目录下了。

2.修改对应.xml映射文件命名空间的值

<!--
    namespace:名称空间
    要将namespace的值改成接口的路径
-->
<mapper namespace="com.test.mapper.UserMapper">
    <select id="selectAll" resultType="com.test.pojo.User">
        select * from tb_user;
    </select>
</mapper>

这样的意义是什么呢?也就是我们的UserMapper接口会有一个方法叫做selectAll(就是配置文件中的id),它的返回值就是com.test.pojo包下的User类,当然,因为该sql是为了查表中所有的数据,所以在接口中它的返回值应该写成List< User> 。
由于我们在resources里面加了com.test.mapper包,所以mybatis-config.xml下加载映射文件的配置也要改(就是改UserMapper.xml的路径)

<mappers>
        <!--加载sql映射文件(xxx.xml)-->
        <mapper resource="com/test/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3.正式编程

//3.执行sql,前面两步都是加载配置获取对象都一样就不再重复
        //List<User> users = sqlSession.selectList("test.selectAll");
        //获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();
        System.out.println(users);

有些人可能觉得mapper代理也很繁琐,没有感受到它的好处,其实这样写我今后就可以直接面向接口去开发,而不用像之前还要去找到对应的sql的命名空间和id,只要文件配置好了,我们就只需把注意力集中到接口去就行了。

还有,在mybatis-config.xml文件下还要加载sql映射文件,我们今后只要如下图操作
在这里插入图片描述

将加载映射文件改成package name使用包扫描,直接将resources下的包导入,以后不管再增加什么sql映射文件,我们都不需要再次手动导入

此外,idea中还有MyBatisX插件供我们使用,在接口中定义方法,还能通过alt+enter在.xml文件中帮你定义,通过鸟的图标快速在接口和映射文件中转换。这边就不再细说了。

本篇是个人观看视频学习后的总结,方便今后重新学习配置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfhua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值