一、简述
mybatis框架用了两天后,给我的感觉是dao层对数据库的操作变得简单多了,简化了大量的代码
二、开发步骤
1.新建工程,把mybatis框架的jar包和依赖包拷贝到工程中。
2.编写实体类,与数据库表进行对应。
3.定义数据接口,并在接口中定义数据操作方法。
4.编写接口映射文件,对接口的数据操作进行映射。
5.编写mybatis全局文件配置,配置数据库连接参数,配置数据映射文件。
6.编写测试类进行测试。(测试步骤:获取mybatis环境,实例化数据接口,调用接口方法,处理操作结果)。
三、学习过程中的知识碎片
1.mybatis有两个配置文件,一个是全局配置文件,一个是接口映射文件。
全局配置文件:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
接口映射文件:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2.配置时可使用properties进行简化,方便后续开发与维护。例如
<dataSource type="POOLED">
<property name="driver" value="${p_driver}"/>
<property name="url" value="${p_url}"/>
<property name="username" value="${p_username}"/>
<property name="password" value="${p_password}"/>
</dataSource>
把参数放在外
<properties>
<property name="p_driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="p_url" value="jdbc:oracle:thin://localhost:1521/orcl"/>
<property name="p_username" value="scott"/>
<property name="p_password" value="zht"/>
</properties>
3.如果要配置的别名很多,可以使用package进行简化配置,配置pojo类所在的package包即可
<typeAliases>
<package name="com.neuedu.mybatisdemo.bean"/>
</typeAliases>
4.mybatis的映射文件有四种配置方法 ,其中比较方便的是配置包名
<mappers>
<package name="com.neuedu.mybatisdemo.dao"/>
</mappers>
5.resultMap与resultType相比较,resultMap看起来更直观明了,方便阅读理解,使用resultType时需要注意实体类的属性需要和数据库表的列名一致,如果不一致则需要使用别名,否则会匹配不上。
6.在写sql语句配参时,使用${}和#{}均可实现,但#{}可以防止sql注入式攻击,更安全,推荐使用#{}。
7.使用序列管理主键时的sql写法
<insert id="addStudent" parameterType="Student">
<selectKey keyColumn="id" keyProperty="id" order="BEFORE" resultType="int">
select tab_student.nextval as id from dual
</selectKey>
INSERT INTO student VALUES(#{id},#{account},#{password},#{truename})
</insert>
8.表关联查询,可以使用collection进行关系映射
<select id="findAll" resultMap="studentMap"> <!-- 表关联查询 --> SELECT c.*,s.* FROM <include refid="formsql"></include> </select> <sql id="formsql"> student s LEFT OUTER JOIN tab_student_course t ON s.id=t.student_id LEFT OUTER JOIN course c ON t.course_id=c.course_id </sql>
<resultMap type="Student" id="studentMap"> <id column="id" property="id"/> <result column="account" property="account"/> <result column="password" property="password"/> <result column="truename" property="truename"/> <collection property="courses" ofType="Course" javaType="ArrayList"> <id column="course_id" property="courseId"/> <result column="course_name" property="courseName"/> <result column="course_score" property="courseScore"/> <result column="start_date" property="startDate"/> </collection> </resultMap>
9.多条件查询的分页查询
<select id="searchByPager" parameterType="Pager" resultMap="courseMap"> SELECT * FROM (SELECT c.*,ROWNUM r FROM (SELECT * FROM course WHERE 1=1 <if test="course.courseName != null">and course_name like concat(concat('%',#{course.courseName}),'%')</if> <if test="course.startDate != null">and start_date > #{course.startDate}</if> <if test="course.courseScore !=null">and course_score > #{course.courseScore}</if> ORDER BY course_score DESC) c WHERE ROWNUM < =#{end}) WHERE r>=#{begin} </select>