关于Mybatis需要注意的地方
面向接口编程:
要求: 1)接口名和映射文件名必须一致!
2)接口的方法名必须和映射文件中的标签ID名保持一致
调用时使用session.getMapper(接口名.class).方法
XXXmapper.xml映射文件:
映射关系:将需要的映射对象信息和数据库对象建立关系
包含的节点信息:
mapper根节点:可写namespace映射文件的完全限定名
select等,做DML语句[增删改]或DQL[查]语句的节点 此外:DDL:create drop . DCL:grant revoke
resultMap:配置映射关系的[配置对象属性和表中列的对应关系]
select等节点中包含的属性:
id:区分不同sql语句
resultType:返回结果类型[只负责将数据封装到一种对象中即可]
parameterType:参数类型[只负责封装一种类型的数据传递给SQL] [只能使用前两中传参方式]
传多个参数的方式:
1)封装实体对象
2)封装Map集合
3)使用@param注解
多个值封装成对象后,要求对象的属性名必须和#{}里的参数名一致!
集合的key必须和#{}里的参数名一致!
当数据库中表的列名和实体类中属性名一致时,mybatis会帮我们自动封装数据!!!
自定义封装数据时使用resultMap.做增删改需要事务提交!!!
一对多和多对一参考mapper.xml
* 动态SQL:
* Where + if -->if不能去掉关键字
* set + if -->set能忽略,但不能忽略无参 通常采用传全参方式[不推荐用动态]
* trim + if -->可加可减代码,还能忽略前面或后面的关键字
* forearch -->拼接多个参数
* 数组 list 存储数据即可
* map里面只存放的一个键值对 键是key值是list
*/
SqlSession session = MyBatisUtils.openSqlSession();
/*
* 方式一封装对象
Student stu = new Student();
stu.setGradeId(3);
stu.setStudentName("a");
*/
/*
* 方式二封装集合 ★
Map<String, String> map = new HashMap<String, String>();
map.put("gId", "3");
map.put("sName", "a");
**/
/*
* 方式三注解传多个值
*/
// List<Student> stuList = session.getMapper(StudentMapper.class).getStudentsByTJ3(3,"a");
// for (Student student : stuList) {
// System.out.println(student.getStudentNo() + " " + student.getStudentName() + " " + student.getGradeId());
//
// }
/**
* 演示resultMap
*/
// List<Student> stuList = session.getMapper(StudentMapper.class).getStudentsByTJ5();
// for (Student student : stuList) {
// System.out.println(student.getStudentNo() + " " + student.getStudentName() + " " + student.getGradeId() + " " + student.getGradeId() + " " + student.getGradeName());
//
// }
//新增
// try {
// //新增操作
// Grade grade = new Grade();
// grade.setGradeName("bbbbb");
// session.getMapper(GradeMapper.class).addGrade(grade);
// session.commit();//不能省
// System.out.println("新增成功!");
// } catch (Exception e) {
// e.printStackTrace();
// session.rollback();
// System.out.println("新增失败!");
// }
// try {
// //修改操作
// Grade grade = new Grade();
// grade.setGradeName("bbbbb");
// grade.setGradeId(6);
// session.getMapper(GradeMapper.class).updateGrade(grade);
// session.commit();//不能省
// System.out.println("修改成功!");
// } catch (Exception e) {
// e.printStackTrace();
// session.rollback();
// System.out.println("修改失败!");
// }
// try {
// //删除操作
// session.getMapper(GradeMapper.class).deleteGrade(6);
// session.commit();//不能省
// System.out.println("删除成功!");
// } catch (Exception e) {
// e.printStackTrace();
// session.rollback();
// System.out.println("删除失败!");
// }
// //多的一方映射查询一的一方
// List<Student> stuList = session.getMapper(StudentMapper.class).getAllStudents();
// for (Student stu : stuList) {
// System.out.println(stu.getStudentNo() + " " + stu.getStudentName() + " " + stu.getGrade().getGradeId() + " " + stu.getGrade().getGradeName());
//
// }
//一的一方映射查询多的一方
// Grade grade = session.getMapper(GradeMapper.class).getGradeById(3);
// System.out.println(grade.getGradeId() + " " + grade.getGradeName());
// List<Student> stuList = grade.getStuList();
// for (Student stu : stuList) {
// System.out.println(" " + stu.getStudentNo() + " " + stu.getStudentName());
// }
//演示if 和 where
//Student stu = new Student();
//stu.setStudentName("a");
//stu.setGradeId(3);
// List<Student> stuList = session.getMapper(StudentMapper.class).useIfSelectStudent(stu);
// for (Student student : stuList) {
// System.out.println(student.getStudentNo() + " " + student.getStudentName());
// }
//演示if 和 set
//Student stu = new Student();
//stu.setStudentName("hehe");
//stu.setGradeId(1);
//stu.setStudentNo(6);
//session.getMapper(StudentMapper.class).useSetUpdateStudent(stu);
//演示trim
//Student stu = new Student();
//stu.setStudentName("a");
//stu.setGradeId(3);
//stu.setStudentNo(6);
//1
// List<Student> stuList = session.getMapper(StudentMapper.class).useTrimOperateSql1(stu);
// for (Student student : stuList) {
// System.out.println(student.getStudentNo() + " " + student.getStudentName());
// }
//2
//session.getMapper(StudentMapper.class).useTrimOperateSql2(stu);
//演示forearch
//数组
//Integer[] stuNos = {1,2,3};
//List<Student> stuList = session.getMapper(StudentMapper.class).useForearchSql(stuNos);
//list
// List<Integer> stuNos = new ArrayList<Integer>();
// stuNos.add(1);
// stuNos.add(2);
// stuNos.add(3);
//map
Map<String, List<Integer>> stuNos = new HashMap<String, List<Integer>>();
List<Integer> stus = new ArrayList<Integer>();
stus.add(1);
stus.add(2);
stus.add(3);
stuNos.put("mapKey", stus);
List<Student> stuList = session.getMapper(StudentMapper.class).useForearchSql3(stuNos);
for (Student student : stuList) {
System.out.println(student.getStudentNo() + " " + student.getStudentName());
}
MyBatisUtils.closeSqlSession(session);
}
}