项目——通过自动回复机器人学Mybatis(自己添加ajax代码优化)(三)
来源:互联网 发布:微商网站源码 编辑:程序博客网 时间:2024/06/04 20:13
为了监控Mybatis执行的sql语句,我们可以利用日志打印执行的语句
应用log4j调试动态SQL
首先添加log4j的jar包到lib下
添加log4j的配置文件,配置文件在mybatis的演示代码中也有,直接就添加在src目录下就好了
log4j.properties:
log4j.rootLogger=DEBUG,Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%nlog4j.logger.org.apache=INFO
properties文件中数据格式:key=value
log4j.rootLogger=DEBUG,Console==>针对整个工程输出日志的级别(DEBUG)和输出位置(Console,可随便取名)
log4j.appender.Console=org.apache.log4j.ConsoleAppender==>定义输出位置在控制台
log4j.appender.Console.layout=org.apache.log4j.PatternLayout==>输出内容的布局
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n==>自定义输出格式:%d是产生日志的时间,%t是产生日志的线程的名称,%p是产生日志的级别,%c是输出日志所在的包名和类名,%m是输出语句的附加信息,%n是换行符
log4j.logger.org.apache=INFO==>指定某个包的输出日志级别为INFO(个性化)
这样就全部配置好了,可是只是添加了jar包和配置文件就能用了?Mybatis怎么启用log4j的呢?
打开Mybatis的源码org.apache.ibatis.logging包下的LogFactory.class
public final class LogFactory { /** * Marker to be used by logging implementations that support markers */ public static final String MARKER = "MYBATIS"; private static Constructor<? extends Log> logConstructor; static { tryImplementation(new Runnable() { @Override public void run() { useSlf4jLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useCommonsLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useLog4J2Logging(); } }); tryImplementation(new Runnable() { @Override public void run() { useLog4JLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useJdkLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useNoLogging(); } }); } private LogFactory() { // disable construction } .................................
上面都是Mybatis支持的日志,可以看到有log4j,在org.apache.ibatis.logging.log4j包下还有log4j的实现类,定义了打印信息的形式
控制台打印示例:
第二句sql中的?替换的就是#{},Total为返回结果数
实现单条信息删除
首先在Message.xml中添加删除sql语句
<delete id="deleteOne" parameterType="int"> delete from MESSAGE where ID = #{_parameter} </delete>#{}中的取值写法可以视为和OGNL相同,因此填写_parameter
在MessageDao中添加删除代码:
public void deleteOne(int id){DBAccess dbAccess = new DBAccess();SqlSession sqlSession=null;try {sqlSession=dbAccess.getSqlSession();//通过sqlSession执行SQL语句sqlSession.delete("Message.deleteOne",id);} catch (Exception e) {e.printStackTrace();}finally{if(sqlSession!=null){sqlSession.close();}}}
在service包下添加MaintainService:
public class MaintainService {public void deleteOne(String id){if(id!=null&&!"".equals(id)){MessageDao messageDao=new MessageDao();messageDao.deleteOne(Integer.valueOf(id));}}}
Service中主要负责的就是这些,类型转换啊,判断参数null啊等等
新建一个deleteOneServlet:
public class deleteOneServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stub//设置编码req.setCharacterEncoding("UTF-8");String id=req.getParameter("id");MaintainService maintainService = new MaintainService();maintainService.deleteOne(id);req.getRequestDispatcher("/list.action").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubthis.doGet(req, resp);}}
list.jsp修改:
<a href="${basePath}del_One.action?id=${message.id}">删除</a>
最后别忘了在web.xml中注册deleteOneServlet
完成执行,可是并没有删掉,删除sql日志倒是打印出来了,这是因为增删改都是要修改数据库的,有事务控制,这是mybatis,如果是jdbc的connection倒不用(因为它是自动提交的),所以我们要手动提交
public void deleteOne(int id){DBAccess dbAccess = new DBAccess();SqlSession sqlSession=null;try {sqlSession=dbAccess.getSqlSession();//通过sqlSession执行SQL语句sqlSession.delete("Message.deleteOne",id);sqlSession.commit();} catch (Exception e) {e.printStackTrace();}finally{if(sqlSession!=null){sqlSession.close();}}}
看似做完了,可还是有几个问题:
1.删除成功的提示
2.当你查询命令"测试“时,出现若干数据,删除其中一个,此时列表页面竟跳回了查询之前的页面,不过数据的确是少了一条,删除操作是没问题的,问题是它居然跳回去了,我们希望的肯定是它还留在查询"测试"的页面下,究其原因是我们用了get提交(<a href="${basePath}del_One.action?id=${message.id}">删除</a>),没有提交表单数据即查询条件
综合以上,我决定用ajax的post请求来实现
阅读全文
0 0
- 项目——通过自动回复机器人学Mybatis(自己添加ajax代码优化)(三)
- 项目——通过自动回复机器人学Mybatis(ajax优化)(四)
- 项目——通过自动回复机器人学MyBatis(一)
- 项目——通过自动回复机器人学Mybatis(二)
- 项目——通过自动回复机器人学Mybatis(五)
- 项目——通过自动回复机器人学Mybatis(六)
- 项目——通过自动回复机器人学Mybatis(七)
- 项目——通过自动回复机器人学Mybatis(深入解析拦截器源码)(八)
- 项目——通过自动回复机器人学Mybatis(深入解析读取xml源码)(九)
- 通过自动回复机器人学Mybatis---基础版
- 通过自动回复机器人学Mybatis——基础版——慕课网
- 通过自动回复机器人学Mybatis——加强版——慕课网
- 【Mybatis】通过自动回复机器人学Mybatis---基础版(1-3)
- 【Mybatis】通过自动回复机器人学Mybatis---基础版(4上)
- 【Mybatis】通过自动回复机器人学Mybatis---基础版(4下)
- 【Mybatis】通过自动回复机器人学Mybatis---基础版(5-6结束)
- MyBatis 实战小项目 自动回复机器人
- 【MyBatis学习】:通过自动回复机器人学习MyBatis(一)
- 对糖尿病数据进行PCA降维
- 学习笔记24- C/C++ 字符串分割函数
- 编写 DockerFile
- MySQL数据库优化的八种方式
- Android NullPointerException FragmentHostCallback.getHandler()
- 项目——通过自动回复机器人学Mybatis(自己添加ajax代码优化)(三)
- NSCTF web200--实验吧
- /sys/devices/ 下的设备name就是bios中定义的HID
- Android开发小技巧系列(一)
- MATLAB 人口增长预测
- tomcat
- java list 去除 重复值
- JAVA IO
- java用ajax实现跨域上传图片