zoukankan      html  css  js  c++  java
  • 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创建IDeptDao接口

    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>查询全部信息

  • 相关阅读:
    智能推荐算法演变及学习笔记(三):CTR预估模型综述
    从中国农业银行“雅典娜杯”数据挖掘大赛看金融行业数据分析与建模方法
    智能推荐算法演变及学习笔记(二):基于图模型的智能推荐(含知识图谱/图神经网络)
    (设计模式专题3)模板方法模式
    (设计模式专题2)策略模式
    (设计模式专题1)为什么要使用设计模式?
    关于macOS上常用操作命令(持续更新)
    记录下关于RabbitMQ常用知识点(持续更新)
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    SpringCloud教程二:Ribbon(Finchley版)
  • 原文地址:https://www.cnblogs.com/superws/p/5881840.html
Copyright © 2011-2022 走看看