MyBatis中的
元素类似于Java中的 if 语句。 标签中的test属性是判断的表达式,有以下两个注意点: 在表达式中使用字母and而非使用&符号
字符串判断双引号套单引号使用
示例:查找年龄大于30或地址在北京的学生信息。
(1)在IStudentDao下添加方法。
List findByCondition(Student student);
(2)在studentMapper.xml中添加映射语句。
说明: 上述查询语句中,在where后面添加了1=1,这是为了防止sql语句出错。如果没有1=1,那么当age和address为空时,此时sql语句就会变为select * from t_student where,这样的语句是错误的。
(3)添加测试方法。
@Test
public void testFindByCondition() throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4、使用SqlSession创建dao接口的代理对象
IStudentDao studentDao = sqlSession.getMapper(IStudentDao.class);
//5、使用代理对象执行方案
Student student = new Student();
student.setAge(30);
student.setAddress("北京");
List students = studentDao.findByCondition(student);
for(Student stu : students){
System.out.println(stu);
}
//6、释放资源
sqlSession.close();
in.close();
}
choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。其基本结构如下:
示例:查找数据库表中名字以张开头并且地址在北京的学生。
(1)在IStudentDao下添加方法。
List getStudentByChoose(Student student);
(2)在studentMapper.xml中添加映射语句。
(3)添加测试方法。
@Test
public void testFindByChoose() throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4、使用SqlSession创建dao接口的代理对象
IStudentDao studentDao = sqlSession.getMapper(IStudentDao.class);
//5、使用代理对象执行方案
Student student = new Student();
student.setUsername("张%");
student.setAddress("北京");
List students = studentDao.getStudentByChoose(student);
for(Student stu : students){
System.out.println(stu);
}
//6、释放资源
sqlSession.close();
in.close();
}
示例:查找名字为齐菲,年龄大于30,地址在河北的学生信息。
(1)在IStudentDao下添加方法。
List getStudentUseWhere(Student student);
(2)在studentMapper.xml中添加映射语句。
(3)添加测试方法。
@Test
public void testFindByWhere() throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4、使用SqlSession创建dao接口的代理对象
IStudentDao studentDao = sqlSession.getMapper(IStudentDao.class);
//5、使用代理对象执行方案
Student student = new Student();
student.setUsername("齐菲");
student.setAge(30);
student.setAddress("河北");
List students = studentDao.getStudentUseWhere(student);
for(Student stu : students){
System.out.println(stu);
}
//6、释放资源
sqlSession.close();
in.close();
}
示例:查找学生名字刘开头的,且地址为北京
(1)在IStudentDao下添加方法。
List getStudentByTrim(Student student);
(2)在studentMapper.xml中添加映射语句。
(3)添加测试方法。
@Test
public void testFindByTrim() throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4、使用SqlSession创建dao接口的代理对象
IStudentDao studentDao = sqlSession.getMapper(IStudentDao.class);
//5、使用代理对象执行方案
Student student = new Student();
student.setUsername("刘%");
student.setAddress("北京");
List students = studentDao.getStudentByTrim(student);
for(Student stu : students){
System.out.println(stu);
}
//6、释放资源
sqlSession.close();
in.close();
}
示例:修改王可的地址为浙江。
(1)在IStudentDao下添加方法。
int updateStudent(Student student);
(2)在studentMapper.xml中添加映射语句。
update t_student
address = #{address}
where username = #{username}
(3)添加测试方法。
@Test
public void testFindBySet() throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4、使用SqlSession创建dao接口的代理对象
IStudentDao studentDao = sqlSession.getMapper(IStudentDao.class);
//5、使用代理对象执行方案
Student student = new Student();
student.setUsername("王可");
student.setAddress("浙江");
int sum = studentDao.updateStudent(student);
System.out.println("修改了" + sum + "记录");
//6、释放资源
sqlSession.close();
in.close();
}
报错信息:Mapper method 'com.day1.dao.IStudentDao.updateStudent attempted to return null from a method with a primitive return type (int).
错误写法:
正确写法:
update t_student
address = #{address}
where username = #{username}