目录
什么是mybatis
本文开始:
理解要点:
其他资料:
正文开始
一、mybatis框架配置文件(xml)概述
1.mybatis基础配置文件结构(xml)
2.mapper映射文件(xml)
二、参考代码(非完全代码)
1.部分xml配置
1.1.mybatis基本配置文件
1.2. mapper.xml部分配置文件
2.部分java代码
2.1 用户数据库操作接口
2.2.实体类
2.3.测试代码
[百度百科]。
我个人的理解就是:这个框架的出现减少了我们在传统持久层的注册驱动、获得数据库连接、设置SQL语句、获得SQL对象、执行SQL语句到数据库、获得结果集、处理结果集、关闭数据库连接相关对象的繁杂步骤。让我们只需要在实际开发中专注于SQL语句,从而起到了提升开发效率的作用
编程中有个概念——不要重复写一样的代码。因为编程的工作应该更加专注于对业务的实现,而那些重复性的工作应尽量减少,重复性的写代码不仅浪费时间,而且没有意义(这也就是通常程序员自黑说的搬砖,搬砖并不能提升技能,只能固化思维)。所以这些具有重复开发部分的都应该被封装成一个方法、一个类或一个框架。
所以这里mybatis框架,就是为了解决开发过程中,一些对数据操作的持久层重复性工作做了一个封装。所以,从入门角度出发,mybatis执行过程:
编写配置文件(xml)mybatis读取配置文件(InputSteam)——整个项目只加载一次实现配置构造器(SqlSessionFactory)——整个项目只加载一次实现配置环境(SqlSessionFactory.bulid(inputSteam))——整个项目只需要加载一次,可重复使用给出SQL会话(SqlSessionFactory.openSqlSession())——数据库操作基础SQL会话给出数据库操作代理类(SqlSession.getMapper(Dao.class))dao层方法执行方法([dao.insert,dao.select,dao.updata,dao.delete])SQL会话执行代理类做的操作(SqlSession.commit)SQL会话关闭(SqlSession.close())注:配置文件结构copy自官网
configuration(顶级标签,代表设置)
properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置) environment(环境变量) transactionManager(事务管理器)dataSource(数据源)databaseIdProvider(数据库厂商标识)mappers(映射器)在xml中配置文件骨架(xml)
<?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"> <!--mybatis的主配置文件顶级标签--> <configuration> <properties resource="fileName"> <property name="key1" value="value1"/> <property name="key2" value="value2"/> ...... </properties> <settings> <!--详情见官网--> [http://www.mybatis.org/mybatis-3/zh/configuration.html#settings] </settings> <typeAliases> <!--详情见官网--> [http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases] </typeAliases> <typeHandlers> <!--详情见官网--> [http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers] </typeHandlers> <!-- environments,这里的environment是复数,代表里面不止可以有一种配置,有个属性default代表 使用的默认配置项id,默认项必填 --> <environments default="DeveloperConfig"> <!--配置id为 [customConfig] 的配置环境--> <environment id="customConfig"> <!--配置事物的类型--> <transactionManager type="[JDBC|]"/> <!--配置数据源类型--> <dataSource type="[unpooled|polled|jndi]"> <!--配置数据源具体参数--> <property name="jdbcUrl" value="${key1}"/> <property name="username" value="${key2}"/> <property name="password" value="${keyn}"/> ...... </dataSource> </environment> <!--配置id为[DeveloperConfig]的配置环境--> <environment id="DeveloperConfig"> ...... </environment> </environments> ...... ...... ...... <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--> <mappers> <mapper resource="com/xxxxx/dao/xxxxDao.xml"/> </mappers> </configuration>以上只是mybatis的基本配置环境,接下来才是涉及到开发者最应该熟悉文件——mapper.xml
配置mapper映射文件,基于基础配置文件的mappers标签中地址。因为在mybatis执行过程中涉及到读取配置文件的操作,所以,构建器会根据基础配置文件的mapper resource属性,根据其值中的文件路径查找到mapper映射文件,然后读取mapper映射文件构造dao代理类。所以配置mapper文件就等于在构建代理类的功能或模样啦。因此,在mapper文件中如何配置决定了代理类如何执行,有哪些功能,返回什么等等具有重复性质的操作。根据官网描述能节省95%代码,所以,对于一个大系统来说,这是非常具有意义的框架,有效提高了开发效率。至此,简单介绍一下mapper文件的结构
注:以下mapper.xml文件结构copy自官网
cache – 对给定命名空间的缓存配置。cache-ref – 对其他命名空间缓存配置的引用。resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。parameterMap – 已被废弃!老式风格的参数映射。更好的办法是使用内联参数,此元素可能在将来被移除。文档中不会介绍此元素。sql – 可被其他语句引用的可重用语句块。insert – 映射插入语句update – 映射更新语句delete – 映射删除语句select – 映射查询语句那么mapper.xml骨架就是大体结构就是:
<?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"> <mapper namespace="com.xxxx.dao.xxxxDao"> <!--以下代码大都来自官网--> <!--dao代理类的有关查询的方法--> <select id="selectPerson" parameterType="com.xxxx.bean.xxx" parameterMap="deprecated" resultType="hashmap" resultMap="personResultMap" flushCache="false" useCache="true" timeout="10" fetchSize="256" statementType="PREPARED" resultSetType="FORWARD_ONLY"> <!--查询的SQL语句--> select * form table_name where id = #{key} </select> <!---dao代理类的有关插入的方法--> <insert id="insertAuthor" parameterType="domain.blog.Author" flushCache="true" statementType="PREPARED" keyProperty="" keyColumn="" useGeneratedKeys="" timeout="20"> <!--插入的SQL语句--> insert into tabelname values(value1,value2........); </insert> <!--dao代理类的有关更新的方法--> <update id="updateAuthor" parameterType="domain.blog.Author" flushCache="true" statementType="PREPARED" timeout="20"> <!--更新的SQL语句--> update tabelnaem set key1=value1 , key2=value2............. </update> <!--dao代理类的有关删除的方法--> <delete id="deleteAuthor" parameterType="domain.blog.Author" flushCache="true" statementType="PREPARED" timeout="20"> <!--删除的SQL语句--> delete tablename where key=value and .... and .... </delete> </mapper>除此之外,还有不少能减少代码的标签,这里不再一一介绍,mybatis提供的功能还是很强大的!
这里值得注意的是,在mapper.xml中如果有的方法涉及到参数,例如select 标签的属性parameterType,如果提供的参数是一个对象,那么mybatis将直接提取对象中的属性,我们在使用的时候就可以用 [#{}] 的形式直接提取对象中的属性到SQL语句中。而不需要 [对象.属性] 的形式去提取数据到SQL语句中,这样子还是升了不少代码,当然,如果对象中还嵌套A着另外的对象B,此时如果还需要使用对象A中的对象B的部分属性,就需要[B.属性],看起来很复杂,但是mybatis仍然让我们省了至少[对象.]吧。