1>动态sql练习关于员工的条件查询+分页
//firstname,lastname,email,salary,departid
List getPageData(EmpVo vo);//分页
<select id="findPageData" resultType="com.openlab.pojo.Employees">
SELECT * FROM employees
<include refid="condSql3"></include>
limit #{start},#{pageSize}
</select>
int getCount(EmpVo vo);
<select id="getCount" resultType="int">
select count(1) from employees
<include refid="condSql3"></include>
</select>
List findByIds(List ids);
<select id="findByIds" resultType="com.openlab.pojo.Employees">
SELECT * FROM employees
<foreach collection="list" item="_id" separator="," open="WHERE employee_id IN(" close=")">
#{_id}
</foreach>
</select>
void save(List list);
<insert id="save">
INSERT INTO employees(first_name,last_name,sex,email) VALUES
<foreach collection="list" item="emp" separator=",">
(#{emp.firstName},#{emp.lastName},#{emp.sex},#{emp.email})
</foreach>
</insert>
void update(Employee employee);//set
<update id="update">
UPDATE employees
<set>
<if test="firstName!=null and firstName.trim()!=''">
first_name=#{firstName},
</if>
<if test="lastName!=null and lastName.trim()!=''">
last_name=#{lastName},
</if>
<if test="email!=null and email.trim()!=''">
email=#{email},
</if>
<if test="salary!=null and salary!=0">
salary=#{salary},
</if>
</set>
where employee_id=#{employeeId}
</update>
缓存的练习
测试一级缓存,一级缓存失效的情况
一级缓存
@Test
public void testFirstCache() {
SqlSession session = null;
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
session = factory.openSession();
EmployeesMapper employeesMapper = session.getMapper(EmployeesMapper.class);
Employees employees = employeesMapper.findOnById(1);
System.out.println(employees);
Employees employees21 = employeesMapper.findOnById(1);//不会发送sql语句的
System.out.println(employees21);
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
一级缓存失效
@Test
public void testFirstCache3() {
SqlSession session = null;
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
session = factory.openSession();
EmployeesMapper employeesMapper = session.getMapper(EmployeesMapper.class);
Employees employees = employeesMapper.findOnById(1);
System.out.println(employees);
session.clearCache();
Employees employees2 = employeesMapper.findOnById(1);
System.out.println(employees2);
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
测试二级缓存,了解二级缓存失效
@Test
public void testSecondCache() {
SqlSession session = null;
SqlSession session1 = null;
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
session = factory.openSession();
session1 = factory.openSession();
EmployeesMapper employeesMapper = session.getMapper(EmployeesMapper.class);
EmployeesMapper employeesMapper2 = session1.getMapper(EmployeesMapper.class);
Employees employees = employeesMapper.findOnById(1);// 二级中去找,发现没有,还得看一级有没有,没有查数据库
System.out.println(employees);
System.out.println(employees.getEmployeeId() + "\t" + employees.getFirstName());
Employees employees21 = employeesMapper.findOnById(1);
System.out.println(employees21);
session.close();//session关闭,对象[copy]就会放到二级缓存中
System.out.println("---------执行增删改的操作------------");
Employees employees2 = employeesMapper2.findOnById(1);// 先到二级缓存中查找,找到了,没发送sql
System.out.println(employees2);
System.out.println(employees.getEmployeeId() + "\t" + employees.getFirstName());
employeesMapper2.delete(2006);
session1.commit();
System.out.println("---------------------------------");//0.25 1/4
employees2 = employeesMapper2.findOnById(1);// 先到二级缓存中查找,找到了,没发送sql
System.out.println(employees2);
session1.close();
} catch (IOException e) {
e.printStackTrace();
}
}