富贵必从勤苦得,男儿须读五车书

框架部分

servlet req.getParameter("");
数据类型转换 =》 交给框架
数据校验 =》 交给框架
将增删改查集中管理 => 交给框架
异常的统一处理
简化jdbc => 交给框架
使用框架组合各种技术

1. 分类

  1. 持久层框架
    与数据库打交道
    ORM 框架 object(java对象) relationship (关系型数据库 mysql) mapping (映射-java对象和数据库之间)

    mybatis(大型项目-直接管理sql),hibernate(小型项目-不需要直接写sql语句),jpa,jooq …

  2. mvc 框架
    跟 web 应用程序打交道
    Model(模型-数据) View(视图-数据展现方式) Controller(控制器)

    把模型数据准备好, 把数据放入作用域, 最后通过jsp视图展现数据

    springmvc, struts2

  3. spring 框架 (容器技术)
    把各种框架进行集成,让他们协同工作

2. MyBatis

iBatis -> apache MyBatis
使用步骤:

  1. 添加依赖
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
  1. 添加配置文件 mybatis-config.xml
    用这个配置文件来告诉 mybatis 如何连接数据库
    告诉 mybatis 到哪里去找映射关系

  2. 提供一个 映射文件
    用来管理 sql 语句,描述 sql 语句与数据库表之间的映射关系

  3. 调用 mybatis api 使用映射文件真正执行增删改查
    Configuration 对应 mybatis-config.xml

SqlSessionFactory 用来创建 SqlSession 的

SqlSession (接口)
.insert
.update
.delete
.selectOne
.selectList

3. Mybatis 映射文件(重点)

新增

<!-- #{sname} 用来获取 Student 参数对象中的 sname属性-->
<!-- useGeneratedKeys="true" 是告诉 mybatis 要使用由数据库产生的主键值 -->
<!-- keyProperty="主键对应的属性名" -->
<insert id="abc" parameterType="domain.Student" useGeneratedKeys="true" keyProperty="sid">
    insert into student(sid, sname, birthday, sex)
        values ( null, #{name}, #{birthday}, #{sex})
</insert>

删除

<delete id="delete" parameterType="int">
    delete from student where sid = #{sid}
</delete>

查询所有

<select id="findAll" resultType="domain.Student">
    select sid,sname name,birthday,sex from student
</select>

根据id查询

<select id="findById" resultType="domain.Student" parameterType="int">
    select sid,sname name,birthday,sex from student where sid = #{sid}
</select>

更新

<update id="update" parameterType="domain.Student">
    update student set sname=#{name}, birthday=#{birthday}, sex=#{sex} where sid=#{sid}
</update>
<!-- 动态更新列 Student stu = new Student(); stu.setSid(1001); stu.setSex("男"); update student set sex=#{sex} where sid=#{sid} 用 set 标签可以去除多余的逗号 -->
<update id="update" parameterType="domain.Student">
    update student
    <set>
        <if test="name != null">
            sname=#{name},
        </if>
        <if test="birthday != null">
            birthday=#{birthday},
        </if>
        <if test="sex != null">
            sex=#{sex},
        </if>
    </set>
    where sid=#{sid}
</update>

分页查询

<!-- m , n java.util.Map -> map java.util.List -> list java.lang.String -> string map.put("m", 0); map.put("n", 5); -->
<select id="findByPage" parameterType="map" resultType="domain.Student">
    select sid,sname name,birthday,sex from student limit #{m}, #{n}
</select>

4. 通过日志工具监控mybatis生成的sql语句

logback

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

添加一个 logback.xml 到 resources文件夹

<!-- 用来控制查看那个类的日志内容(对mybatis name 代表命名空间) -->
<logger name="mapper.StudentMapper" level="DEBUG" additivity="false">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="FILE"/>
</logger>