Mybatis理解及框架搭建
一.什么是Mybatis
官方API中给出对Mybatis的解释是
MyBatis
is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. 意思是Mybatis是可持久性框架,支持自定义SQL,存储过程和高级映射。
目前Mybatis市场占有率很大,有其优点及缺点;
—优点:—1、 简单易学— mybatis 本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和 源代码,可以比较完全的掌握它的设计思路和实现。—2、灵活— mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
—3、 解除 sql 与程序代码的耦合--偶合度小通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。—缺点:—1、 编写 SQL 语句时工作量很大,尤其是字段多、关联表多时,更是如此。
2、SQL语句依赖于数据库, 导致数据库移植性差,能更换数据库,但是很麻烦。
—3、 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。——4、二级缓存机制不佳
二.Mybatis架构
—(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。Session
—
—(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
—
—
—(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。如下图所示:
三.搭建Mybatis架构
构建Mybatis到访问数据库的流程如下图所示:
分为五大步骤:1.构建marven项目
可参考之前的博客: 构建marven项目
2.导入依赖包
在pom中分别加入如下两段代码:<!--链接数据库的依赖包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency>
3.引入mapper映射文件(放在项目的pojo文件夹下)
<?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.sxt.entity.clubMapper"> <!-- 函数名称,输入参数 ,返回参数类型 具体实现代码 --> <select id="getClub" resultType="Club"> <include refid="selectClub"/> </select> <!-- 函数名称,输入参数 ,返回参数类型 具体实现代码 --> <select id="getClubById" parameterType="int" resultType="Club"> <include refid="selectClub"/> where cid=#{cid}; </select> <insert id="addClub" parameterType="Club"> insert into clubs(cname,city) values(#{cname},#{city}); </insert> <update id="updateClub" parameterType="Club"> update clubs set cname=#{cname},city=#{city} where cid=#{cid}; </update> <delete id="deleteClub" parameterType="int"> delete from clubs where cid = #{cid}; </delete> <!-- 代码片段,给高频的语句头使用代码片段 --> <sql id="selectClub"> select * from clubs </sql> </mapper>
4.引入db.properties与config.xml配置文件(放在resources目录下)
db.properties代码如下:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/nbadb?useUnicode=true&characterEncoding=UTF-8 username=root password=123456
config.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"> <configuration> <!-- 1.属性(规范写法是链接URL的属性在properties中写,dataSource中去取) --> <properties resource="db.properties"> </properties> <!--2.settings可设置缓存,懒加载等信息,一般不用设置 --> <settings> <setting name="cacheEnabled" value="true"/> </settings> <!--3.typeAliases起别名,为模型(pojo)起别名,在映射文件中使用 --> <typeAliases> <typeAlias type="com.sxt.entity.Club" alias="Club"/> </typeAliases> <!-- 4.环境 --> <environments default="development"> <environment id="development"> <!-- 4.1事务管理器(JDBC事务管理) --> <transactionManager type="JDBC" /> <!-- 4.2dataSource配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 4.3线程池中参数设置 --> <!--最大闲置的链接数 --> <property name="poolMaximumIdleConnections" value="5"/> <!-- 最大活跃的连接数 --> <property name="poolMaximumActiveConnections" value="5"/> </dataSource> </environment> </environments> <!-- 5.映射器(映射到mapper文件) --> <mappers> <mapper resource="com/sxt/entity/clubMapper.xml" /> </mappers> </configuration>
5.可以通过SqlSessionFactoryBuilder获取SqlSessionFactory,进而获取SqlSession,就可以进行增删改查操作了,核心代码如下:
private SqlSession session; public ClubDaoImpl() { String config = "config.xml"; InputStream is = ClubDaoImpl.class.getClassLoader().getResourceAsStream(config); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is); session = build.openSession(); }
我对一个nba的数据库(mysql)进行了操作,实现了增删改查的功能:
如下分别是sql语句及代码的链接!
代码链接:http://download.csdn.net/detail/sunrise_zhu/9687992
sql语句链接:http://download.csdn.net/detail/sunrise_zhu/9687991