Mybatis

作用:MyBatis 是一款优秀的持久层(负责将数据到保存到数据库的那一层代码)框架,用于简化 JDBC 开发

一、Mybatis开发步骤图

image.png


二、具体步骤

2.1、导入依赖
    即通过坐标的方式导入本模块需要的jar包

image.png


2.2、配置mybatis文件:(mybatis文件中主要包含:数据库的连接信息和加载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>

      <typeAliases> //可以简化映射文件中的type的书写,类似于cd到指定目录
          <!--name属性的值是实体类所在包-->
          <package name="com.itheima.pojo"/>
      </typeAliases>

      <environments default="development">
          <environment id="development">
              <transactionManager type="JDBC"/>
              <dataSource type="POOLED">
                  <!--数据库连接信息-->
                  <property name="driver" value="com.mysql.jdbc.Driver"/>
                  <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                  <property name="username" value="root"/>
                  <property name="password" value="root"/>
              </dataSource>
          </environment>
      </environments>
      <mappers>
          <!--加载sql的映射文件 单个加载模式-->
  <!--
          <mapper resource="com/itheima/Mapper/userMapper.xml"/>
  -->
          <!--Mapper代理方式  将mapper下的所有映射文件都加载进来-->
          <package name="com.itheima.Mapper"/>
      </mappers>
  </configuration>


2.3、编写实体类
    实体类中的内容与数据库表的内容一一对应。提供对应的属性(最好都使用包装类,因为当没有赋值时,属性值为null,有利于sql的书写)、get和set方法、tosting方法。

image.png


2.4、编写Mapper接口
    Mapper接口中书写的是与映射文件中对应的sql的抽象方法。
    书写时应当考虑的属性:
        1、参数:该方法是否要传递参数
        2、是否需要返回值
            2.1、如果需要,返回值类型是什么?

image.png


2.4、编写映射文件(可以通过接口直接生成,这样可以避免把名字写错了)
    映射文件中书写的是:对应接口中的sql语句。
        注意:1、sql语句的id要和接口中的方法名一样
             2、使用resultMap来映射实体类和数据库中名称不一致的属性。
                eg:    
                    <resultMap id="brandResultMap" type="brand">
                        <!--
                        id:完成主键字段的映射
                        column:表的列名
                        property:实体类的属性名
                        result:完成一般字段的映射
                        column:表的列名
                        property:实体类的属性名
                        -->
                    <result column="brand_name" property="brandName"/>
                    <result column="company_name" property="companyName"/>
                </resultMap>
             3、mapper的namespace必须是对应接口的全限定名
                eg:<mapper namespace="com.itheima.Mapper.BrandMapper">

2.5编写测试类
    public void testSelectAll() throws IOException {
    //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(true); //true表示自动提交事务 false则需要使用sqlSession.commit()来手动提交

    //3.获取Mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        //增删改查变化的只有:4、执行方法中的内容,其他代码都是不变的。
    //4、执行方法 
    List<Brand> brands = brandMapper.selectAll();
    System.out.println(brands);

    //4、释放资源
    sqlSession.close();
}

三、其他注意事项

3.1、使用注解开发(注解完成简单功能,配置文件完成复杂功能。)
    当sql语句比较简单时,可以在接口中使用注解代替映射文件来开发。
    eg:
        @Select(value = "select * from tb_user where id = #{id}")
        public User select(int id);

3.2、接口和映射文件要在同一目录下

红星哥哥
1 声望0 粉丝

努力学习的打工人


引用和评论

0 条评论