MyBatis
框架概述
-
软件开发的三层架构
- 界面层(User Interface Layer):与用户交互,接受请求,显示结果的视图层(如Servlet、JSP、HTML等)
- 业务逻辑层(Business Logic Layer):接收界面层传递的数据,处理逻辑(Service层)
- 数据访问层(Data Access Layer):访问数据库,执行数据库操作(DAO层)
-
三层架构的对应框架
- 界面层——Controller——SpringMVC
- 业务逻辑层——Service——Spring
- 数据层——DAO——MyBatis
框架是一个模板,定义好了一些内容。可以直接使用这些内容的功能实现目标。框架不是全能的,一般针对于某方面使用(如MyBatis就是针对于数据库操作设计的)
-
JDBC编程的步骤
- 注册加载驱动,加载Driver
- 使用DriverManager获取数据库连接对象Connection
- 使用Connection获取Statement对象,使用Statement对象执行SQL语句
- 执行SQL语句后获得ResultSet,并将结果集转换为java对象或者集合
- 关闭资源
使用JDBC编程其实就是一些固定的步骤,最终有区别的地方在于SQL语句。因此使用JDBC编程会导致数据库操作流程比较繁琐复杂,开发效率低。而使用数据库连接池、DBUtils等都是将这些代码封装简化。MyBatis则是把这些操作变得更加简洁。
-
MyBatis
-
MyBatis是一个基于java持久层框架,即MyBatis SQL Mapper Framework For Java,SQL映射框架,他提供了如下功能:
- sqlMapper:sql映射,可以将数据库表中的一行数据映射为一个java对象,操作该对象就相当于操作表中数据。
- Data Access Objects(DAOs):数据访问,可以对数据库进行增删改查的操作
-
MyBatis可以实现的操作:
- 创建Connection、Statement、ResultSet的对象,不需要开发人员手动创建
- 执行sql语句
- 可以循环sql,将结果集中的数据转化为java对象或者是java集合
- 关闭资源
因此在使用MyBatis框架的时候,开发人员只需要提供sql语句即可,最终效果为:
- 开发人员提供sql语句
- MyBatis创建资源
- MyBatis处理sql语句
- 得到结果集并将其转化为java对象或者java集合
-
MyBatis是一个sql映射框架,可以通过它实现操作数据库,是一个增强的JDBC
-
MyBatis入门
-
创建一个maven管理的MyBatis的demo需要的步骤如下:
- 创建一个数据库表(Student)
- 在该maven项目的pom文件中加入mybatis和mysql的依赖
- 创建实体类(Student),建议类中属性与表中对应字段一致
- 创建持久层DAO接口,在其中定义一些访问数据库表的方法(如
selectStudents()
) - 在对应的接口下方(同一个包内)创建该接口的sqlMapper映射文件,用于写sql语句。一般一个数据库表对应一个sql映射文件
- 在main/resource文件夹中创建MyBatis的主配置文件。一个MyBatis项目中只有之歌主配置文件。在这个主配置文件中可以配置数据库的连接信息(dataSource)和sql映射文件的位置信息
- 创建使用MyBatis的类,执行访问数据库的操作(即使用sqlSession执行操作)
-
sql映射文件
sql映射文件是一个规定好格式的xml配置文件。在sql映射文件中使用<mapper>
和<select>
等标签可以为接口中的指定方法配置sql语句,格式如下。- namespace为命名空间,用于限定与sql映射文件对应的DAO接口,一般要求使用DAO接口的全类名来赋值
- mapper中的id属性为sql映射的id值,也即为了标识与该sql语句相对应的接口中的方法。一般也会要求使用接口中对应方法的名称赋值
- resultType属性表示查询语句返回结果为java对象的结果数据类型
- 不同的标签表示告知MyBatis执行不同的数据库操作
<select></select>
,表示执行数据库查询操作<insert></insert>
,表示执行数据库插入操作<update></update>
,表示执行数据库更新操作<delete></delete>
,表示执行数据库删除操作
<!-- 文件头采用固定格式,不需要记忆 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappers namespace="com.jarvis.dao.StudentDao">
<mapper id="selectStudents" resultType="com.jarvis.entity.Student">
<select>
select id , name, age from student
</select>
</mapper>
<mappers>
- MyBatis的主配置文件
在main/resources文件夹下创建mybatis.xml的文件,这就是mybatis的主频日志文件。在主配置文件中可以配置数据库的连接信息、sql映射文件的位置信息以及定义别名、配置日志等其他操作<environments>
标签用于配置使用的数据库连接环境,default属性必须为任一子标签<environment>
的id属性值<transactionManager>
标签用于配置使用的事务管理模式,JDBC表示MyBatis采用与JDBC一致的事务管理方法,特别要注意的是需要手动提交事务。而MANAGED表示将事务交给容器来管理(如使用Spring来管理)<mapper>
标签用于设置sql映射文件的位置。这个位置为从类路径开始的路径信息(即java下的路径信息)
<!-- 文件头为固定格式,无需记忆 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC">
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="url" value="jdbc:mysql:///mybatis"/>
</dataSource>
<environment>
<environments>
<mappers>
<mapper resource="com/jarvis/dao/studentDao.xml"></mapper>
</mappers>
</configuration>
-
使用sqlSession来执行sql语句
sqlSession是MyBatis提供的执行数据库操作的对象,可以通过以下步骤获得:- 使用MyBatis中的Resources类读取主配置文件的位置信息:
InputStream ins= Resources.getResourceAsStream("主配置文件路径字符串")
- 创建SqlSessionFactoryBuilder类,使用其来创建SqlSessionFactory对象:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(ins);
- 使用SqlSessionFactory撞见获得sqlSession对象:
SqlSession sqlSession = factory.openSession();
- 使用sqlSession来执行sql语句:
sqlSession.selectList("namespace "+"." +" id");
参数为sql映射文件中的namespace和id值拼接
- 使用MyBatis中的Resources类读取主配置文件的位置信息:
-
因此通过上述介绍得知,MyBatis操作数据库的步骤为:
- 在pom文件中添加mybatis和mysql依赖
- 创建库表、实体类、DAO接口、sql映射文件和mybatis主配置文件
- 在sql映射文件中书写对应sql语句,在mybatis主配置文件中配置数据库连接和sql映射文件位置信息
- 创建sqlSession对象执行sql语句,获得结果
-
和查询操作一致,更新修改等操作也需要在sql映射文件中书写sql语句,但需要注意:
- myBatis主配置文件中事务管理器为JDBC时,MyBatis默认为手动提交事务,因此需要使用
sqlSession.commit()
方法提交事务 - 在sql映射文件中,使用
#{}
来传入属性值,如insert into book values(#{id},#{name})
- myBatis主配置文件中事务管理器为JDBC时,MyBatis默认为手动提交事务,因此需要使用
-
开启日志
在mybatis的主配置文件中使用<settings>
标签来配置日志,具体为:
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>