-
OGNL表达式
查看全部 -
网页乱码:在talk.jsp页面添加这句;<%@ page contentType="text/html; charset=UTF-8" %>
查看全部 -
jdbc的数据库连接地址后面加?useUnicode=true&characterEncoding=UTF-8
Message.xml的select标签中间select语句最后没加where 1=1
正确的sql语句是select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE where 1=1 and COMMAND=? 。
查看全部 -
jsp介绍
查看全部 -
Mybatis 常见问题
查看全部 -
Mybatis #{} 与 ognl
建议统一写法:_parameter
查看全部 -
Mybatis #{} 与 ${}
#{}: 预编译的。自动数据类型转换。防止sql注入,优先使用。
${}: 直接拼接的。需自行判断数据类型。使用场景:order by,传入数据库对象(如:列名,表明),模糊查询,分页等。
查看全部 -
Mybatis 常用标签
查看全部 -
Mybatis 中的 OGNL 表达式
查看全部 -
Mybatis 中的 OGNL 表达式
查看全部 -
Mybatis 之 SqlSession
查看全部 -
OGNL表达式
查看全部 -
【知识点1】
<a href="">属于GET方式请求,参数通过在路径中传递(可以通过js进行提交,并进行提示,如下图)。
【知识点2】
使用<a>标签提交form表单信息,使用js修改提交的action,如下图
查看全部 -
【知识点1】
通过Properties类获取数据信息。
InputStream is=当前类.class.getClassLoader.getResourceAsStream("Properties文件位置")
Properties properties=new Properties();
properties.load(is);
properties.getProperty("Properties文件的key值");
【知识点二】
RequestDispatcher rd=request.getRequestDispatcher();
该对象的forward(request,response)和include(request,response)的区别?
这两个方法都是用来跳转资源的,但是forward方法执行完,该Servlet后面的response输出不会被执行,如果跳转的是另一个Servlet,另一个Servlet里也有response输出,则这个输出会执行,这里的不会执行只是执行forward方法的Servlet后面的response输出不会执行。如果换成include方法,则这两个Servlet里response输出都会被执行。如果在跳转的Servlet里把response.getWriter获得的对象close掉,则原来的Servlet也不会进行输出。
servlet A
RequestDispatcher disp = request.getRequestDispatcher("B");
disp.forward(request, response);
System.out.println("servlet A completed");
PrintWriter pw = response.getWriter();
pw.println("servlet A");
servlet B
PrintWriter pw = response.getWriter();
pw.println("servlet B");
输出结果:
控制台:servlet A completed页面:servlet B
如果将forward换成include的话,则结果为:
控制台:servlet A completed
页面:servlet B servlet A
PS:如果在servlet B里把pw给close掉了的话,那servlet A 这里就无法输出了,则结果就和第一个一样。【知识点三】
JSTL和EL
JSTL——
for循环标签:<c:forEach items="" var="" varStatus="">
items:值为传过来的集合,可以通过EL表达式或者JSP表达式获取(${list}或者<%=request.get...%>)
var:代表集合中的每一项的名称,如果集合中是基本类型,则可以通过${变量名}取值,如果是自定义的类,则可以通过${变量名.属性名}。
varStatus:相当于一个变量,它的初始值是0,获取它的值方式,名称.index,通常用它和<if>标签实现隔行变色功能。
if条件标签:<if test="表达式"></if>它可以嵌在标签里面。
EL——通过${}获取传到页面的值。
查看全部 -
Mybatis总结——常见问题解析
【1】获取自增主键值
案例描述:一对多新增功能,整个页面一次性提交,后端分别保存主表数据与子表数据,设计表的主键还是自动递增的,否则就不在讨论范围内了,问题的根源是保存主表数据后,需要知道插入这条数据的自增主键值,然后再保存子表数据,因为这个主键值作为子表的外键。
Mybatis执行insert语句后,获取自增主键值:
以command表为例,因为command表是一对多关系中的主表,首先插入主表的数据,正常情况下如图1,但是想要获取插入的自增主键值需要使用<insert>标签的useGeneratedKeys属性,把它设置为true,作用是主键采用自动生成,而不是自己指定的主键值。通过<insert>的keyProperty属性Mybatis会获取自动生成的主键,该属性值为填充到映射关系中的哪个属性中,所以为属性名(这样在Command对象传入XML中id是没有值的,当SqlSession调用方法执行完sql以后,这个id属性就有值了并且这个值为新增的主键值)。
【2】找不到namespace.id的异常效果
如果不在Mybatis核心配置文件中引入sql的XML文件,或者namespace.id写错都会报该异常,如下图
【3】排查SQL语法错误
这里可以通过log4j输出的sql语句排查错误(可以把sql语句复制到Navicat中进行验证)。
【4】不要过度使用${}
比如做表头排序时会在order by后拼接${},它就像java中用变量拼接字符串一样,有些会习惯写jdbc的代码,直接在java代码里写select...,把它写好后传值给XML,然后XML中直接使用${传进来sql语句字符串},这样的编写风格会出现维护困难,因为这样一部分sql语句在java代码中,一部分语句在XML中。Mybatis提供了把sql语句写在java代码中,这种编写方式称作注解sql,但是这种编写方式很麻烦。
【5】乱码问题
关注文件本身的编码。
JSP页面设置的编码。
Servlet接受页面传值时,转换的编码。
GET请求提交中文参数时,Tomcat里也要进行配置编码。
除此之外,与数据库进行交互时 ,出现乱码时,应注意以下几处:
Mybatis核心配置文件里导入数据库的url中指定编码方式。
Mysql安装时,字符集设置应统一。
建立数据库时的编码和建表时的编码。
查看全部
举报