初始MyBatis的应用环境及使用方式

20 篇文章 0 订阅
20 篇文章 0 订阅

MyBatis
**

什么是 MyBatis?

**

MyBatis是支持定制化SQL,存储过程以及高级映射的优秀的持久层框架.MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集.MyBatis可以对配置和原生Map使用简单的XMl或注解,将接口和Java的POJOs(Plain Old java Objects,普通的Java对象)映射成数据库中的记录.


MyBatis如何安装?

要使用MyBatis,只需要mybatis-x.x.x.jar文件置于classpath中即可,web项目把jar包放到WEB-INF下的lib包中 如果使用Maven来构建项目,则需将下面dependency代码置于pom.xml文件中:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifacId>
    <version>x.x.x</version> //版本号
</dependency>

MyBatis的功能架构

我们把Mybatis的功能架构分为三层
1.
API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库.接口层一接受调用请求就会调用数据处理层来完成具体的数据处理.

数据处理层:负责具体的SQL查找.SQL解析.SQL执行和执行结果映射处理等.它主要的目的是根据调用的请求完成一次数据库操作

基础支撑层:负责最基础的功能支撑,包括连接管理,事务管理,配置加载和缓存处理,这些都是共有的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑


**

MyBatis的优缺点

**

优点:

简单易学:本身就很小且简单.没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。


灵活:mybatis不会对应用程序或则数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,获取更多。


解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。


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


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


提供xml标签,支持编写动态sql。

缺点:

编写SQL语句时工作量很大,尤其是字段多,关联表多时,更是如此


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


框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。


二级缓存机制不佳


**

MyBatis的使用

**

1.创建Mybatis的核心配置文件mybatis-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”><!–通过这个配置文件,完成>

<properties resource="database.properties"/>
<settings> 
    <setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development"> <!-- 环境 -->
    <environment id="development"> <!-- 环境变量 -->
        <!-- 配置事务管理 ,采用JDBC管理事务-->
        <transactionManager type="JDBC"/> <!-- 事务管理器 -->
        <!-- POOLED是mybatis的 数据源 -->
        <!-- JNDI是基于tomcat的数据源 -->
        <dataSource type="POOLED"> <!-- 数据源(UNPOOLED,POOLED,JNDI) -->
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
    </environment>
</environments>
<!-- pojo的映射文件UserMapper引入到配入到配置文件中 -->
<mappers> <!-- 映射器 -->
    <!-- resource要写成路径 -->
    <mapper resource="cn/smbms/dao/UserMapper.xml"/>
</mappers></configuration>

mybatis-config.xml文件的几个常用元素的作用如下:

1.configuration:配置文件的根元素节点

2.properties:通过resource属性从外部指定properties属性文件 (database.properties),database.properties属性文件描述数据库连接的相关配置,包括数据库驱动 (jdbc.driver)、连接数据库的url(jdbc.url)、数据库用户名(jdbc.user)、数据库密码(jdbc.pwd),位置也在/resoureces目录下。

3.settings:设置MyBatis运行中的一些行为,比如此处设置MyBatis的log日志实现为LOG4J,即使用 log4j实现日志功能。

4.environments:表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置多个environment子元素节点,但是必须指定其中一个默认运行环境(通过default指定)。

5.environment:配置MyBatis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等相关信息。

6.mappers:作用是告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射sql语句),整个项目中可以有1个或多个SQL映射文件

7.mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resource属性的值表述了sql 映射文件的路径(类资源路径)
注意:mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么XML文件会报错

2.接下来准备持久化类和SQL映射文件
我们先来定义一个简单的类(user类) user类的属性也就是我们数据库中表的字段(user表)
public class User { private Integer id; //id
private String userCode; //用户编码
private String userName; //用户名称
private String userPassword; //用户密码
private Integer gender; //性别
private Date birthday; //出生日期
private String phone; //电话
private String address; //地址
private Integer userRole; //用户角色
private Integer createdBy; //创建者
private Date creationDate; //创建时间
private Integer modifyBy; //更新者
private Date modifyDate; //更新时间
//省略getter,setter方法
注意:一般情况下我们的类名和数据库的表名都是一致的

接下来进行SQL映射文件的创建,完成与POJO(实体类)的映射,该文件也是一个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”>


select count(1) as count from smbms_user
经验:SQL映射文件一般都对应相应的POJO(实体类),所以一般都是采用POJO的名称+Mapper的规则来进行命名,比如我们创建的这个映射文件,名字叫做UserMapper.xml(映射文件放置与dao包下)

上述配置文件中各元素的意义:
mapper:映射文件的根元素节点,只有一个属性namespace
namespace:用于区分不同的mapper,全局唯一
select:表示查询语句,是MyBatis 常用的元素之一,常用属性如下:
id属性:该命名空间下唯一标识符
resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int类型

接下来创建测试类,在工程中加入JUnit4,创建测试类(UserMapperTest.java)进行测试,代码如下:
public class UserMapperTest { public static void main(String[] args) throws Exception { //1.读取全局配置文件:mybatis-config.xml
String resource=“mybatis-config.xml”; //获取mybatis-config.xml文件的输入流
InputStream is= Resources.getResourceAsStream(resource); //2.创建SqlSessionFactory对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //创建SqlSession
int count=0;
SqlSession sqlSession=null;
sqlSession=factory.openSession();
count=sqlSession.selectOne(“com.smbms.dao.user.UserMapper.count”); //3.关闭SqlSession对象
sqlSession.close();
System.out.println(count);
}
}
由于我们每次执行SQL语句都要创建这些对象,所以说会有很多冗余代码,我们把这些重复的代码抽出来放到一个工具类中,以后直接调用这些工具类中的方法即可 创建工具类:MyBatisUtil
public class MyBatisUtil { private static SqlSessionFactory factory; static { try {
InputStream is= Resources.getResourceAsStream(“mybatis-config.xml”);
factory=new SqlSessionFactoryBuilder().build(is);
}catch (IOException e){
e.printStackTrace();
}
} public static SqlSession createSqlSession(){ return factory.openSession(false);
} public static void closeSqlSession(SqlSession sqlSession){
if (null!=sqlSession){
sqlSession.close();
}
}
}
具体使用请看后面 SQLSession使用第二种方式

MyBatis的基本要素-核心对象

SqlSessionFactoryBuilder

1.build()方法使用三种形式的配置信息,分别是InputStream(字节流)、Reader(字符流、Configuration(类)
2.SqlSessionFactoryBuilder 大特点是用过即丢

SqlSessionFactory

1.openSession()方法获取SqlSession实例,openSession()传入参数true表示关闭事务控制,自动提交,false开启事务控制机制。默认为true。
2.SqlSessionFactory一旦创建,就会在整个应用运行过程中始终存在。

SqlSession

1.SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。
2.SqlSession对应一次数据库会话,SqlSession不是线程安全的.
3.SqlSession有两种使用方式

第一种使用方式:
1.现在Mapper文件中添加一个select节点

SELECT * FROM USER</select>

2.编写测试
SqlSession sqlSession=null;
List userList=new ArrayList();
try{
sqlSession= MyBatisUtil.createSqlSession();
userList=sqlSession.selectList(“com.smbms.dao.user.UserMapper.getUserList”);
}catch (Exception ex){
ex.printStackTrace();
}finally {
MyBatisUtil.closeSqlSession(sqlSession);
}for (User user : userList) {
System.out.println(user.getUserName());
}
第二种使用方式:
基于上面的Mapper配置文件
1.编写接口
public interface UserMapper { /**

  • 获取用户列表* @return
    */
    List getUserList();
    }
    2.编写测试
    SqlSession sqlSession=null;
    List userList=new ArrayList();
    try{
    sqlSession= MyBatisUtil.createSqlSession();
    userList=sqlSession.getMapper(UserMapper.class).getUserList();
    }catch (Exception ex){
    ex.printStackTrace();
    }finally {
    MyBatisUtil.closeSqlSession(sqlSession);
    }for (User user : userList) {
    System.out.println(user.getUserName());
    }
    注意:推荐使用第二种方法

加Java架构师进阶交流群获取Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群号是:883922439 对了 小白勿进 最好是有开发经验
注:加群要求

1、具有工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>从 XML 中构建 SqlSessionFactory 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。 从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。 String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>当然,还有很多可以在XML 文件中进行配置,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,用来验证 XML 文档正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息)。 不使用 XML 构建 SqlSessionFactory 如果你更愿意直接从 Java 程序而不是 XML 文件中创建 configuration,或者创建你自己的 configuration 构建器,MyBatis 也提供了完整的配置类,提供所有和 XML 文件相同功能的配置项。 .....................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值