码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-24 20:49:41      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:tsql   comm   cat   rac   下一步   节点   nts   类的方法   each   

一,为什么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>

 

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

标签:tsql   comm   cat   rac   下一步   节点   nts   类的方法   each   

原文地址:https://www.cnblogs.com/1234AAA/p/8467336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!