最近在某公司实习,JavaWeb岗,先前没有接触过Jweb,所以现学现卖啦,哈哈哈。
1.Jdbc驱动加载及一堆坑
我们已经知道JDBC的工作流程:
A:注冊载入JDBC驱动程序
B:得到连接对象 Connection
C:创建 Statement对象
D:运行sql语句
E:处理结果
F:关闭资源释放资源
但是使用JDBC或者mysql的时候,需要在IDE里导入lib,我用的idea导入方式为:File->project structure -> Libraries -> from maven -> 添加,搜索com.mysql就可以在候选框中选择一个合适的版本下载,下载成功之后就可以导入mysql的文件了。
导入之后一直提示加载不了驱动,显示Class Not Found错误,网上查了各种各样的资料,都是说叫导入com.mysql的包,但是实际上已经导入了,写了一个javase的程序来看也没问题,又从本地导入一遍lib还是不行,后来想是不是因为写了个javaweb的原因,于是接着搜,终于在乎上发现了一篇文章https://www.zhihu.com/question/41416361,我们一定要保证WEB-INF下的lib目录里有这个lib包,假如你的没有,包括文件夹,没有就新建,直到达到下图这种效果,这样子WEB的驱动才算加载完成。
加载完成之后,我还遇到了
[Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb](http://blog.csdn.net/anaini1314/article/details/71157791)
这么一个错误,经查阅资料得知,是jdbc版本与mysql版本不一致
按照最新官方提示支持将com.mysql.jdbc.Driver 改为com.mysql.cj.jdbc.Driver就不报错了。
以为终于要好了,没想到还有一个错误,截图如下
带乱码的错误,time zone是时区的意思,那么大概就是时区问题啦,后来查阅资料解决这个问题,导致他的原因还是版本问题,
然后我们修改一下dburl,也就是你链接时候用的url,加上后面的时区就ok了。
jdbc:mysql://localhost:3306/test?serverTimezone=UTC
终于输出了,但是有个小问题就是汉字显示不出来,那这个必然是编码问题,那么这个地方就是添加这三行编码设置就行(doGet方法里)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应内容类型
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.setCharacterEncoding("utf-8");
}
激动的看一下最终效果图
2.MyBatis传入多参数
需求场景:查询某张表里的满足某个条件的数据,由于数据量比较大,需要分页加载。
那么MyBatis传入多个参数的时候就会产生错误,我们得想办法让他接受一个参数,传入Bean的话貌似不太合理,八竿子打不着的关系封装成Bean显得太过智障,那么我们可以使用Map来处理,具体代码如下:
Service
Map<String, Object> filter = new HashMap<>();
filter.put("wordId", word_id);
filter.put("page", (page-1)*PAGE_SIZE);
mEdits = iEditDao.getLogListByPage(filter);
EditDao
/**
* @param a HashMap包含文本id和页码
* @return List<Edit> 查询列表
* */
@Select("select * from edit_log where wordId=#{wordId} limit #{page},10")
List<Edit> getLogListByPage(Map<String, Object> a);
这是接口注解写法,对于Mapper.xml映射网上有很多参考,在这里就不写了。