MyBatis简介和入门(MyBatis第一讲)

一.介绍

 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statementstatementpreparedStatemntCallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

二.jdbc编程步骤:

1、 加载数据库驱动

2、 创建并获取数据库链接

3、 创建jdbc statement对象

4、 设置sql语句

5、 设置sql语句中的参数(使用preparedStatement)

6、 通过statement执行sql并获取结果

7、 sql执行结果进行解析处理

8、 释放资源(resultSetpreparedstatementconnection)

三. jdbc问题总结如下:

1、 数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果使用数据库连接池可解决此问题。

2、 Sql语句在代码中硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变java代码。

3、 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。

四.MyBatis入门

工具:idea

1.需要的jar包 尤其注意mybatis这个包

MyBatis简介和入门(MyBatis第一讲)

2.在src同级创建log4j.properties文件(如果此文件不在src目录下则需要相应配置,在此暂不说明)

MyBatis简介和入门(MyBatis第一讲)

3.在src/config目录下创建核心文件SqlMapConfig.xml

MyBatis简介和入门(MyBatis第一讲)

MyBatis简介和入门(MyBatis第一讲)

4.实体类 

MyBatis简介和入门(MyBatis第一讲)

5.操作数据库的xml文件 config/ book.xml

MyBatis简介和入门(MyBatis第一讲)

说明模糊查询的sql语句中  为什么一定要写   %${value}%

#{}${}

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换

#{}可以有效防止sql注入 #{}可以接收简单类型值或pojo属性值 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换

${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value

6.测试mybatis

MyBatis简介和入门(MyBatis第一讲)

MyBatis简介和入门(MyBatis第一讲)

MyBatis简介和入门(MyBatis第一讲)

7.运行效果

MyBatis简介和入门(MyBatis第一讲)

8.总结mybatis好处

1.1. Mybatis解决jdbc编程的问题

1、 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

解决:SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、 sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。