------------吾亦無他,唯手熟爾,謙卑若愚,好學若飢-------------
簡單概述一下本講
別名,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()