zoukankan      html  css  js  c++  java
  • Mybatis

    Mybatis

    MyBatis本是apache的一个开源项目iBatis,2010年这个项目有Apache software foundation 迁移到了Google code,并改名MyBatis.2013年11月迁移到Github。iBatis是半ORM映射框架,它需要在数据库里手动建表,CURD操作时要自己写SQL语句,而Hibernate是全ORM映射框架,它只需要配置好文件,表会自动生成,CURD的SQL语句也是自动生成的,这是他们的主要区别。

    MyBatis小巧,简单易学

    MyBatis入门案例(综合)

    1.1附加架包

    1.2编写MyBatis配置文件 mybatis-comfig.xml(由于本人oracle数据库安装的问题端口号及数据库有所不同)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <!--  别名的配置      Dept-->
        <typeAliases>
            <typeAlias type="cn.mybatis.entity.Dept" alias="Dept"/>
        </typeAliases>
         
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" value="oracle.jdbc.OracleDriver" />
                    <property name="url" value="jdbc:oracle:thin:@localhost:1522:orc" />
                    <property name="username" value="bxq" />
                    <property name="password" value="bxq" />
                </dataSource>
            </environment>
        </environments>
        <!--关联小配置-->
        <mappers>
            <mapper resource="cn/mybatis/entity/Dept.xml" />
            <mapper resource="cn/mybatis/entity/Dept2.xml" />
        </mappers>
         
     
    </configuration>

    1.3编写Dept实体类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package cn.mybatis.entity;
     
    public class Dept {
        private Integer deptNo;//部门编号
        private String deptName;//部门名称
        private String deptCity;//部门所在地址
        public String getDeptCity() {
            return deptCity;
        }
        public void setDeptCity(String deptCity) {
            this.deptCity = deptCity;
        }
        public Integer getDeptNo() {
            return deptNo;
        }
        public void setDeptNo(Integer deptNo) {
            this.deptNo = deptNo;
        }
        public String getDeptName() {
            return deptName;
        }
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
        @Override
        public String toString(){
            return "Dept [deptNo= " + deptNo +", deptName=" + deptName+",deptCity"+deptCity+"]";
        }
    }

    1.4编写Dept.xml小配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?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="cn.mybatis.entity.Dept">
     
    <resultMap type="Dept" id="resultMapper">
        <result property="deptName" column="deptName"/>
        <result property="deptNo" column="deptNo"/>
        <result property="deptCity" column="deptCity"/>
    </resultMap>
         <!--代替"*"的方法-->
        <sql id="columns"><br>          <!--植入所需要的列名-->
            deptNo,deptName,deptCity
        </sql>
      <!--++++++++++++++++++++++++++resultMap 实现结果映射++++++++++++++++++++-->
            <!-- 查询部门信息   resultMap 实现结果映射 -->
            <select id="selectAllDeptMapper" resultMap="resultMapper">
                select * from dept
            </select>
            <!-- 代替"*"  连接sql标签的id="columns"-->
            <select id="selectAllDeptUseAlias" resultType="Dept">
                select <include refid="columns"/> from dept
            </select>
     
        <!-- +++++++++++++++++++++++++++++++分割线+++++++++++++++++++++++++++ -->
     
         
        <!-- 1.1查询部门所有信息 -->
            <select id="selectAllDept" resultType="Dept">
            <!--查询所有部门信息  -->
            <!-- SQL不区分大小写 -->
                select * from dept
            </select>
             
        <!-- 增加部门信息 -->
            <insert id="insertDept" parameterType="Dept">
                insert into dept values(#{deptNo},#{deptName},#{deptCity})
            </insert>
             
        <!-- 删除信息 -->
            <delete id="deleteDept" parameterType="Dept">
             
                delete from dept where deptNo=#{deptNo}
            </delete>
             
        <!-- 修改信息 -->
            <update id="updateDept" parameterType="Dept">
             
                update dept set deptName=#{deptName} where deptNo=#{deptNo}
            </update>
             
        <!-- 模糊查询 -->
            <select id="likeDept" parameterType="Dept" resultType="Dept">
             
                select * from dept where deptName like '%${deptName}%'
            </select>
        </mapper>

    1.5书写MyTest测试类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    package cn.mybatis.Test;
     
    import java.io.IOException;
    import java.io.Reader;
    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 org.junit.Before;
    import org.junit.Test;
     
    import cn.mybatis.entity.Dept;
     
    public class MyTest {
         
        SqlSession session;
        @Before
        public void initData() throws IOException{
               Reader  reader=Resources.getResourceAsReader("mybatis-config.xml");        
              SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);       
              session= factory.openSession();
        }  
         @Test
           public void testselectAllDept() throws IOException{
              //在xml配置中的一个锁定唯一SQL的id
              List<Dept> selectList = session.selectList("selectAllDept");
              for (Dept dept : selectList) {
                  System.out.println(dept);
              }
           }   
         //模糊查詢
        @Test
        public void likeTest(){
            Dept dept = new Dept();
            dept.setDeptName("市场");
            List<Dept> list = session.selectList("cn.mybatis.entity.Dept.likeDept",dept);
            for (Dept item : list) {
                System.out.println(item);
            }
            session.close();
        }
        //修改
        @Test
        public void updateTest(){
            Dept dept = new Dept();
            dept.setDeptNo(5);
            dept.setDeptName("开发部");
            int count = session.update("cn.mybatis.entity.Dept.updateDept",dept);
            session.commit();
            System.out.println(count+"update ok!!!");
            session.close();
        }
        //删除
         @Test
           public void testdeleteDept() throws IOException{
             Dept dept = new Dept();
              dept.setDeptNo(8);
              int count = session.delete("cn.mybatis.entity.Dept.deleteDept",dept);
              session.commit();
              System.out.println(count+"del ok!");
           }
         //增加
         @Test
           public void testinsertDept() throws IOException{
             Dept dept = new Dept();
             dept.setDeptNo(8);
             dept.setDeptName("财务部1");
             dept.setDeptCity("上海");
              int count = session.insert("cn.mybatis.entity.Dept.insertDept",dept);
              session.commit();
              System.out.println(count+"insert ok!!!");
           }
          
          
         /*
          * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          *  resultMap的使用
          */
          
          
        @Test
        public void testresultMap() throws IOException{
            List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
            for (Dept dept : list) {
                System.out.println(dept);
            }
            session.close();
        }
        @Test
        public void selectAllDeptUseAlias() throws IOException{
            List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
            for (Dept dept : list) {
                System.out.println(dept);
            }
            session.close();
        }
          
        /*
         * 动态查询+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         */
        @Test
         public void TestdynamicSelect() throws IOException{
             Dept dept = new Dept();
             dept.setDeptName("市场部");
             dept.setDeptNo(4);
             dept.setDeptCity("北京");
             List<Dept> list = session.selectList("cn.mybatis.dao.IDeptDao.dynamicSelect",dept);
             for (Dept dept2 : list) {
                System.out.println(dept2);
            }
         }
        //动态修改
        @Test
         public void Testdynamicupdate() throws IOException{
             Dept dept = new Dept();
             dept.setDeptName("市场部1");
             dept.setDeptNo(4);
             dept.setDeptCity("北京");
            int count = session.update("cn.mybatis.dao.IDeptDao.dynamicUpdate",dept);
                System.out.println(count);
                session.close();
            }   
    }

    由于测试方法过多我们简单的运行出来一二个看一下结果

    查询:

    删除:

    2. 动态查询

    2.1编写Dept2.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?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="cn.mybatis.dao.IDeptDao">
        <!-- 1.1查询部门所有信息 -->
            <select id="selectDeptByNo" parameterType="int" resultType="Dept">
            <!--查询所有部门信息  -->
            <!-- SQL不区分大小写 -->
                select * from dept where deptNo=#{deptNo}
            </select>
             
            <select id="getMapper" resultType="Dept">
                select * from dept
            </select>
             
            <!-- 动态查询 -->
            <select id="dynamicSelect" parameterType="Dept" resultType="Dept">
                select * from dept
                <where>
                    <if test="deptNo!=null">
                        and deptNo=#{deptNo}
                    </if>
                    <if test="deptName!=null">
                        and deptName=#{deptName}
                    </if>
                    <if test="deptCity!=null">
                        and deptCity=#{deptCity}
                    </if>
                </where>
            </select>
             
             
            <!-- 动态修改 -->
            <select id="dynamicUpdate" parameterType="int" resultType="Dept">
                update dept
                <set>
                    <if test="deptNo!=null">
                         deptNo=#{deptNo},
                    </if>
                    <if test="deptName!=null">
                         deptName=#{deptName},
                    </if>
                    <if test="deptCity!=null">
                         deptCity=#{deptCity},
                    </if>
                </set>
                    where deptNo=#{deptNo}
            </select>
             
             
        </mapper>

    2.3在1.5 书写MyTest测试类中可找到我们需要的测试类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /*
         * 动态查询+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         */
        @Test
         public void TestdynamicSelect() throws IOException{
             Dept dept = new Dept();
             dept.setDeptName("市场部");
             dept.setDeptNo(4);
             dept.setDeptCity("北京");
             List<Dept> list = session.selectList("cn.mybatis.dao.IDeptDao.dynamicSelect",dept);
             for (Dept dept2 : list) {
                System.out.println(dept2);
            }
         }
        //动态修改
        @Test
         public void Testdynamicupdate() throws IOException{
             Dept dept = new Dept();
             dept.setDeptName("市场部1");
             dept.setDeptNo(4);
             dept.setDeptCity("北京");
            int count = session.update("cn.mybatis.dao.IDeptDao.dynamicUpdate",dept);
                System.out.println(count);
                session.close();
            }  

    2.4运行结果

    动态查询

    动态修改

      3.resultMap实现结果映射

    3.1 先前在 1.4编写Dept.xml小配置文件中已经配置好了需要用到的条件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /*
         * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *  resultMap的使用
         */
         
         
       @Test
       public void testresultMap() throws IOException{
           List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
           for (Dept dept : list) {
               System.out.println(dept);
           }
           session.close();
       }
       @Test
       public void selectAllDeptUseAlias() throws IOException{
           List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
           for (Dept dept : list) {
               System.out.println(dept);
           }
           session.close();
       }

    3.2测试类 与1.5书写MyTest测试类中可见  

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /*
         * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *  resultMap的使用
         */
         
         
       @Test
       public void testresultMap() throws IOException{
           List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
           for (Dept dept : list) {
               System.out.println(dept);
           }
           session.close();
       }
       @Test
       public void selectAllDeptUseAlias() throws IOException{
           List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
           for (Dept dept : list) {
               System.out.println(dept);
           }
           session.close();
       }

    3.3测试结果

    1
    testresultMap();

    1
    selectAllDeptUseAlias();

     4.session.getMapper()方法

    4.1

     创建IDeptDao接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package cn.mybatis.dao;
     
    import java.util.List;
     
    import cn.mybatis.entity.Dept;
    /**
     * 接口
     * @author xiaobai
     *
     */
    public interface IDeptDao {
        public Dept selectDeptByNo(Integer deptNo);
     
        public List<Dept> getMapper();
    }

     4.2编写MyTest2测试类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    package cn.mybatis.Test;
     
    import java.io.IOException;
    import java.io.Reader;
    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 org.junit.Before;
    import org.junit.Test;
     
    import cn.mybatis.dao.IDeptDao;
    import cn.mybatis.entity.Dept;
     
    public class MyTest2 {
        SqlSession session;
        @Before
        public void initData() throws IOException{
               Reader  reader=Resources.getResourceAsReader("mybatis-config.xml");        
              SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);       
              session= factory.openSession();
        }  
        //实现getMapper接口<br>     //按条件查询
        @Test
        public void TestgetMapper(){
            IDeptDao mapper = session.getMapper(IDeptDao.class);
            Dept dept = mapper.selectDeptByNo(5);
            System.out.println(dept.getDeptName());
            session.close();
        }
        //查询全部信息
        @Test
        public void TestgetMapper1() throws Exception{
            IDeptDao mapper = session.getMapper(IDeptDao.class);
            List<Dept> list=mapper.getMapper();
            for (Dept dept : list) {
                System.out.println(dept.getDeptName());
            }
        }
         
         
         
    }
    1
     
    1
    4.3测试结果:<br>查询全部信息

  • 相关阅读:
    Atitit sumdoc everything index tech and index log 目录 1. 使用的tech 1 1.1. Atitit 日志记录的三个trace跟踪等级文件夹级
    Atitit nlp用到的技术与常见类库 目录 1. 常用的技术 1 1.1. 语言处理基础技术 分词 相似度等 1 1.2. 新闻摘要 2 1.3. 情感倾向分析 2 1.4. 文章标签 2 1.
    Atitit 资源类型的分类法规范MIME类型类型 目录 1.1. 一个MIME类型至少包括两个部分:一个类型(type)和一个子类型(subtype)。 1 1.2. 命名格式MIME类型包括一个
    Atitit 六种知识表示法 目录 1. 知识的静态描述和动态描述 1 1.状态空间表示 以状态和运算符(operator) 1 2.问题归约表示(函数式?? 1 (1)一个初始问题描述; 2 (2)
    微信小程序登录流程总结 目录 1.1. 前端调用wx.login 。。给后端传递一个code 1 1.2. 开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取
    Atititi 计算机系 教材 目录 1. 硬件类 2 1.1. 《微机系统与接口技术》 2 1.2. 《计算机组成与系统结构(第2版)》 2 2. Atitit 操作系统原理 操作系统原理(cpu
    Atitit 声音和音乐检索 多媒体信息检索 信息检索 目录 1.1. 14.4.5 音频基础知识 1 1.2. 多媒体信息检索的方法主要有哪些?其原理是什么? 1 1.3. 基于文本的检索和基于
    Atitit 信息检索 v3 t55.docx Atitit 现代信息检索 目录 1.1. 信息检索(索引 索引 结构化文本 1 1.2. Atitit 重要章节 1 1.3. 息检索建模 1 1.
    Atiitt 程序语言vm与rt 虚拟机与运行时 目录 1. 运行时 虚拟机的一种,一般指进程级别的虚拟机。 1 1.1. 线程模型 1 1.2. 堆栈机vs 寄存器 1 1.3. 存储模型 2 1
    Atiitt 图像处理的常见功能业务用途与类库与功能实现 目录 1. 常见业务场景 3 1.1. 缩略图 蒙版遮罩挖空 3 1.2. 区域裁剪,水印,旋转 3 1.3. 判断图像大小分辨率要求
  • 原文地址:https://www.cnblogs.com/yangronglin/p/5890198.html
Copyright © 2011-2022 走看看