• MyBatis的基本操作(02)-----Seeeion.commit引起事务的提交,多条件查询,智能标签的应用,ResultMap结果映射


    一,为什么session.commit()可以引起事务的提交?

    进入commit()方法查看源码

    进入SqlSession.class文件之后,Ctrl+H弹出右边的框,选择DeFaultSqlSession

    找到COMMIt()方法的重载,ctrl+左键进入源码进行下一步的剖析

    在最底层的commit()方法里边进行了事务的提交,所以SqlSession.commit()方法可以引起事务的提交

    二,ResultMap的结果映射

    注意:ResultMap不可以和ResultType共存

    为什么使用ResultMap?  

    主要解决数据表中的列名和数据库实体类的属性名不一致的问题

    ResultMap的使用步骤:

    在映射文件中,创建一个节点

    这里的property对应的是实体类的属性名,column对应的是数据表中的列名

    在select节点中,将ResultType改为ResultMap并将值改为创建好的节点的id属性值

    三,多条件查询

    1.普通的多条件查询

    //多条件查询
        public List<book> selectMultMap(Map<String,Object> map);
      <!--多条件查询-->
        <select id="selectMultMap" resultMap="myBook">
            select * from book where bookName like '%' #{bookName} '%' and bookprice>#{bookprice}
        </select>
     @Test
        public void test4(){
    
            SqlSession sqlSession= MyBatisUtil.getSession();
            IBookDao mapper = sqlSession.getMapper(IBookDao.class);
            Map<String,Object> map=new HashMap<String,Object>();
    
            map.put("bookName","");
            map.put("bookprice",100);
            List<book> books = mapper.selectMultMap(map);
            for(book item:books){
                System.out.println(item.getBookName());
            }
    
            sqlSession.close();
        }

    2.多条件索引查询

    //多条件索引查询
        public List<book> selectMultIndex(String bookname,Integer bookprice);
      <!--多条件索引查询-->
        <select id="selectMultIndex" resultMap="myBook">
            select * from book where bookName like '%' #{0} '%' and bookprice>#{1}
        </select>
     @Test
        public void test5(){
    
            SqlSession sqlSession= MyBatisUtil.getSession();
            IBookDao mapper = sqlSession.getMapper(IBookDao.class);
    
            List<book> list = mapper.selectMultIndex("", 300);
            for(book item:list){
                System.out.println(item.getBookName());
            }
            sqlSession.close();
        }e['

    四,添加后返回自增列的值

     当我们需要拿到新添加的列的主键Id的时候:

    在<insert>节点中,在书写一个<selectKey>节点

    !!!需要注意的是:由于主键Id是自增的,在Sql语句中我们是不用添加的,所以这里声明的keyProperty的作用就是将其赋给Id

    五,工具类、

    将一些重复性很大的代码放在一个类中,调用时直接通过类的方法来调用,减少代码的书写量

    例如:将这几行代封装在一个类,以后需要用到时就不需要在进行书写,直接调用

    String path="mybatis-config.xml";
    
                InputStream is= Resources.getResourceAsStream(path);
                SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
                SqlSession sqlSession =factory.openSession();
    public class MyBatisUtil {
    
    
        static String path="mybatis-config.xml";
         static InputStream is;
        static SqlSessionFactory factory;
    
        static {
            try {
                is= Resources.getResourceAsStream(path);
                factory=new SqlSessionFactoryBuilder().build(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static SqlSession getSession(){
            return factory.openSession(true);
        }
    }

    六,智能标签

    智能标签分为:

    if  where  foreaachArray[数组类型]  foreachList<包装类型Integer>  foreachList<自定义类型>

    //智能标签if查询
        public List<book> selectIf(book bok);
        //foreach array
        public List<book> foreachArray(int[] ids);
        //foreach List
        public List<book> foreachArrayList(List<Integer> list);
        //foreach 自定义类型
        public List<book> foreachArrayBook(List<book> list);


    if where

     <select id="selectIf" resultMap="myBook">
        SELECT * from book
        <where>
            <if test="bookName!=null">
                and bookName like '%' #{bookName} '%'
            </if>
            <if test="bookprice!=null">
                and bookprice>#{bookprice}
            </if>
        </where>
    </select>

    foreaachArray[数组类型]  foreachList<包装类型Integer>  foreachList<自定义类型>

     <!--数组-->
        <select id="foreachArray" resultMap="myBook">
            SELECT * from book
            <where>
               bookId IN
                <foreach collection="array" open="(" close=")" separator="," item="myid">
                    #{myid}
                </foreach>
            </where>
        </select>
        <!--List集合-->
        <select id="foreachArrayList" resultMap="myBook">
            SELECT * from book
            <where>
                bookId IN
                <foreach collection="list" open="(" close=")" separator="," item="myid">
                    #{myid}
                </foreach>
            </where>
        </select>
        <!--自定义类型的List集合-->
        <select id="foreachArrayBook" resultMap="myBook">
            SELECT * from book
            <where>
                bookId IN
                <foreach collection="list" open="(" close=")" separator="," item="books">
                    #{books.bookId}
                </foreach>
            </where>
        </select>
  • 相关阅读:
    常用算法之选择排序
    常用算法之插入排序
    常用算法之冒泡排序
    Python hashlib模块 (主要记录md5加密)
    Django Model
    CSS实现table td中文字的省略与显示
    JS读取文件,Javascript之文件操作 (IE)
    ie6789和其他浏览器之间的鼠标左、中、右键的event.button不一致的办法
    兼容和样式
    kindeditor的docs
  • 原文地址:https://www.cnblogs.com/1234AAA/p/8467336.html
Copyright © 2020-2023  润新知