1. 程式人生 > >SSM-MyBatis-05:Mybatis中別名,sql片段和模糊查詢加getMapper

SSM-MyBatis-05:Mybatis中別名,sql片段和模糊查詢加getMapper

接口 過程 ase exce bat -c 多次 nts log

------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------

簡單概述一下本講

別名,sql片段簡單寫一下,模糊查詢多寫一點

一。別名

  

<typeAliases>
        <!--第一種-->
        <!--<typeAlias type="cn.dawn.demo01.entity.Book" alias="book"></typeAlias>-->
        <!--第二種-->
        <package name="cn.dawn.demo01.entity
"></package> </typeAliases>

  別名寫在大配置中

二。sql片段

  在開發過程中一般不直接使用*作為sql的查詢語句的列,因為會損耗性能嚴重,在多次,重復使用列名,但是列名太多,所以很麻煩,怎麽解決?

  sql片段

  怎麽使用?

  如下:

<sql id="mysql">
        bookId,bookName,bookAuthor,bookPrice
    </sql>
<select id="findOneBookByPK" resultType="Book" >
        SELECT 
<include refid="mysql"/> FROM book WHERE bookid=#{bookID} </select>

  用include將sql片段中的列名引用過去

三。模糊查詢

  dao層

  

//模糊查詢
    public List<Book> likeSelect(String bookName);

  小配置中

<sql id="mysql">
        bookId,bookName,bookAuthor,bookPrice
    </sql>
<!--模糊查詢-->
    <!--不可以防止sql註入
    
<select id="likeSelect" parameterType="string" resultType="Book"> SELECT * FROM book WHERE bookName LIKE %${value}% </select>--> <!--可以防止sql註入 <select id="likeSelect" parameterType="string" resultType="Book"> SELECT * FROM book WHERE bookName LIKE % #{value} % </select>--> <!--可以防止sql註入--> <select id="likeSelect" parameterType="string" resultType="Book"> SELECT <include refid="mysql"/> FROM book WHERE bookName LIKE concat(%,#{bookName},%) </select>

  三種方式,第一種不可以防止sql註入(做完日誌整合的從控制臺就可以看到sql語句),我所喜歡的是第二種

  測試類中

//模糊查詢
    @Test
    public void t6likeSelect(){

        String path = "mybatis-config.xml";

        try {
            InputStream e = Resources.getResourceAsStream(path);
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(e);
            SqlSession session = factory.openSession();

            IBookDAO mapper = session.getMapper(IBookDAO.class);
            List<Book> list = mapper.likeSelect("");
            for (Book item:list) {
                System.out.println(item.getBookName());
            }


            session.close();
        } catch (IOException var9) {
            var9.printStackTrace();
        }
    }

  這兒模糊查詢就搞定了,說說getMapper吧,

  之前我那幾篇博客,用的原始方式,他要求自己測試類中手打方法,但是現在這種通過session.getMapper(dao層接口.class)反射的方式獲取到了dao層這個接口的實現類,所以就可以使用強類型

的方式,直接通過點的方式點出來供你選擇,出錯幾率大大減少      例如mapper.findAll()

SSM-MyBatis-05:Mybatis中別名,sql片段和模糊查詢加getMapper