MyBatis入门

1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub。是一个基于DAO层ORM框架      ORM:Object Relational Mapping 对象关系映射 在mybatis中指的是sql语句与实体类之间的映射

2.MyBatis的优缺点
优点:减少代码量,小巧并且简单易学,SQL语句从程序代码中彻底分离,降低耦合度,便于管理和优化,并可重用,支持编写动态SQL语句。
缺点:SQL语句编写工作量大,对开发人员有一定的要求,数据库移植性差
适用场合:MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。对性能要求很高,或者需求变化多的项目,如互联网项目,适合适用MyBatis框架。

 
3.MyBatis开发环境的搭建: 3.1导入MyBatis jar包      3.2编写实体类
 
3.3编写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 

">
<configuration>
<!-- 引入外部properties文件       注意:引入外部文件属性的优先级高于内部设置的属性 -->
<properties resource="database.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
<!-- 设置mybatis运行的一些行为 -->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 设置类型别名 -->
<typeAliases>
<package name="com.kawa.pojo"/>
</typeAliases>
<!--  方式一:比较繁琐
<typeAliases>
<typeAlias alias="User" type="com.kawa.pojo.User"/>
</typeAliases>
-->
<!-- 配置mybatis多套运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理,采用JDBC的事务管理    mybatis提供了两种事务管理类型 JDBC、MANAGED-->
<transactionManager type="JDBC" />
<!-- POOLED:mybatis自带数据源,JNDI:基于tomcat的数据源      /UNPOOLED-->
<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>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<!-- 1.使用类资源路径获取资源 -->
<mapper resource="com/kawa/dao/UserMapper.xml" />
<!-- 2.使用URL获取资源 -->
<!-- <mapper url="file:///E:/..."/> -->
</mappers>
</configuration>

3.4编写MyBatis 实体类的映射文件xxxMapper.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.kawa.dao.UserMapper">
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
<select id="getUserList" resultType="User">
select * from smbms_user
</select>
</mapper>

3.5编写测试类测试
/**
* 测试查询用户列表      基于Mapper.xml方式操作
*/
@Test
public void testGetUserList() {
//获取SqlSession操作对象 步骤:
String resource = "mybatis-config.xml";
SqlSession sqlSession = null;
try {
//1.获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//2.创建sqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.创建sqlSession对象
sqlSession = sessionFactory.openSession();
List<User> userList = sqlSession.selectList("com.kawa.dao.UserMapper.getUserList");
for (User user : userList) {
logger.debug("UserMapperTest userName --> "+user.getUserName());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
sqlSession.close();
}
}
/**
* 测试查询用户列表      基于Mapper接口方式操作数据
*/
@Test
public void testGetUserList2() {
//获取SqlSession操作对象 步骤:
String resource = "mybatis-config.xml";
SqlSession sqlSession = null;
try {
//1.获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//2.创建sqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.创建sqlSession对象
sqlSession = sessionFactory.openSession();
List<User> userList = sqlSession.getMapper(UserMapper.class).getUserList();
for (User user : userList) {
logger.debug("UserMapperTest userName --> "+user.getUserName());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
sqlSession.close();
}
}
4.MyBatis的基本要素
  1.MyBatis的核心配置文件
    configuration 配置
      properties  可配置在Java属性配置文件中
      settings  修改MyBatis在运行时的行为方式
      typeAliases  为Java类型命名一个别名
      typeHAndlers 类型处理器
      objectFactory 对象工厂
      piugins  插件
      environments  环境
      environment  环境变量
        transactionManage  事务管理器
        dataSource  数据源
      mappers  映射器
2.SQL映射文件
...Mapper.xml
  SQL映射文件的几个顶级元素(按照定义顺序)
    mapper-namespace
    cache-配置给定命名空间的缓存
    cache-ref-从其他命名空间应用缓存配置
    resultMap-用来描述数据库结果集和对象的对应关系
    sql-可用重用的SQL块,也可以被其他语句引用
    insert-映射插入语句
    update-映射更新语句
    delete-映射删除语句
    select-映射查询语句
 
3.mybatis的核心接口和类:
    SqlSessionFactoryBuilder------->build() SqlSessionFactory---------->openSession() SqlSession
      SqlSessionFactoryBuilder:用过即丢,推荐作用范围:方法体内
      SqlSessionFactory:最佳作用域范围:应用的全局作用域  生命周期与应用的生命周期相同
      SqlSession:线程级  一个request请求期间
  


初始MyBatis、SQL映射文件的更多相关文章

  1. Mybatis sql映射文件浅析 Mybatis简介(三)

    简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML为载体映射SQL 之前提到过,各项配置信息将Mybatis应用的整 ...

  2. Mybatis sql映射文件浅析 Mybatis简介(三) 简介

    Mybatis sql映射文件浅析 Mybatis简介(三)   简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...

  3. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  4. MyBatis -- sql映射文件具体解释

    MyBatis 真正的力量是在映射语句中. 和对等功能的jdbc来比价,映射文件节省非常多的代码量. MyBatis的构建就是聚焦于sql的. sql映射文件有例如以下几个顶级元素:(按顺序) cac ...

  5. SSM - Mybatis SQL映射文件

    MyBatis 真正的力量是在映射语句中.和对等功能的jdbc来比价,映射文件节省很多的代码量.MyBatis的构建就是聚焦于sql的. sql映射文件有如下几个顶级元素:(按顺序) cache配置给 ...

  6. MyBatis 创建核心配置文件和 SQL 映射文件

    Mybatis 的两个配置文件(mybatis-config.xml  和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...

  7. MyBatis 的基本要素—SQL 映射文件

    MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单.对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且 ...

  8. Mybatis(二) SQL映射文件

    SQL映射文件 单条件查询 1. 在UserMapper接口添加抽象方法 //根据用户名模糊查询 List<User> getUserListByName(); 2. 在UserMappe ...

  9. MyBatis学习-映射文件标签篇(select、resultMap)

    MyBatis 真正的核心在映射文件中.比直接使用 JDBC 节省95%的代码.而且将 SQL 语句独立在 Java 代码之外,可以进行更为细致的 SQL 优化. 一. 映射文件的顶级元素 selec ...

随机推荐

  1. RabbitMQ系列教程之六:远程过程调用(RPC)

    远程过程调用(Remote Proceddure call[RPC])(本实例都是使用的Net的客户端,使用C#编写)  在第二个教程中,我们学习了如何使用工作队列在多个工作实例之间分配耗时的任务.  ...

  2. 获取子物体数量---Transform.childCount

    如何判断一个物体下是否有子物体?getchild(0)!=null?显然不可取 那去获取拿到子物体数量?transform.GetChildCount();可以解决 但在新版本中已被弃用,可用tran ...

  3. 中文里带半角空格导致的Text换行问题[Unity]

    0x01 问题 最近策划反映了个问题,游戏里的多行文本会出现提前换行的问题,如下图所示: 文本错误地提前换行,导致第一行文本后面有大块空白区域 通过观察可以发现,当字符串中带有半角空格,且半角空格后面 ...

  4. 【转载】DHCP流程

    来源: http://network.51cto.com/art/201406/441752.htm DHCP是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动 ...

  5. Opencv-2017-7-18

    橘子薄皮只吃瓤,可以称之为过滤,意思是只要我们需要的东西,去除不需要的. 图像灰度级的分布及变化. 空间域(分布)和频域(变化). 低频(变化小),高频,水平/垂直,(高/低通滤波器). 低频-类似模 ...

  6. 【分支结构】Jcc 的一些助记

    eax > ebx OF=0 SF=0 ZF=0 AF=0 PF=0 CF=0 eax = ebx OF=0 SF=0 ZF=1 AF=0 PF=1 CF=0 eax < ebx OF=0 ...

  7. python3网络编程之socket

    文章内容: socket介绍 socket参数介绍 流程描述 socket对象内建方法 基本socket实例 通过socket实现简单ssh并实现接收大数据 socket介绍 socket又称&quo ...

  8. 使用Node.js搭建静态资源服务器

    对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...

  9. ajax-jquery方法-初步入门01(整理)

    -----------------------------------2017.07.21写----------------------------------------- 相比较原生javascr ...

  10. setInterval()的时间参数无法随参数的变化而变化

    2017-04-18 写了个随机抽奖的小案例,打算随机跳动十次,每次变化的时间越来越长,也就是跳动的速度越来越慢,结果发现setInterval的时间参数并不会随着变化. <!--案例的结构如下 ...