zoukankan      html  css  js  c++  java
  • Mybatis简介、环境搭建和详解

    简介:

      1、Mybatis  开源免费框架,原名叫iBatis,2010在google code,2013年迁移到github

      2、作用: 数据访问层框架

        2.1  底层是对JDBC的封装

      3、mybatis优点之一:

        3.1 使用mybatis时,不需要编写实现类,只需要写需要执行的sql命令。

    环境搭建:

      1、导入jar                   (之前把mysql的驱动包放入tomcat中了,所有在这里没有导入mysql驱动包)

           

      2、在src下新建全局配置文件(编写JDBC四个变量)

         2.1 在src目录下新建xml文件  (src/mybatis.xml)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration                  2-4是引入远程的DTD文件,进行代码的提示
     3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- default引用environment的id,当前所使用的环境 -->
     7     <environments default="default">
     8         <!-- 声明可以使用的环境 -->
     9         <environment id="default">
    10             <!-- 使用原生JDBC事务 -->
    11             <transactionManager type="JDBC"></transactionManager>
    12             <!-- 数据库的连接池 -->               配置JDBC四个变量
    13             <dataSource type="POOLED">         
    14                 <property name="driver" value="com.mysql.jdbc.Driver"/>
    15                 <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
    16                 <property name="username" value="root"/>
    17                 <property name="password" value="362222"/>
    18             </dataSource>
    19         </environment>
    20     </environments>
    21 <mappers>
    22        <mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/>
    23    </mappers>   24 </configuration>

       3、新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml 的文件

        3.1  文件的作用: 编写需要执行的SQL语句

        3.2  把xml理解成实现类

            实现过程是:mybatis底层将xml文件解析反射成实现类进行数据操作  

        3.3  配置过程    (com/bjsxt/mapper/FlowerMapper.xml)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <!-- namesapce:理解成实现类的全路径(包名+类名) -->
     6  <mapper namespace="a.b">
     7      <!-- id:方法名
     8              parameterType:定义参数类型
     9              resultType:返回值类型
    10              
    11              如果方法返回值是list,在resultType中写List的泛型,因为mybatis对
    12              jdbc封装,一行一行读取数据 
    13       -->                 通过反射找到自定义的类  (查询的是List集合,为什么类型是自定义的类??因为底层是对JDBC封装的(ResultSet一次只能读取一行数据),一行数据是一个实体类)
    14      <select id="sellAll" resultType="com.bjsxt.pojo.Flower">
    15          select * from flower
    16      </select>
    17  </mapper>

       4、测试结果(只有在单独使用mybatis时使用,最后ssm整合时下面代码不需要编写)

         4.1 新建一个包一个类进行测试

          

     1 package com.bjsxt.test;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11 
    12 import com.bjsxt.pojo.Flower;
    13 
    14 public class Test {
    15     public static void main(String[] args) {
    16         InputStream is = null;
    17         try {
    18             is = Resources.getResourceAsStream("mybatis.xml");
    19             
    20         } catch (IOException e) {
    21             // TODO Auto-generated catch block
    22             e.printStackTrace();
    23         }
    24         //使用工厂设计模式
    25         SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
    26         //生产SqlSession    SqlSession 封装了mybatis中所有的sql命令
    27         SqlSession session=factory.openSession();
    28         
    29         List<Flower> list = session.selectList("a.b.sellAll");
    30         for(Flower flower:list){
    31             System.out.println(flower.toString());
    32         }
    33         session.close();
    34     }
    35 }

      文件目录

            

    环境搭建详解:

      1、全局配置文件中内容

          1.1  <transactionManager/> type 属性可取值

            1.1.1 JDBC事务管理使用JDBC原生事务管理方式

            1.1.2 MANAGED 把事务管理转交给其他容器  (spring使用)

                     原生JDBC事务 setAutoMapping(false);

           1.2  <dataSouce/> type属性

            1.2.1 POOLED 使用数据库连接池

            1.2.2 UNPOOLED  不使用数据库连接池,和直接使用JDBC一样

            1.2.3 JNDI : java命名目录接口技术,(使用java通过接口调用别的语言程序)

    数据库连接池

          1、在内存中开辟一块空间,存放多个数据库连接对象。

          2、JDBC Tomcat Pool 直接由tomcat产生数据库连接池

          3、图示

            3.1 active 状态:当前连接对象被应用程序使用中

            3.2 ldle 空闲状态:等待应用程序使用

            

          4、使用数据库连接池的目的

             4.1  在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率。

              4.1.1 小型项目不适用数据库连接池

          5、实现JDBC tomcat Pool的步骤

                https://www.cnblogs.com/axu521/p/10056835.html    

     三种查询方式

        1、select()  返回值为List<resultType 属性控制>

          1.1  适用于查询结果都需要遍历的需求

     下面这是Test测试
    1
    List<Flower> list = session.selectList("a.b.sellAll"); 2 for(Flower flower:list){ 3 System.out.println(flower.toString()); 4 }

    下面只是FlowerMapper.xml文件
         <select id="sellAll" resultType="com.bjsxt.pojo.Flower">
             select * from flower
         </select>

          2、selectOne()  返回值Object

          2.1 适用于返回结果只是变量或一行数据时

      下面这是Test测试
    1
    int i=session.selectOne("a.b.selById"); 2 System.out.println(i);

      下面这是FlowerMapper.xml文件中
         <select id="selById" resultType="int">
             select count(*) from flower
         </select>

        3、selectMap()  返回值 Map

          3.1 适用于需求需要在查询结果中通过某列的值取到这行数据的需求

          3.2 Map<Key,resultType控制>

       下面这是Test测试    
    //把数据库中哪个列的值当做map的key Map<Object, Object> map = session.selectMap("a.b.c","name"); System.out.println(map);
      下面这是FlowerMapper.xml文件中
       <select id="c" resultType="com.bjsxt.pojo.Flower">
         select * from flower
         </select>

      

    好好学习,天天向上。 努力工作,给自己的和家人一个满意的答案。。。。
  • 相关阅读:
    Nim教程【七】
    Nim教程【六】
    博客园博客撰写工具【开源】(可以直接黏贴图片)
    Nim教程【五】
    Nim教程【四】
    Nim教程【三】
    Nim教程【二】
    Nim教程【一】
    开发人员面试题目分享(来看看不一样的面试题吧)【第二弹】
    基于.net开发chrome核心浏览器【七】
  • 原文地址:https://www.cnblogs.com/axu521/p/10056113.html
Copyright © 2011-2022 走看看