您的位置:首页 > 编程语言 > Java开发

【JavaEE学习笔记】MyBatis_01_概述,搭建一个简单的环境

2018-02-05 20:15 806 查看
MyBatis_01

A.概述

mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身

而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程

MyBatis能支持普通SQL查询,存储过程和高级映射的优秀持久层框架

MyBatis消除了几乎所有的JDBC代码参数的手工设置以及对结果集的检索

MyBatis通过xml或注解的方式将要执行的各种statement配置起来

并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句

最后由mybatis框架执行sql并将结果映射为java对象并返回

B.一个简单的环境

1.添加相关jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.wpf</groupId>
<artifactId>mybatis</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
<build>
<finalName>mybatis</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>


2.配置核心文件

核心配置文件中主要配置3方面内容:数据库连接、运行时常量和注册映射元文件

核心配置文件名称没有具体规范,一般可以使用classpath:mybatis-config.xml

xml文件对应的dtd文件位于mybatis.jar下

/org/apache/ibatis/builder/xml/mybatis-3-config.dtd对应核心配置文件

/org/apache/ibatis/builder/xml/mybatis-3-mapper.dtd对应映射元文件



<?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>
<!-- 数据库连接相关的配置,这里云溪定义多个运行环境 一般开发中可以分为开发环境和测试环境,其中的default用于设置默认生效的环境配置 -->
<environments default="wpf">
<!-- 一个具体的环境配置,每个environment元素定义的环境Id, 其中包括数据库连接的具体配置信息 一个环境配置中主要包括两种方法:数据源配置和事务相关配置 -->
<environment id="wpf">
<!-- 事务管理器的配置,type可以使用2个值.一般针对于分布式应用可以使用MANAGED,非分布式应用一律为JDBC JDBC – 这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
MANAGED – 让容器来管理事务的整个生命周期 -->
<transactionManager type="JDBC" />
<!-- 数据源的配置,type中可以使用3个常量之一:
UNPOOLED – 这个数据源的实现是每次被请求时简单打开和关闭连接。连接没有复用,效率低。一般用于环境的测试
POOLED – 这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。这 是一种当前Web应用程序用来快速响应请求很流行的方法。
JNDI – 这个数据源的实现是由容器集中或在外部配置数据源,然后放置一个JNDI上下文的引用。可以用于生产环境中 -->
<dataSource type="POOLED">
<!-- 建立连接所需要参数:驱动串driver连接串url用户名username口令password -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 用户注册映射元文件,目前xml和注解都有使用,所以两种方法都需要掌握 -->
<mappers>
<mapper resource="org/wpf/mapper/UserBeanMapper.xml" />
</mappers>
</configuration>

3.定义对应的表结构

create table t_users(
id bigint primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null
)engine=innodb default charset utf8;

4.定义映射元文件

一般建议名称和实体类的名称一致,例如UserBean.class对应UserBeanMapper.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用于定义映射信息,这里主要定义对应的CRUD操作的SQL语句.MyBatis是以SQL语句的工作量为代价换取高灵活性。 namespace用于定义名空间,避免应用SQL语句时的名称冲突,常见的定义方式有2种:一种定义为对应实体类的全名,另外一种采用
对应接口的全名 -->
<mapper namespace="org.wpf.entity.UserBean">
<!-- 在映射文件中有4个最基本的标签,对应CRUD操作 :select insert update delete,需要执行哪个操作,就使用对应的标签进行定义
id是引用时的名称,在当前文件中不能重复。parameterType用于定义调用时需要传入的参数类型.resultType用于定义执行后返回值的
类型 -->
<insert id="insert" parameterType="org.wpf.entity.UserBean">
<!-- 定义所需要执行的SQL语句,其中可以通过#{属性名}的方式,应用参数中的特定属性值 -->
insert into t_users(username,password) values(#{username},#{password});
</insert>
</mapper>

5.定义实体类

package org.wpf.entity;

import java.io.Serializable;

public class UserBean implements Serializable {
private static final long serialVersionUID = 9048922400114421289L;
private Long id;
private String username;
private String password;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


6.测试

package org.wpf.test;

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;
import org.wpf.entity.UserBean;

public class Test {
public static void main(String[] args) throws IOException {
// 读取配置文件
Reader r = Resources.getResourceAsReader("mybatis-config.xml");

// 获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(r);

// 获取session
SqlSession session = factory.openSession();

// 创建对象
UserBean user = new UserBean();
user.setUsername("zhangsan");
user.setPassword("123456");

// 执行
int len = session.insert("org.wpf.entity.UserBean.insert", user);

session.commit();
session.close();

if (len > 0) {
System.out.println("插入数据成功!");
}
}
}


C.特点

1.简单易学

本身就很小且简单

2.灵活

mybatis不会对应用程序或者数据库的现有设计强加任何影响

sql写在xml里,便于统一管理和优化

通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能

3.接触sql与程序代码的耦合

通过提供DAL层,将业务逻辑和数据访问逻辑分离

使系统的设计更清晰,更易维护,更易单元测试

sql和代码的分离,提高了可维护性

4.提供映射标签,支持对象与数据库的orm字段关系映射

5.提供对象关系映射标签,支持对象关系组建维护

6.提供xml标签,持编写动态sql

D.MyBatis框架的优点

1. 与JDBC相比,减少了50%以上的代码量

2. MyBatis是最简单的持久化框架,小巧并且简单易学

3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用

4. 提供XML标签,支持编写动态SQL语句

5. 提供映射标签,支持对象与数据库的ORM字段关系映射

E.MyBatis框架的缺点

1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求

2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

F.MyBatis框架适用场合

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案

对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择

G.MyBatis发展历史

MyBatis本是apache的一个开源项目iBatis,

2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis

2013年11月迁移到Github

H.hibernate和mybatis对比

共性:

采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作

区别:

Hibernate是自动化的ORM类型工具,自动生成SQL语句,但是具有过度封装的嫌疑,扩展不方便,但是编码效率高,具备比较好的缓存支持;

MyBatis是半自动化的ORM类型工具,以编写SQL语句的工作量为代价换取了高灵活,但是SQL编码工作量大,缓存支持较差些

一般MyBatis在互联网应用开发中使用较多;传统的大型项目中Hibernate使用较多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 持久层框架