富贵必从勤苦得,男儿须读五车书
框架部分
servlet req.getParameter("");
数据类型转换 =》 交给框架
数据校验 =》 交给框架
将增删改查集中管理 => 交给框架
异常的统一处理
简化jdbc => 交给框架
使用框架组合各种技术
1. 分类
-
持久层框架
与数据库打交道
ORM 框架 object(java对象) relationship (关系型数据库 mysql) mapping (映射-java对象和数据库之间)mybatis(大型项目-直接管理sql),hibernate(小型项目-不需要直接写sql语句),jpa,jooq …
-
mvc 框架
跟 web 应用程序打交道
Model(模型-数据) View(视图-数据展现方式) Controller(控制器)把模型数据准备好, 把数据放入作用域, 最后通过jsp视图展现数据
springmvc, struts2
-
spring 框架 (容器技术)
把各种框架进行集成,让他们协同工作
2. MyBatis
iBatis -> apache MyBatis
使用步骤:
- 添加依赖
<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>
-
添加配置文件 mybatis-config.xml
用这个配置文件来告诉 mybatis 如何连接数据库
告诉 mybatis 到哪里去找映射关系 -
提供一个 映射文件
用来管理 sql 语句,描述 sql 语句与数据库表之间的映射关系 -
调用 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>