1、简述java
mybatis框架用了两天后,给个人感受是dao层对数据库的操做变得简单多了,简化了大量的代码sql
2、开发步骤数据库
1.新建工程,把mybatis框架的jar包和依赖包拷贝到工程中。安全
2.编写实体类,与数据库表进行对应。mybatis
3.定义数据接口,并在接口中定义数据操做方法。oracle
4.编写接口映射文件,对接口的数据操做进行映射。app
5.编写mybatis全局文件配置,配置数据库链接参数,配置数据映射文件。框架
6.编写测试类进行测试。(测试步骤:获取mybatis环境,实例化数据接口,调用接口方法,处理操做结果)。学习
3、学习过程当中的知识碎片测试
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>