SSM-MyBatis-14:Mybatis中智能标签
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
谈论到智能,有什么要想的没有?
我下面放张图
相信都见过这个吧,你在之前没有学习过框架的时候怎么写的,动态sql?还是。。。
智能标签可以解决类似问题
它可以在sql语句中随传入参数是否为null甚至其他来自行加where或者and,或者其他等等用法
他分为 where ,if ,choose ,foreach的array方式 ,foreach的list方式 ,foreach的list自定义类型方式
我一块放在下面,对照着看吧
实体类
public class Book { private Integer bookID; private String bookName; private String bookAuthor; private Integer bookPrice; public Book() { } public Integer getBookID() { return this.bookID; } public void setBookID(Integer bookID) { this.bookID = bookID; } public String getBookName() { return this.bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getBookAuthor() { return this.bookAuthor; } public void setBookAuthor(String bookAuthor) { this.bookAuthor = bookAuthor; } public Integer getBookPrice() { return this.bookPrice; } public void setBookPrice(Integer bookPrice) { this.bookPrice = bookPrice; } }
接口中的方法
//智能标签where if public List<Book> findtrueBookByIf(String bookName,Integer bookPrice); //智能标签where choose public List<Book> findtrueBookByChoose(Integer bookPrice); //智能标签where foreach array public List<Book> findtrueBookByForeachArray(int [] array); //智能标签where foreach list public List<Book> findtrueBookByForeachList(List<Integer> list); //智能标签where foreach list public List<Book> findtrueBookByForeachListBook(List<Book> list);
小配置中
<!--智能标签,where if--> <select id="findtrueBookByIf" resultType="Book"> select * from book <where> <if test="#{0}!=null"> AND bookName LIKE '%' #{0} '%' </if> <if test="#{0}!=null"> AND bookPrice>#{1} </if> </where> </select> <!--智能标签,where choose--> <select id="findtrueBookByChoose" resultType="Book"> select * from book <where> <choose> <when test="#{0}!=null"> AND bookPrice>#{0} </when> <otherwise>1=1</otherwise> </choose> </where> </select> <!--智能标签,where foreach array--> <select id="findtrueBookByForeachArray" resultType="Book"> select * from book <where> bookID IN <foreach collection="array" open="(" close=")" separator="," item="myid"> #{myid} </foreach> </where> </select> <!--智能标签,where foreach list--> <select id="findtrueBookByForeachList" resultType="Book"> select * from book <where> bookID IN <foreach collection="list" open="(" close=")" separator="," item="myid"> #{myid} </foreach> </where> </select> <!--智能标签,where foreach list book--> <select id="findtrueBookByForeachListBook" resultType="Book"> select * from book <where> bookID IN <foreach collection="list" open="(" close=")" separator="," item="book"> #{book.bookID} </foreach> </where> </select>
测试类中
///智能标签where + foreach list Book自定义list 进行多条件查询 @Test public void t9selectZhiNengByForeachListBook(){ SqlSession session= MyBatisUtils.getSession(); IBookDAO mapper = session.getMapper(IBookDAO.class); List<Book> list=new ArrayList<Book>(); Book b1=new Book(); b1.setBookID(1); Book b2=new Book(); b2.setBookID(2); list.add(b1); list.add(b2); List<Book> books = mapper.findtrueBookByForeachListBook(list); for (Book items:books) { System.out.println(items.getBookName()); } session.close(); } ///智能标签where + foreach list 进行多条件查询 @Test public void t8selectZhiNengByForeachList(){ SqlSession session= MyBatisUtils.getSession(); IBookDAO mapper = session.getMapper(IBookDAO.class); List<Integer> list=new ArrayList<Integer>(); list.add(1); list.add(3); List<Book> books = mapper.findtrueBookByForeachList(list); for (Book items:books) { System.out.println(items.getBookName()); } session.close(); } ///智能标签where + foreach array 进行多条件查询 @Test public void t7selectZhiNengByForeachArray(){ SqlSession session= MyBatisUtils.getSession(); IBookDAO mapper = session.getMapper(IBookDAO.class); int[] array={1,3}; List<Book> books = mapper.findtrueBookByForeachArray(array); for (Book items:books) { System.out.println(items.getBookName()); } session.close(); } ///智能标签where + choose进行多条件查询 @Test public void t6selectZhiNengByChoose(){ SqlSession session= MyBatisUtils.getSession(); IBookDAO mapper = session.getMapper(IBookDAO.class); List<Book> books = mapper.findtrueBookByChoose(500); for (Book items:books) { System.out.println(items.getBookName()); } session.close(); } ///智能标签where + if 进行多条件查询 @Test public void t5selectZhiNengByIf(){ SqlSession session= MyBatisUtils.getSession(); IBookDAO mapper = session.getMapper(IBookDAO.class); List<Book> books = mapper.findtrueBookByIf("心",40); for (Book items:books) { System.out.println(items.getBookName()); } session.close(); }
打完收工