mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
Mybatis的基本使用
1.利用maven工厂导入所需要的jar包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.7</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version> </dependency>
2:创建db.properties.xml文件
该文件用来简化数据库的连接配置,以后数据库有更改,直接在这个文件里面修改即可,可以添加多种不同的数据库。我的如下
mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/sql05 mysql.username=root mysql.password=123 orcl.driver=oracle.jdbc.driver.OracleDriver orcl.url=jdbc:oracle:thin:@localhost:1521:orcl orcl.username=scott orcl.password=123
首先引用db.properties.xml文件,
就可以引用db.properties的配置文件了。
如果是mysql的数据库的话,就加载mysql_conn
管理数据源的时候
<property name="driver" value="${mysql.driver}" /> <property name="url" value="${mysql.url}" /> <property name="username" value="${mysql.username}" /> <property name="password" value="${mysql.password}" />
mysql.driver一些分别对应着之前写db.properties配置文件。
接着加载映射文件,加载的映射文件用于配置数据库链接的一些操作、
<!-- 加载映射文件 --> <mappers> <mapper resource="PersonMapper.xml"/> </mappers>
4.创建PersonMapper.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"> <!-- namespace:这里的值,可以随便写!但是要保证它的值唯一.一般开发过程中,都是JavaBean的全路径. --> <mapper namespace="com.syc.dao.domain.Person"> <!-- type:要操作的JavaBean的全路径 --> <!-- resultMap:建立起JavaBean和表的映射关系 --> <!-- 直接引用别名 --> <resultMap type="person" id="personMap"> <!-- id:表示主键 --> <id column="pid" property="pid" /> <!-- result:普通列 --> <result column="name" property="name" /> <result column="nickname" property="nickname" /> </resultMap> <!-- insert:添加操作的标签,id:用来引用该标签 --> <insert id="insertPerson"> insert into person (name,nickname) values('王小二','店小二') </insert> <!-- 带参数的标签 --> <insert id="insertPersonWithParams" parameterType="person"> insert into person (name,nickname) values(#{name},#{nickname}) </insert> <!-- 查询标签 --> <!-- resultMap:集合的泛型类 --> <select id="findAll" resultMap="personMap"> select * from person </select> <select id="findById" resultType="person" parameterType="int"> select * from person where pid=#{pid} </select> <!-- 修改 --> <update id="updateById" parameterType="person"> update person set name=#{name},nickname=#{nickname} where pid=#{pid} </update> <!-- 删除 --> <delete id="deleteById" parameterType="person"> delete from person where pid=#{pid} </delete> <!-- 注意:除了查询之外,其他的操作,增删改操作的,起始和标签名称没有关系! --> <delete id="insertWithDeleteTag" parameterType="person"> insert into person (name,nickname) values(#{name},#{nickname}) </delete> </mapper>
package com.syc.dao.utils; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MybatisUtil { private static SqlSessionFactory factory; // 解决资源争抢问题. private static ThreadLocal<SqlSession> localSessions = new ThreadLocal<SqlSession>(); static { Reader reader = null; try { // 加载Mybatis的配置文件 reader = Resources.getResourceAsReader("mybatis.xml"); // 创建SqlSessionFactory对象. factory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 获取Session对象 public static SqlSession getSession() { SqlSession session = localSessions.get(); if (session == null) { session = factory.openSession(); localSessions.set(session); } return session; } // 关闭session的方法 public static void closeSession() { SqlSession session = localSessions.get(); if (session != null) { session.close(); localSessions.remove(); } } }
功能架构
我们把Mybatis的功能架构分为三层:
(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。[3]