Write and flow in life.|

逐东

园龄:3年3个月粉丝:1关注:0

2021-12-02 19:06阅读: 34评论: 0推荐: 0

Mybaits学习初步抽象心得,学习搭建一个mybaits项目以及如何阅读文档

​ 先记录项目搭建过程,最后提炼心得。

使用Mybaits的目的就是为了简化对数据库操作,它替换了JDBC绝大部分冗余代码,本来JDBC实现sql查询数据是需要加载驱动创建连接然后使用连接对象创建Statement对象,再用Statement对象执行sql语句返回结果集,执行sql语句步骤在Dao接口的实现类的代码中,增加了操作数据库的sql语句与代码实现的耦合。

​ 于是Mybaits将sql与代码分离(sql可以写在xml里,不必为Dao接口增加实现类),还避免了很多JDBC操作的重复代码块,使存取数据操作更加方便,更好维护。只需要几个jar包配置几个sql映射的xml文件就可以实现。

接下来记录使用Maven搭建一个简单的Mybaits查询项目配置。

从逻辑视角进行项目搭建的步骤

  1. 创建一个maven项目

  2. 在maven配置文件中引入msql、mybaits、junit依赖

     <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.46</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
  3. 在resource文件夹中创建mybatis-config.xml,文档中有配置模板,将配置复制进mybatis-config.xml然后填好。

    <?xml version="1.0" encoding="UTF8" ?>
    <!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="jdbc:mysql://localhost:3306/library?
    useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
                    <property name="username" value="root"/>
                    <property name="password" value="abc123"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <!--
    		此映射关系十分重要,它告诉Mybaits去哪里找定义的SQL语句,所以每建立一个sql映射就得在此处标出
    		详见https://mybatis.org/mybatis-3/zh/configuration.html#mappers
     		-->
            <mapper resource="com/yi/dao/UserMapper.xml"/>
        </mappers>
    </configuration>
    
  4. 根据文档中的入门内容,Mybaits运行流程为:

    image-20211202182432655

  5. 所以我们需要在包下建立一个utils类来为mybaits导入核心配置文件和创建SQLSessionFactory,再使用此工厂创建SQLSession对象。(相当于初始化Mybaits)

    //MybatisUtils
    private static SqlSessionFactory sqlSessionFactory;
    static{
        //初始化SqlSessionFactory对象
        try{
                String resource = "mybaits-config.xml";
        InputStream inputStream = Resource.getResourceAsStream(resource);
        sqlSessionFactory = new sqlSessionFactoryBuilder().build(inputStream);
        }catch(IOExcepiton e){
            e.printStackTrace();
        }
    }
    	//获取SQLSession连接
    	public static SqlSession getSesion() {
            return sqlSessionFactory.openSession();
        }
       
    }
    
  6. 至此,我们只剩下一下四样没有配置。

    1. Dao接口(也就是Mapper,操作数据库的CRUD等方法的定义),以UserDao为示例

      public interface UserDao{
          List<User> selectAllUser();
      }
      
    2. 与Dao接口同包下的xxx(示例为User)Mapper.xml(填写sql语句与参数传值和返回值类型)

      <?xml version="1.0" encoding="UTF8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <!--绑定一个对应的DAO接口-->
      <mapper namespace="com.yi.dao.UserDao">
      		//id填方法名,返回类型填对应实体类名
              <select id="selectAllUser" resultType="com.yi.pojo.User">
              select * from User
              </select>
      </mapper>
      
      
      
    3. 实体类,建立与数据库对应的成员变量与getter&setter,构造器与toString

    4. 数据库中与实体类相对应的表

  7. 最后以上4步完成后,我们就可以通过在测试类中拿到sqlSession对象,将对应Dao接口的.class对象传给此对象(让此SQLSession对象知道Dao接口中的结构),然后将此对象赋给Dao接口的引用,使用此引用就可以调用Dao中定义的各种方法,实现CRUD操作。

    @Test
    public void test(){
        //拿到sqlSession对象
        SqlSessiojn sqlSession = MybatisUtils.getSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userlist = mapper.selectAllUser();
        
        for.userlist.sout
        sqlSession.close();
    }
    

    从项目结构图的视角

    另外一个视角,以此项目结构图来进行建立抽象模型,刚才的操作过程就是:

    1. 在最下面的pom.xml引入相关依赖
    2. 在resources中配置好mybaits核心xml文件。
    3. 建立utils包下工具类,实现mybaits初始化并提供获取SQLSession对象的方法。
    4. 创建实体类与数据库中对应表以供测试使用。
    5. 新建dao包下Dao(Mapper)接口,在里面定义一个查询方法,然后新建同包下的xxxMapper.xml,与此Dao接口绑定好,并在里面写下sql语句相关操作。
    6. 建立test中测试类进行测试。

绝对需要注意的问题:maven静态资源导入的问题。

​ maven默认只导入resources路径下的静态资源。这里的静态资源说的就是xml文件。也就是说如果不在pom.xml中进行配置,那么maven项目默认编译后只会将resources的xml导入target文件夹中,dao中的xml资源被项目无视。导致资源绑定失败,报的错应该是register失败。此时需要在pom.xml中进行如下配置:

<!--build中配置resources,防止资源导出失败问题-->
    <build>
    <resources>
        <resource>
            <directory>src/main/resource</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

这样,编译之后查看target文件夹,就会发现资源成功导入(如果不配置上面那段,下面的dao中的bookCaseMapper.xml编译后进不去target)

image-20211202185903265

如何阅读文档?从Mybaits文档中学习到了什么?以后阅读文档入门一门新技术时需要注意什么问题?

本文作者:逐东

本文链接:https://www.cnblogs.com/vuds/articles/15634797.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   逐东  阅读(34)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起