目录
- <select id="selectByIn" resultMap="BaseResultMap" parameterType="java.util.List" >
- select
- <include refid="Base_Column_List" />
- from t_mvc_book
- where bid in
- <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
- #{bid}
- foreach>
- select>
- // 通过in关键字进行查询:讲解foreach 标签的使用
- // 如果说参数是非实体类(book,Order,....),那么急的加上注解 @param,bookIds是对应collection属性的
- List
selectByIn(@Param("bookIds") List bookIds);
- @Override
- public List
selectByIn(List bookIds) { - return bookMapper.selectByIn(bookIds);
- }
List selectByIn(List bookIds);
- @Test
- public void selectByIn() {
- List
bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34}); - bookBiz.selectByIn(bookIds).forEach(System.out::println);
- }
运行效果:
public List selectBooksLike1(String bname);
- @Override
- public List
selectBooksLike1(String bname) { - return bookMapper.selectBooksLike1(bname);
- }
- select * from t_mvc_book where bname like #{bname}
List selectBooksLike1(@Param("bname") String bname);
- @Test
- public void selectBooksLike1() {
- bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
- }
public List selectBooksLike2(String bname);
- @Override
- public List
selectBooksLike2(String bname) { - return bookMapper.selectBooksLike2(bname);
- }
- select * from t_mvc_book where bname like '${bname}'
List selectBooksLike2(@Param("bname") String bname);
- @Test
- public void selectBooksLike2() {
- bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
- }
运行效果:

public List selectBooksLike3(String bname) ;
- @Override
- public List
selectBooksLike3(String bname) { - return bookMapper.selectBooksLike3(bname);
- }
- <select id="selectBooksLike3" resultType="com.chenchen.model.Book" parameterType="java.lang.String">
- select * from t_mvc_book where bname like concat('%',#{bname},'%')
- select>
List selectBooksLike3(@Param("bname") String bname);
运行效果:
List list1() ;
- @Override
- public List<Book> list1() {
- return bookMapper.list1();
- }
- <select id="list1" resultMap="BaseResultMap">
- select * from t_mvc_book
- select>
- // list1 list2的结论是,对于单表查询而言,可以用resultmap/resulttype接收,但是多表必须用resultmap接收
- List
list1();
- package com.chenchen.model;
-
- import java.util.List;
-
- public class BookVo extends Book{
- private List bookIds;
-
- public List getBookIds() {
- return bookIds;
- }
-
- public void setBookIds(List bookIds) {
- this.bookIds = bookIds;
- }
- }
- @Test
- public void list1() {
- bookBiz.list1().forEach(System.out::println);
- }
运行效果:
List list2();
- @Override
- public List
list2() { - return bookMapper.list2();
- }
- select>
- <select id="list2" resultType="com.chenchen.model.Book">
- select * from t_mvc_book
- select>
List list2() ;
- package com.chenchen.model;
-
- import java.util.List;
-
- public class BookVo extends Book{
- private List bookIds;
-
- public List getBookIds() {
- return bookIds;
- }
-
- public void setBookIds(List bookIds) {
- this.bookIds = bookIds;
- }
- }
-
- @Test
- public void list2() {
- bookBiz.list2().forEach(System.out::println);
- }
运行效果:

List<Book> list3(BookVo vo);
- @Override
- public List
list3(BookVo vo) { - return bookMapper.list3(vo);
- }
- <select id="list3" resultType="com.chenchen.model.Book" parameterType="com.chenchen.model.BookVo">
- select * from t_mvc_book where bid in
- <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
- #{bid}
- foreach>
- select>
运行结果

MyBatis中#和$的区别
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by ‘111’,
如果传入的值是id,则解析成的sql为order by “id”.
原文链接:https://blog.csdn.net/weixin_67677668/article/details/126291580
2.$将传入的数据直接显示生成在sql中。
如:order by u s e r i d user_iduser
i d,如果传入的值是111,那么解析成sql时的值为order by user_id,
如果传入的值是id,则解析成的sql为order by id
3.#方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.