SSM-MyBatis-05(Mybatis中别名,sql片段和模糊查询加getMapper)

枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper相关的知识,希望能为你提供帮助。

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

简单概述一下本讲
别名,sql片段简单写一下,模糊查询多写一点
 
【SSM-MyBatis-05(Mybatis中别名,sql片段和模糊查询加getMapper)】一。别名

< 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()
 


    推荐阅读