Mybatis接口代理的基本使用(详解)

Mybatis

        因为JDBC的代码过于繁琐,代码复用性不高,效率低下,所以出现了Mybatis框架也就是所mybatis是操作数据库,mybatis作用于持久层,

Mybatis的作用

  • Mybatis就是帮助程序员将数据存取到数据库里面。
  • 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .
  • MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射。

MyBatis的优点

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解耦:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
    • 提供xml标签,支持编写动态sql。

      Mybatis的使用

      1、创建mybatis的配置文件,mybatis-config.xml,用于配置mybatis的配置信息

              1.1、配置文件表头不做解释,直接copy

              1.2、标签:是mybatis中的根标签,所有配置都在该标签里面书写

              1.3、标签:用于导入配置数据库的配置,避免代码硬编译(下次修改数据库时不需要对源代码进行修改,利于维护)

              1.4、标签:mybatis的环境(环境标签,default指代标签里面环境的id),可以是多个环境中切换,如测试环境,或者运行环境

              1.5、 标签:启用的事务,这里使用的是JDBC

              1.6、标签:配置数据库的连接,驱动,url,用户名,密码等

              1.7、标签:映射sql文件所在的路径(这里是在同一文件夹下)

      <?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>
      <!--    加载properties文件-->
          <properties resource="db.properties"></properties>
          <environments default="development">
              <environment id="development">
              <!--                    事务   -->
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
      <!--                    驱动-->
                      <property name="driver" value="${driver}"/>
      <!--                url               ;serverTimezone=UTC;useSSL=false;     -->
                      <property name="url" value="${url}"/>
                      <property name="username" value="${username}"/>
                      <property name="password" value="${password}"/>
                  </dataSource>
              </environment>
          </environments>
      <!--    加载执行sql配置文件的路径    -->
          <mappers>
              <mapper resource="UserMapper.xml"/>
          </mappers>
      </configuration>

      2、sql映射xml文件、

      2.1、标签:指定使用映射文件的java类路径(这里使用的接口)

      2.2、标签:使用的是查询语句,注意:这里的id对应的是接口中的方法,需要保持一致, resultType="com.wzk.pojo.User"参数表示返回值的类型

      <?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.wzk.mapper.UserMapper">
          <!--    id:唯一标识     resultType:返回类型是User类型   注意:返回的类型需要与数据库中的字段保持一致否则无法映射-->
      <!--    使用动态代理时:id需要与接口中的方法一致,才能够映射-->
          <select id="selectById" resultType="com.wzk.pojo.User">
              select * from user where id = #{id}
          </select>
      </mapper>

      3、接口Java类

      import com.wzk.pojo.User;
      
      /**
       * @author Administrator
       * @date 2023/9/1
       **/
      public interface UserMapper {
          User selectById(Integer id);
      }

      4、测试类

      /**
       * @author wzk
       * @date 2023/9/1
       **/
      public class TestMybatis {
          @Test
          public void test01() throws IOException {
             //   读取映射文件
              InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
              //   创建sqlSessionFactory对象
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      //        获取SqlSession(相当于Connection)
              SqlSession session = sqlSessionFactory.openSession();
              //底层使用动态代理
              UserMapper mapper = session.getMapper(UserMapper.class);
              //执行sql
              User user = mapper.selectById(1);
              System.out.println(user);
              //关闭资源
              session.close();
          }
      }

      注意:

      • 1、在项目中的文件可以统一放在config包下,方便使用

      • 2、使用接口代理(如:UserMapper)时,接口中的方法需要于对应的配置文件(如:UserMapper.xml)文件中执行sql的id进行对应

      • 3、在数据库中的变量名于实体类中的变量名不一致时,可以使用标签中的属性进行对应

        <?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.hqyj.gyq.mapper.UserMapper">
        
            <resultMap id="showUser" type="com.hqyj.gyq.entity.User">
                <id property="id" column="id"></id>
                <result property="userName" column="user_name"></result>
                <result property="userAge" column="user_age"></result>
                <result property="userSex" column="user_sex"></result>
            </resultMap>
            <!--接口方式访问,id值必须跟接口中的方法名一样-->
            <select id="selectUserById" parameterType="int" resultMap="showUser">
                select * from t_user where id = #{id}
            </select>
        </mapper>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值