• IDEA 03 (动态sql和分页)


    目录

    一、foreach标签

    1、BookMapper.xml

    2、BookMapper

    3、BookBizImpl

    4、BookBiz

    5、BookBizImplTest

    二、模糊查询

    1、test1

    ①BookBiz

     ②BookBizImpl

     ③BookMapper.xml

    ④BookMapper.java

    ⑤BookBizImplTest

    2、test2

    ①BookBiz

     ②BookBizImpl

     ③BookMapper.xml

     ④BookMapper.java

    ⑤BookBizImplTest

    3、test3

    ①BookBiz

    ②BookBizImpl

    ③BookMapper.xml

    ④BookMapper.java

    三、结果集的处理

    1、list1

    ①BookBiz

    ②BookBizImpl

    ③BookMapper.xml

    ④BookMapper.java

    ⑤BookVo

    ⑥BookBizImplTest

    2、list2

    ①BookBiz

    ②BookBizImpl

    ③BookMapper.xml

    ④BookMapper.java

    ⑤BookVo

     ⑥BookBizImplTest

    3、list3

    ①BookBiz

    ②BookBizImpl

    ③BookMapper.xml

    总结:

    1、MyBatis中#和$的区别

    MyBatis中#和$的区别


     

    一、foreach标签

    1、BookMapper.xml

    1. <select id="selectByIn" resultMap="BaseResultMap" parameterType="java.util.List" >
    2. select
    3. <include refid="Base_Column_List" />
    4. from t_mvc_book
    5. where bid in
    6. <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
    7. #{bid}
    8. foreach>
    9. select>

    2、BookMapper

    1. // 通过in关键字进行查询:讲解foreach 标签的使用
    2. // 如果说参数是非实体类(book,Order,....),那么急的加上注解 @param,bookIds是对应collection属性的
    3. List selectByIn(@Param("bookIds") List bookIds);

    3、BookBizImpl

    1. @Override
    2. public List selectByIn(List bookIds) {
    3. return bookMapper.selectByIn(bookIds);
    4. }

    4、BookBiz

    List selectByIn(List bookIds);
    

    5、BookBizImplTest

    1. @Test
    2. public void selectByIn() {
    3. List bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34});
    4. bookBiz.selectByIn(bookIds).forEach(System.out::println);
    5. }

     运行效果:

     

     

    二、模糊查询

    1、test1

    ①BookBiz

    public List selectBooksLike1(String bname);
    

     ②BookBizImpl

    1. @Override
    2. public List selectBooksLike1(String bname) {
    3. return bookMapper.selectBooksLike1(bname);
    4. }

     ③BookMapper.xml

    ④BookMapper.java

    List selectBooksLike1(@Param("bname") String bname);
    

    ⑤BookBizImplTest

    1. @Test
    2. public void selectBooksLike1() {
    3. bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
    4. }

    2、test2

    ①BookBiz

    public List selectBooksLike2(String bname);
    

     ②BookBizImpl

    1. @Override
    2. public List selectBooksLike2(String bname) {
    3. return bookMapper.selectBooksLike2(bname);
    4. }

     ③BookMapper.xml

     ④BookMapper.java

    List selectBooksLike2(@Param("bname") String bname);
    

    ⑤BookBizImplTest

    1. @Test
    2. public void selectBooksLike2() {
    3. bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
    4. }

    运行效果:

    3、test3

    ①BookBiz

    public List selectBooksLike3(String bname);
    

    ②BookBizImpl

    1. @Override
    2.     public List selectBooksLike3(String bname) {
    3.         return bookMapper.selectBooksLike3(bname);
    4.     }

    ③BookMapper.xml

    1. <select id="selectBooksLike3" resultType="com.chenchen.model.Book" parameterType="java.lang.String">
    2.   select * from t_mvc_book where bname like concat('%',#{bname},'%')
    3. select>

    ④BookMapper.java

    List selectBooksLike3(@Param("bname") String bname);
    

    运行效果:

    三、结果集的处理

    1、list1

    ①BookBiz

    List list1();
    

    ②BookBizImpl

    1. @Override
    2. public List<Book> list1() {
    3. return bookMapper.list1();
    4. }

    ③BookMapper.xml

    1. <select id="list1" resultMap="BaseResultMap">
    2. select * from t_mvc_book
    3. select>

    ④BookMapper.java

    1. //    list1 list2的结论是,对于单表查询而言,可以用resultmap/resulttype接收,但是多表必须用resultmap接收
    2.     List list1();

    ⑤BookVo

    1. package com.chenchen.model;
    2. import java.util.List;
    3. public class BookVo extends Book{
    4.     private List bookIds;
    5.     public List getBookIds() {
    6.         return bookIds;
    7.     }
    8.     public void setBookIds(List bookIds) {
    9.         this.bookIds = bookIds;
    10.     }
    11. }

    ⑥BookBizImplTest

    1. @Test
    2. public void list1() {
    3. bookBiz.list1().forEach(System.out::println);
    4. }

     运行效果: 

    2、list2

    ①BookBiz

    List list2();
    

    ②BookBizImpl

    1. @Override
    2. public List list2() {
    3. return bookMapper.list2();
    4. }

    ③BookMapper.xml

    1. select>
    2. <select id="list2" resultType="com.chenchen.model.Book">
    3. select * from t_mvc_book
    4. select>

    ④BookMapper.java

     List list2();
    

    ⑤BookVo

    1. package com.chenchen.model;
    2. import java.util.List;
    3. public class BookVo extends Book{
    4. private List bookIds;
    5. public List getBookIds() {
    6. return bookIds;
    7. }
    8. public void setBookIds(List bookIds) {
    9. this.bookIds = bookIds;
    10. }
    11. }

     ⑥BookBizImplTest

    1. @Test
    2. public void list2() {
    3. bookBiz.list2().forEach(System.out::println);
    4. }

    运行效果:

    3、list3

    ①BookBiz

    List<Book> list3(BookVo vo);
    

    ②BookBizImpl

    1. @Override
    2. public List list3(BookVo vo) {
    3. return bookMapper.list3(vo);
    4. }

    ③BookMapper.xml

    1. <select id="list3" resultType="com.chenchen.model.Book" parameterType="com.chenchen.model.BookVo">
    2. select * from t_mvc_book where bid in
    3. <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
    4. #{bid}
    5. foreach>
    6. select>

    运行结果

    总结:

    1、MyBatis中#和$的区别

    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.一般能用#的就别用$.

  • 相关阅读:
    [Spring笔记] Spring-30-AOP快速入门案例
    腾讯云双11大促优惠活动,2核2G云服务器1年88元,领券再省9999元!
    easyx库的学习(鼠标信息)
    Notepad2 v4.22.11r4478 开源轻量级文本编辑软件
    【移动开发】2022 年 12 大移动应用程序开发趋势
    iOS基础小结(一)
    Cookie和Session的区别
    【C++】1085:球弹跳高度的计算(信息学奥赛)
    php 去除空字符
    若依以及flowbale达梦国产化数据库改造_全网最细
  • 原文地址:https://blog.csdn.net/m0_67094505/article/details/126298758