本文已参与「新人创作礼」活动,一起开启掘金创作之路。
-
什么是Mybatis? Mybatis是apache公司下的顶级开源项目,是现如今比较流行的持久层框架, 负责封装JDBC部分,与数据库持续进行交互 1).mybatis通过整合了数据库连接池,来优化了数据库连接的过程 数据库连接池的工作方式:预先为数据库的连接提供好制定数量的连接对象。每次连接数据库时从连接池中取出连接对象,如果发现连接池中无活跃的连接对象时,才会额外创建出新的连接对象。使用后的连接对象也会放回连接池中反复使用。减少了CPU为创建连接对象而分配的资源,优化了性能 2).提供例如动态sql等功能,减少了sql为编辑时的负担。 3).提供了延迟加载,逐渐返回等功能,降低了对开发人员在sql能力上的要求 4).使用XML编辑sql,分离了业务与sql文 5).提供了缓存机制,优化了查询性能
-
什么是mapper包? 在Mybatis框架中,将JDBC的dao包和daoImpl包整合成mapper包
-
mapper包中,xml文件中标签的常用属性? id:映射的是对应接口中的抽象方法 parameterType:指代参数类型,如果参数是引用数据类型,则需要写全类名 resultType:指代返回值类型,如果返回值是List集合, 只需要写集合中所装数据类型的全类名即可
-
什么是命名空间? namespace称作命名空间,目的是隔离sql语句,并且与接口达成映射关系
5.#{}和{}的区别?【重点】 #{}:表示占位符 {}:表示sql拼接(但是会引来sql注入攻击)
-
编写sql语句时的注意事项? (1)如果参数类型是对象,则#{}中的内容,必须与对象的成员变量对应 (2)如果参数是单一数据类型,例如整数或者字符串,则#{}中直接写value (3)查询时,必须保证查询的字段和对象的成员变量对应,如果不对应,则需要 给字段起别名
-
调用方法的步骤?【重点!!!】 (1)加载配置文件 String resource = "sqlMapConfig.xml"; InputStream is = Resources.getResourceAsStream(recource); (2)获取对话工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder.Build(is); (3)打开会话工厂,取得会话 SqlSession sqlSession = sqlSessionFactory.openSession(); (4)获得代理对象 StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); (5)调用对应方法,如果是增删改操作,需要进行提交 mapper.addStudent(Student student); sqlSession.commit(); (6)关闭会话 sqlSession.close();
-
什么是selectKey? 我们可以在selectKey标签中,先将序列值查询后,赋值给成员变量,提供给插入语句使用 例: 在添加语句前执行selectKey中的内容 keyProperty = "no" --> 将查询结果与对象的no成员变量产生映射关系 --> select seq_admin_no.nextval from dual insert into admin values(#{no}, #{id}, to_date(#{joindate}, 'yyyy/mm/dd HH24:mi:ss'))
-
什么是resultMap?【重点!!!】 我们在查询时,可以利用resultMap标签,将数据库中的字段和实体类中的成员变量,通过映射的方式,一一对应 例如: select stu_no, stu_name, stu_age from student
-
什么是动态sql?【重点!!!】 是Mybatis框架的一个十分强大的功能,它可以根据不同的限制条件,使一条语句完成不同的功能 例如: 动态查询: select no, name, age from student name like #{name} and no = #{no} 动态更新: update student
name = #{name} , age = #{age} where no = #{no} -
什么是sql片段?【重点!!!】 为了便于代码维护,可以将sql语句中的一部分抽取出来,形成sql片段 例: select from student
no, name, age
-
什么是一对一关联映射?【重点!】 我们在使用数据库时,经常会出现多表查询,例如一个学生对应一个老师,一个员工对应一个部门,这时我们可以采用一对一关联映射的方式,对数据库进行多表查询 在使用关联映射时,一定要在学生类中指定指向老师类的引用,例如在学生类中声明private Teacher teacher; 例: select stu_no, stu_name, stu_class, tea_no, tea_name, tea_class from student, teacher where tea_class = stu_class
-
一对多关联映射?
<select id="selectTeacher" resultMap="getTea">
select
stu_no,
stu_name,
stu_class,
tea_no,
tea_name,
tea_class
from student, teacher where tea_class = stu_class
</select>
14. 根据多条过滤条件进行查询 // 根据多个编号查询学生 select stu_no no, stu_name name, stu_classno classNo from student where stu_no in #{aaaaa} 15.JDBC和Mybatis的区别 1.JDBC:将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。 Mybatis:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。 2.JDBC:向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。 Mybatis:将sql语句及占位符号和参数全部配置在xml中。 3.JDBC:从resultSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。 Mybatis:将查询的结果集,自动映射成java对象。