mybatis中的#和$
#{}和${}两种占位符都是去实现动态sql的一种方式,通过这种方式可以把参数传递到xml里面,在执行操作之前,mybatis会对这两个占位符进行动态的解析。
#占位符等同于jdbc里面一个?占位符,它相当于向preparaeStatement里面的预处理语句设置参数,而这个sql语句是预编译的。
sql语句中有占位符的话如果出现特殊字符会自动进行转义,所以#占位符可以防止sql注入
1234String sql = "update student set age=? where id=?";PreparedStatement stmt = conn.preparaeStatement(sql);stmt.setInt(1, 18);stmt.setInt(2, 101);
而$占位符相当于直接把参数拼接到了原始sql语句里面,mybatis不会对他进行任何的特殊处理
1select id, name from ${table} where id=${id};
...
动态mysql
==type-aliases-package作用==
在mybaits的mapper.xml文件中的resultType或者paramType会返回自定义entity,此时可以用全类名来指定这些实体。如:
12345<select id="getUserInfoList" resultType="com.leo.model.UserInfo"> SELECT <include refid="BaseSql"/> FROM USER_INFO WHERE 1=1</select>
里面的resultType返回的就是全类名。
其实可以使用type-aliases-package中指定entity扫描包类让mybatis自定扫描到自定义的entity。
如:
12mybatis: type-aliases-package: com.cc.springbootmybatis.pojo
==mapper-l ...
配置拦截器和springboot注解
==配置拦截器==
编写一个拦截器实现HandlerInterceptor接口
拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)
指定拦截规则(如果是拦截所有是(”/**”),静态资源也会被拦截
12345678910@Configurationpublic class AdminWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") //所有请求都被拦截包括静态资源 .excludePathPatterns("/","/login&q ...
springmvc注解
==SpringMVC中的Model的使用==
SpringMVC会把Model(模型信息)中的的数据放入到request域对象中,页面可以通过EL表达式来取request域中的数据。我们可以先写一个案例,在后台使用Model的addAttribute方法,页面使用EL表达式取数据。
1234567891011121314@Controller@RequestMapping(value = "/model")public class ModelController { /** * Model的使用 * @param model * @return */ @RequestMapping(value = "/add") public String add(Model model){ model.addAttribute("msg","张三");//req.setA(); r ...