1.全局配置文件头少写了字母等报错mybatis_config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- mybatis的全局配置文件 -->
2.Foreach批量查询:id为1,2,3的数据
<select id="queryUsers2" parameterType="Integer" resultType="User">
SELECT id,NAME,gender,regist_time as registTime
FROM t_user
where id in
<foreach collection="list" open="(" separator="," close=")" item="id" index="ind">
#{id}
</foreach>
</select>
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<User> users = userDAO.queryUsers2(list);
for (User user : users) {
System.out.println("user = " + user);
}
List<Integer> add知识点出错,list.add(1);是向list集合中增加数据Integer泛型的数据。
System.out.println("list = " + list);
打印结果为:list = [1, 2, 3]
3.Foreach批量增加:
ArrayList<User> list = new ArrayList<>();
User user = new User(null,"王老六",true,new Date());
for (int i = 0; i < 10000; i++) {
list.add(user);
System.out.println(list.size());
}
userDAO.queryUsers3(list);
sqlSession.commit();
sqlSession.close();
<select id="queryUsers3" parameterType="java.util.List">
insert into t_user (name,gender,regist_time) values
<foreach collection="list" item="user" index="ind" close="" open="" separator=",">
(#{user.name},#{user.gender},#{user.registTime})
</foreach>
</select>
在.xml文件中没有在表名后添加(name,gender,regist_time)
在foreach中没有使用#{user.属性名}中的"user."
4.二级缓存
1.开启:默认开启,但需要制定哪个DAO的Mapper需要使用二级缓存,定义一个 <cache>即可 .xml中<cache></cache>
2.提交第一个查询sql语句,使得结果放入二级缓存中:使用HashMap存储
List<User> query = userDAO.query();
for (User user : query) {
System.out.println("user = " + user);
}
sqlSession.commit();
sqlSession.close();
List<User> query1 = userDAO.query();
for (User user : query1) {
System.out.println("user = " + user);
}
3.注意:二级缓存必须在`sqlSession.commit()` 或 `sqlSession.close()` 之后才生效
4.清除:sqlSession.rollback();//则查询的结果不会进入二级缓存
5.HashMap放入缓存:
(1)二级缓存存储位置:SqlSessionFactory;
同一个SqlSessionFactory创建的所有SQLSession发起的查询,查询结果都会缓存
在SQLSessionFactory内部;
有效范围:同一个SqlSessionFactory
(2)二级缓存的存储的位置:
(3)二级缓存的存储的位置:
5.实现实体类序列化
6.缓存清除的时候
二级缓存是以 namespace
为单位组织的,当某个 namespace
中发生数据改动,则 namespace
中缓存的所有数据会被mybatis清除。
注意:
在多个二级缓存时,例如sql语句,角色,权限中时,使用的是同一个二级缓存区redis,因为是同一个项目,所以要放到一个缓存区,否则,权限设置不可使用!
7.Start tag has wrong closing tag 开始标记有错的结束标记
错误点在于复制依赖时,结束标记多了.有两个结束标记
8.在web.xml配置文件中:
Invalid content was found starting with element 'init-param'. One of '{"http://xmlns.jcp.org/xml/ns/javaee":enabled, "http://xmlns.jcp.org/xml/ns/javaee":async-supported, "http://xmlns.jcp.org/xml/ns/javaee":run-as, "http://xmlns.jcp.org/xml/ns/javaee":security-role-ref, "http://xmlns.jcp.org/xml/ns/javaee":multipart-config}' is expected.
错误原因是:<load-on-startup>在tomcat开启时立即加载的标签位置放到了<init-param>标签的前面导致顺序出错的bug