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

  • 相关阅读:
    python开源项目聚合推荐【1】
    python开发--Python实现延时操作的几种方式
    odoo开发笔记 -- 单台物理服务器上,利用docker部署多套odoo应用
    odoo开发笔记 -- odoo官方docker启动原理
    odoo开发笔记 -- odoo官方docker镜像部署
    odoo开发笔记 -- 借助模块queue_job实现异步方法调用
    odoo开发笔记 -- 提高访问安全性的一种方式
    python开发笔记-pymsslq连接操作SqlServer数据库
    运维笔记--Debian/Ubuntu系统离线安装pymssql,连接SqlServer
    python开发笔记-str转字典
  • 原文地址:https://www.cnblogs.com/yangronglin/p/5890198.html
Copyright © 2011-2022 走看看