zoukankan      html  css  js  c++  java
  • 七、持久层框架(MyBatis)

    一、MyBatis学习

      平时我们都用JDBC访问数据库,除了自己需要写SQL,还要操作Connection,Statement,ResultSet这些。

      使用MyBatis,只需要自己提供SQL语句,其他的工作,建立数据库连接,Statement等一些JDBC相关异常处理工作都交给了MyBatis去做了。只关心增删改查操作层面上。

    MyBatis的工作原理:

    每一个MyBatis的应用程序都可以一个SqlSessionFactory对象的实例为核心。首先是通过字节流InputStream通过Resource将配置文件读入,然后通过SqlSessionFactoryBuiler().build()方法创建SqlSessionFactory,然后在通过SqlSessionFactory.openSession()方法创建一个SqlSession为每一个数据库事务服务。经历了MyBatis初始化--->创建SqlSession--->运行SQL语句,返回结果

    1、建立数据库

    create database demo

    2、创建实体类

    package com.demo.pojo;
    
    public class Category{
        private int id;
        private String name;
        //属性的getter/setter方法
        publci int getId(){
            return id;
        }
        public vodi setId(int id){
            this.id=id;
        }
        public String getName(){
            return name;
        }
        public vodi setName(String name){
            this.name=name;
        }
    }
    View Code

    3、配置文件mybatis-config.xml

      相当于hibernate.cfg.xml

    作用:提供链接数据库用的驱动,数据库名称,编码方式,密码账号

    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8"/>
    <property name="username" value="root">
    <property name="password" value="admin">

    具体配置mybatis-config.xml如下:

    <?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>
    <!--自动扫描com.demo.pojo下的类型,使得在后续配置文件Category.xml种使用resultType的时候,可以直接使用Category,而不必写全cmo.demo.pojo.Category-->
        <typeAliases>
          <package name="com.demo.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://localhost:3306/how2java?characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="admin"/>
                </dataSource>
            </environment>
        </environments>
        <!--映射Category.xml-->
        <mappers>
            <mapper resource="com/dmeo/pojo/Category.xml"/>
        </mappers>
    </configuration>
    View Code

    4、配置文件Category.xml

      在包com.demo.pojo下,新建文件Category.xml

    <?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">
    <!--命名空间com.demo.pojo,在后续调用sql语句的时候,会用到它里面的sql语句-->
        <mapper namespace="com.demo.pojo">
        <!--sql语句用id:listCategory进行标示,以供后续代码调用。resultType="Category"表示返回数据和Category关联起来。-->
        <!--这里本应该使用com.demo.pojo.Category,但是在mybatis-config.xml中的配置了<typeAliases><package name="com.demo.pojo"/></typeAliases>,所以可以直接使用Category-->
            <select id="listCategory" resultType="Category">
                select * from   category_      
            </select>
        </mapper>
    View Code

    5、测试类TestMyBatis

    package com.demo;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.demo.pojo.Category;
    
    public class TestMyBatis{
        public static void main(String[] args) throw IOException{
        //根据配置文件mybatis-config.xml得到sqlSessionFactory
            String resource="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //根据sqlSessionFactory得到session
            SqlSession session=sqlSessionFactory.openSession();
            //根据session的selectList()方法,调用sql语句listCategory,listCategory这个就是在Category.xml种那条sql语句设置的id。
            List<Category> cs=session.selectList("listCategory");
            //List<Category> cs=session.selectList("com.demo.pojo.listCategory");效果一样,只是比较臃肿,建议用上面那个
            for(Category c:cs){
                System.out.println(c.getName());
            }
        }
    }
    View Code

    二、MyBatis的基本原理

    1、应用程序找到MyBatis要的数据

    2、MyBatis从数据库找到数据

      2.1、通过mybatis-config.xml定位哪个数据库

      2.2、通过Category.xml执行对应的select语句

      2.3、根据Category.xml把返回的数据库记录封装在Category对象中

      2.4、把多个Category对象装在一个Category集合中

    3、返回一个Category集合

  • 相关阅读:
    jquery $.ajax $.get $.post的区别
    浅析JQuery中的html(),text(),val()区别
    单词统计续
    第一阶段意见评论
    学习进度9
    第一阶段SCRUM冲刺10
    第一阶段SCRUM冲刺09
    单词统计
    第一阶段SCRUM冲刺08
    学习进度8
  • 原文地址:https://www.cnblogs.com/drq1/p/8532927.html
Copyright © 2011-2022 走看看