• Mybatis之动态sql和分页


    一、Mybatis的foreach标签

    if标签

    
        update t_mvc_book
        
          
            bname = #{bname,jdbcType=VARCHAR},
          
          
            price = #{price,jdbcType=REAL},
          
        
        where bid = #{bid,jdbcType=INTEGER}
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    之前自定义mvc的时代:

    修改的SQL语句:
    
    update t_oa_meeting_info set id=?,title=?,content=?,zhuchiren=?,author=?,..... where id=?
    
    • 1
    • 2
    • 3

    弊端:
    意味着后台meetingInfo实体类 只有title、content属性值不为空,其他为空
    所以只要把 if标签 的拼接条件放在配置文件里面去拼接即可。

    foreach标签:

     @Test
        public void test3() {
        int[] ints={1,2,3,4,5,6};
    //    将数据编程字符串  1,2,3,4,5,6
            StringBuffer sb=new StringBuffer();
            for (int i:ints){
            sb.append(",").append(i);
            }
            String s=sb.toString();
            System.out.println(s.substring(1));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    但是
    在这里插入图片描述
    所以就需要用到forEach标签
    BookMapper.xml:

    
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    BookMapper :

    package com.zking.mapper;
     
    import com.javaxl.model.Book;
    import org.apache.ibatis.annotations.Param;
     
    import java.util.List;
     
    public interface BookMapper {
        int deleteByPrimaryKey(Integer bid);
     
        int insert(Book record);
     
        int insertSelective(Book record);
     
        Book selectByPrimaryKey(Integer bid);
     
        int updateByPrimaryKeySelective(Book record);
     
        int updateByPrimaryKey(Book record);
     
    //    通过in关键字进行查询,讲解foreach标签的使用
    //    如果说参数是非实体类(book,Order,....),那么记得加上注解 @param,bookIds是对应collection属性的
        List selectByIn(@Param("bookIds") List bookIds);
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    BookBizImpl :

    package com.zking.mapper.biz.impl;
     
    import com.javaxl.model.Book;
    import com.zking.mapper.BookMapper;
    import com.zking.mapper.biz.BookBiz;
     
    import java.util.List;
     
    /**
     * @author 周周
     * @create 2022-08-10 23:07
     */
    public class BookBizImpl implements BookBiz {
        private BookMapper bookMapper;
     
        //alt+insert  快速提供set/get/toString/构造方法
        //alt+enter  快速构建实现类,填充代码的前半部分  Ctrl+1
        public BookMapper getBookMapper() {
            return bookMapper;
        }
     
        public void setBookMapper(BookMapper bookMapper) {
            this.bookMapper = bookMapper;
        }
     
        @Override
        public int deleteByPrimaryKey(Integer bid) {
            return bookMapper.deleteByPrimaryKey(bid);
        }
     
        @Override
        public Book selectByPrimaryKey(Integer bid) {
            return bookMapper.selectByPrimaryKey(bid);
        }
     
        @Override
        public List selectByIn(List bookIds) {
            return bookMapper.selectByIn(bookIds);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    BookBiz :

    package com.zking.mapper.biz;
     
    import com.javaxl.model.Book;
     
    import java.util.List;
     
    /**
     * @author 周周
     * @create 2022-08-10 23:02
     */
    public interface BookBiz {
     
        int deleteByPrimaryKey(Integer bid);
     
     
        Book selectByPrimaryKey(Integer bid);
     
        List selectByIn(List bookIds);
     
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    BookBizImplTest :(测试)

    package com.zking.mapper.biz.impl;
     
    import com.zking.mapper.BookMapper;
    import com.zking.mapper.util.SessionUtil;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
     
    import java.util.Arrays;
    import java.util.List;
     
    /**
     * @author 周周
     * @create 2022-08-10 23:21
     */
    public class BookBizImplTest {
        private BookBizImpl bookBiz;
        private SqlSession sqlSession;
     
        @Before
        public void setUp() throws Exception {
            System.out.println("初始化方法...");
            BookBizImpl bookBiz = new BookBizImpl();
    //        从工具类中获取session对象
            sqlSession = SessionUtil.openSession();
    //        从session对象中获取mapper对象
            BookMapper mapper = sqlSession.getMapper(BookMapper.class);
            bookBiz.setBookMapper(mapper);
            this.bookBiz = bookBiz;
     
        }
     
        @After
        public void tearDown() throws Exception {
            System.out.println("方法测试结束...");
            sqlSession.commit();
            sqlSession.close();
        }
     
        @Test
        public void deleteByPrimaryKey() {
            bookBiz.deleteByPrimaryKey(44);
        }
     
     
     
        @Test
        public void selectByPrimaryKey() {
            System.out.println("测试的业务方法...");
    //        System.out.println(bookBiz.getBookMapper());
            System.out.println(bookBiz.selectByPrimaryKey(44));
     
     
        }
     
        @Test
        public void test3() {
        int[] ints={1,2,3,4,5,6};
    //    将数据编程字符串  1,2,3,4,5,6
            StringBuffer sb=new StringBuffer();
            for (int i:ints){
            sb.append(",").append(i);
            }
            String s=sb.toString();
            System.out.println(s.substring(1));
        }
     
     
        @Test
        public void selectByIn(){
            List bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34});
            bookBiz.selectByIn(bookIds).forEach(System.out::println);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    在这里插入图片描述

    二、模糊查询

    ①#{} 
    
    ②${}   ——(不建议使用该方式,有SQL注入风险)
    
    关键:#{...}与${...}区别?
              参数类型为字符串,#会在前后加单引号['],$则直接插入值
    
    ③concat()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    BookMapper.xml:

      
      
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    BookBizImpl:

     @Override
        public List selectBooksLike1(String bname) {
            return bookMapper.selectBooksLike1(bname);
        }
     
        @Override
        public List selectBooksLike2(String bname) {
            return bookMapper.selectBooksLike2(bname);
        }
     
        @Override
        public List selectBooksLike3(String bname) {
            return bookMapper.selectBooksLike3(bname);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    BookMapper :

    package com.zking.mapper;
     
    import com.javaxl.model.Book;
    import org.apache.ibatis.annotations.Param;
     
    import java.util.List;
     
    public interface BookMapper {
        int deleteByPrimaryKey(Integer bid);
     
        int insert(Book record);
     
        int insertSelective(Book record);
     
        Book selectByPrimaryKey(Integer bid);
     
        int updateByPrimaryKeySelective(Book record);
     
        int updateByPrimaryKey(Book record);
     
    //    通过in关键字进行查询,讲解foreach标签的使用
    //    如果说参数是非实体类(book,Order,....),那么记得加上注解 @param,bookIds是对应collection属性的
        List selectByIn(@Param("bookIds") List bookIds);
     
        List selectBooksLike1(@Param("bname") String bname);
        List selectBooksLike2(@Param("bname") String bname);
        List selectBooksLike3(@Param("bname") String bname);
     
     
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    测试:

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

    在这里插入图片描述
    在这里插入图片描述
    再次测试:

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

    就会报错
    在这里插入图片描述
    更改回来,也就是加上引号:

    
    
    • 1
    • 2
    • 3

    就正常了

    MyBatis中#和$的区别
    
    1. # 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
       如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by '111', 
           如果传入的值是id,则解析成的sql为order by "id".
    
    2. $ 将传入的数据直接显示生成在sql中。
       如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,
           如果传入的值是id,则解析成的sql为order by id.
     
    3. # 方式能够很大程度防止sql注入。
     
    4. $ 方式无法防止Sql注入。
     
    5. $ 方式一般用于传入数据库对象,例如传入表名.。
     
    6. 一般能用 # 的就别用 $ 。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    三、结果集的处理

    resultMap:适合使用返回值是自定义实体类的情况
    resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

    如果是单表的情况下,resultType与resultMap都可以使用。
    不管返回一条数据,还是多条数据,都应该用java.util.Map进行接收
    如果是多条数据,那么返回值List

    1 使用resultMap返回自定义类型集合
    2 使用resultType返回List
    3 使用resultType返回单个对象
    4 使用resultType返回List,适用于多表查询返回结果集
    5 使用resultType返回Map,适用于多表查询返回单个结果集

    BookMapper.xml:

     
      
      
      
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    BookMapper :

    package com.zking.mapper;
     
    import com.model.Book;
    import com.model.BookVo;
    import org.apache.ibatis.annotations.Param;
     
    import java.util.List;
    import java.util.Map;
     
    public interface BookMapper {
        int deleteByPrimaryKey(Integer bid);
     
        int insert(Book record);
     
        int insertSelective(Book record);
     
        Book selectByPrimaryKey(Integer bid);
     
        int updateByPrimaryKeySelective(Book record);
     
        int updateByPrimaryKey(Book record);
     
    //    通过in关键字进行查询,讲解foreach标签的使用
    //    如果说参数是非实体类(book,Order,....),那么记得加上注解 @param,bookIds是对应collection属性的
        List selectByIn(@Param("bookIds") List bookIds);
     
        List selectBooksLike1(@Param("bname") String bname);
        List selectBooksLike2(@Param("bname") String bname);
        List selectBooksLike3(@Param("bname") String bname);
     
    //    list1  list2的结论是对于单表查询而言,可以用它resultType/resultMap接收,但是多表必须用resultMap接收
        List list1();
        List list2();
    //    如果要传入多个查询参数,必须以对象的方式进行传递
        List list3(BookVo vo);
    //    如果是返回一条数据,那么返回值Map
    //    如果是多条数据,那么返回值List
        List list4();
        Map list5(Map map);
     
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    BookBizImpl :

    package com.zking.mapper.biz.impl;
     
    import com.model.Book;
    import com.model.BookVo;
    import com.zking.mapper.BookMapper;
    import com.zking.mapper.biz.BookBiz;
     
    import java.util.List;
    import java.util.Map;
     
    /**
     * @author 周周
     * @create 2022-08-10 23:07
     */
    public class BookBizImpl implements BookBiz {
        private BookMapper bookMapper;
     
        //alt+insert  快速提供set/get/toString/构造方法
        //alt+enter  快速构建实现类,填充代码的前半部分  Ctrl+1
        public BookMapper getBookMapper() {
            return bookMapper;
        }
     
        public void setBookMapper(BookMapper bookMapper) {
            this.bookMapper = bookMapper;
        }
     
        @Override
        public int deleteByPrimaryKey(Integer bid) {
            return bookMapper.deleteByPrimaryKey(bid);
        }
     
        @Override
        public Book selectByPrimaryKey(Integer bid) {
            return bookMapper.selectByPrimaryKey(bid);
        }
     
        @Override
        public List selectByIn(List bookIds) {
            return bookMapper.selectByIn(bookIds);
        }
     
     
        @Override
        public List selectBooksLike1(String bname) {
            return bookMapper.selectBooksLike1(bname);
        }
     
        @Override
        public List selectBooksLike2(String bname) {
            return bookMapper.selectBooksLike2(bname);
        }
     
        @Override
        public List selectBooksLike3(String bname) {
            return bookMapper.selectBooksLike3(bname);
        }
     
        @Override
        public List list1() {
     
            return bookMapper.list1();
        }
     
     
     
        @Override
        public List list2() {
            return bookMapper.list2();
        }
     
        @Override
        public List list3(BookVo vo) {
            return bookMapper.list3(vo);
        }
     
        @Override
        public List list4() {
            return bookMapper.list4();
        }
     
        @Override
        public Map list5(Map map) {
            return bookMapper.list5(map);
        }
     
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88

    BookBiz :

    package com.zking.mapper.biz;
     
    import com.model.Book;
    import com.model.BookVo;
     
    import java.util.List;
    import java.util.Map;
     
    /**
     * @author 周周
     * @create 2022-08-10 23:02
     *
     * ctrl+T  跳到接口的实现类
     */
    public interface BookBiz {
     
        public int deleteByPrimaryKey(Integer bid);
     
     
        public Book selectByPrimaryKey(Integer bid);
     
        List selectByIn(List bookIds);
     
        public List selectBooksLike1(String bname);
        public List selectBooksLike2(String bname);
        public List selectBooksLike3(String bname);
     
     
        List list1();
        List list2();
        List list3(BookVo vo);
        List list4();
        Map list5(Map map);
     
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    结论是对于单表查询而言,可以用它resultType/resultMap接收,但是多表必须用resultMap接收

    测试

     @Test
        public void list1() {
            bookBiz.list1().forEach(System.out::println);
        }
     
        @Test
        public void list2() {
            bookBiz.list2().forEach(System.out::println);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述
    如果要传入多个查询参数,必须以对象的方式进行传递

     @Test
        public void list3() {
            BookVo vo=new BookVo();
            vo.setBookIds(Arrays.asList(new Integer[]{31,32,33,34}));
            bookBiz.list3(vo).forEach(System.out::println);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    如果是返回一条数据,那么返回值Map
    如果是多条数据,那么返回值List

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

    在这里插入图片描述

     @Test
        public void list5() {
            Map map=new HashMap();
            map.put("bid",32);
            System.out.println(bookBiz.list5(map));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    四、第三方分页插件集成Mybatis使用

    Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的

    使用分页插件步骤
    1、导入pom依赖
    2、Mybatis.cfg.xml配置拦截器
    3、使用PageHelper进行分页
    4、处理分页结果

    pagebean

    package com.zking.pagination.entity;
     
    import java.io.Serializable;
    import java.util.Map;
     
    import javax.servlet.http.HttpServletRequest;
     
    public class PageBean implements Serializable {
     
    	private static final long serialVersionUID = 2422581023658455731L;
     
    	//页码
    	private int page=1;
    	//每页显示记录数
    	private int rows=10;
    	//总记录数
    	private int total=0;
    	//是否分页
    	private boolean isPagination=true;
    	//上一次的请求路径
    	private String url;
    	//获取所有的请求参数
    	private Map map;
    	
    	public PageBean() {
    		super();
    	}
    	
    	//设置请求参数
    	public void setRequest(HttpServletRequest req) {
    		String page=req.getParameter("page");
    		String rows=req.getParameter("rows");
    		String pagination=req.getParameter("pagination");
    		this.setPage(page);
    		this.setRows(rows);
    		this.setPagination(pagination);
    		this.url=req.getContextPath()+req.getServletPath();
    		this.map=req.getParameterMap();
    	}
    	public String getUrl() {
    		return url;
    	}
     
    	public void setUrl(String url) {
    		this.url = url;
    	}
     
    	public Map getMap() {
    		return map;
    	}
     
    	public void setMap(Map map) {
    		this.map = map;
    	}
     
    	public int getPage() {
    		return page;
    	}
     
    	public void setPage(int page) {
    		this.page = page;
    	}
    	
    	public void setPage(String page) {
    		if(null!=page&&!"".equals(page.trim()))
    			this.page = Integer.parseInt(page);
    	}
     
    	public int getRows() {
    		return rows;
    	}
     
    	public void setRows(int rows) {
    		this.rows = rows;
    	}
    	
    	public void setRows(String rows) {
    		if(null!=rows&&!"".equals(rows.trim()))
    			this.rows = Integer.parseInt(rows);
    	}
     
    	public int getTotal() {
    		return total;
    	}
     
    	public void setTotal(int total) {
    		this.total = total;
    	}
    	
    	public void setTotal(String total) {
    		this.total = Integer.parseInt(total);
    	}
     
    	public boolean isPagination() {
    		return isPagination;
    	}
    	
    	public void setPagination(boolean isPagination) {
    		this.isPagination = isPagination;
    	}
    	
    	public void setPagination(String isPagination) {
    		if(null!=isPagination&&!"".equals(isPagination.trim()))
    			this.isPagination = Boolean.parseBoolean(isPagination);
    	}
    	
    	/**
    	 * 获取分页起始标记位置
    	 * @return
    	 */
    	public int getStartIndex() {
    		//(当前页码-1)*显示记录数
    		return (this.getPage()-1)*this.rows;
    	}
    	
    	/**
    	 * 末页
    	 * @return
    	 */
    	public int getMaxPage() {
    		int totalpage=this.total/this.rows;
    		if(this.total%this.rows!=0)
    			totalpage++;
    		return totalpage;
    	}
    	
    	/**
    	 * 下一页
    	 * @return
    	 */
    	public int getNextPage() {
    		int nextPage=this.page+1;
    		if(this.page>=this.getMaxPage())
    			nextPage=this.getMaxPage();
    		return nextPage;
    	}
    	
    	/**
    	 * 上一页
    	 * @return
    	 */
    	public int getPreivousPage() {
    		int previousPage=this.page-1;
    		if(previousPage<1)
    			previousPage=1;
    		return previousPage;
    	}
     
    	@Override
    	public String toString() {
    		return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
    				+ "]";
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
     struts拦截器
        定义一个拦截器类
            invoke
                sysout("action方法被调用前执行的功能")
                method.invoke
                sysout("action方法被调用后执行的功能")
            
        struts-sy.xml
            将拦截器的类申明到interceptors
            引用拦截器
            
                
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    五、特殊字符处理一级目录

      >(>)   
        <(<)  
        &(&) 
     空格( )
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    
     
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    初识mysql
    栈OJ(C++)
    ping命令的多种玩法,以前竟然只用它来测试网速!
    Java配置线程池
    【JavaScript 进阶教程】字符串新增方法 trim() 的说明与使用
    深度学习 opencv python 实现中国交通标志识别 计算机竞赛_1
    iOS小技能:苹果书签打包教程【WebClip描述文件(WebClip Configuration Profile)】
    「Java开发指南」如何在Spring中使用JAX-WS注释器?
    CORS(跨域资源共享)
    Java知识点整理 13 — Hutool工具库
  • 原文地址:https://blog.csdn.net/zsm030616/article/details/126299662