1 MyBatis是什么

  mybatis是一个持久层的框架,它对jdbc做了封装;是apache下的顶级项目

  mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句

  mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

2 如何使用MyBatis

  2.1 导包

    mybatis : mybatis包

    mysql : MySQL数据库驱动包

    junit : 单元测试包

  

  2.2 添加myBatis的配置文件

    配置文件中需要配置的内容

      environment配置

      jdbc事务管理

      数据库连接池

      指定映射文件

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<!-- 和spring整合后,environment配置将被废除 -->
<environments default="environment">
<environment id="environment">
<!-- 使用jdbc事务管理,事务控制由mybatis实现 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis进行管理 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/xiangxu" />
<property name="username" value="root" />
<property name="password" value="182838" />
</dataSource>
</environment>
</environments> <!-- 指定映射文件的位置(即:加载映射文件) -->
<mappers>
<mapper resource="cn/xiangxu/telecom/login/entity/AdminMapper.xml" /> <!-- 注意:包名的 . 全部换成 / -->
</mappers> </configuration>

配置好的SqlMapConfig.xml

  2.3 写实体类

    要求:实体类的属性名要与表的字段名一致

 package cn.xiangxu.telecom.login.entity;

 import java.io.Serializable;

 public class Admin implements Serializable {
private Integer id;
private String name;
private String password;
private String gender; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
} public String toString() {
return "Admin [id=" + id + ", name=" + name + ", password=" + password + ", gender=" + gender + "]";
} }

编写好的Admin.java

  2.4 写实体类的映射文件

    映射文件主要内容是要执行的sql

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="login">
<insert id="insert" parameterType="cn.xiangxu.telecom.login.entity.Admin">
<!-- 注意:parameterType的属性值一定要写上类名(基本类型除外) -->
INSERT INTO admin
(name, password, gender)
VALUES(#{name}, #{password}, #{gender})
</insert> <select id="findAll" resultType="cn.xiangxu.telecom.login.entity.Admin">
SELECT * FROM admin
</select>
</mapper>

配置好的AdminMapper.xml

  2.5 使用myBatis提供的api来访问数据库

 package test;

 import java.io.Serializable;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import cn.xiangxu.telecom.login.entity.Admin; public class TestCase implements Serializable {
private SqlSession sqlSession;
@Before
public void init() {
// 获得SqlSession对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
// SqlSession是执行sql的容器
sqlSession = ssf.openSession();
/*
* 注意:
* getResourceAsStream 将文件找到并变成输入流
*/
} @Test
// 测试插入数据
public void test01() {
Admin admin = new Admin();
admin.setName("warrior");
admin.setPassword("182838");
admin.setGender("Man");
sqlSession.insert("login.insert", admin); sqlSession.commit();
sqlSession.close();
} @Test
// 测试查询所有数据
public void test02() {
List<Admin> lists = sqlSession.selectList("login.findAll");
for(Admin admin : lists) {
System.out.println(admin);
}
sqlSession.close();
}
}

利用MyBatis提供的API访问数据库源代码

3 MyBatis工作原理

  

4 查询结果放回Map类型

  mybatis会将查询到的记录先转换成对应的Map 对象(以字段名作为key,以字段值作为value。 一条记录对应一个Map)。然后再将Map中的数据 存放到对应的实体对象里面。

  

  如果想要结果返回Map类型,仅仅需要修改resultType的属性值就可以啦

5 解决实体类的属性与表的字段名不一致

  5.1 使用别名实现

    在sql语句中使用别名,别名和实体类的字段名保持一致

  5.2 使用resultMap元素实现

本博客源码下载:点击前往

MyBatis01 MyBatis基础知识【搞清楚原理】的更多相关文章

  1. php基础知识(语法与原理)

    一.php简介 PHP超文本预处理器.是嵌入HTML文件中的服务器脚本程序. PHP代码标记:<?php …. ?> PHP文件的扩展名:.php PHP文件的执行:必须从域名开始访问 P ...

  2. mybatis基础知识

    一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC ...

  3. MyBatis02 MyBatis基础知识之Mapper映射器

    1 Mapper映射器是什么 是符合映射文件要求的接口 接口要求 a. 方法名要与sql的id一致. b. 方法的参数类型要与parameterType一致. c. 方法的返回类型要与resultTy ...

  4. 【基础知识】CPU原理之减法、乘法和除法

    中介绍了布尔逻辑.数学和电路的关系,我们也得到了与门.或门.非门.或非门.与非门.异或门等门电路以及一个加法器,并且了解了计算机是如何做加法的,这篇文章介绍一下计算机是如何做减法以及乘除法的. 0x0 ...

  5. FPGA基础知识了解

    FPGA学习的一些误区 FPGA入门必看资源 FPGA百度百科 FPGA基础知识及其工作原理 高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可编程门阵列(FPGA).无论你使用图形化设 ...

  6. IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路

    1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...

  7. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  8. 【Spring】AOP实现原理(一):AOP基础知识

    AOP相关概念 在学习AOP实现原理之前,先了解下AOP相关基础知识. AOP面向切面编程,它可以通过预编译方式或者基于动态代理对我们编写的代码进行拦截(也叫增强处理),在方法执行前后可以做一些操作, ...

  9. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

随机推荐

  1. win32下开发hadoop

    转载自:http://my.oschina.net/muou/blog/408543[木偶:Windows下使用Hadoop2.6.0-ecli­p­s­e­-­p­­lugin插件] 对于一些细节地 ...

  2. sklearn.preprocessing.StandardScaler 离线使用 不使用pickle如何做

    Having said that, you can query sklearn.preprocessing.StandardScaler for the fit parameters: scale_ ...

  3. [转载]]Java开发如何在线打开Word文件

    此方案使用了PageOffice产品实现在线打开Word文档: 1. 首先从PageOffice官网下载产品开发包,http://www.zhuozhengsoft.com/dowm/ ,下载Page ...

  4. 条款36:绝对不要重新定义,继承而来的non-virtual函数

    重新定义一个继承而来的non-virtual函数可能会使得导致当函数被调用的时候,被调用的函数不是取决于调用的函数究竟属于的对象,而是取决于调用函数的指针或者引用的类型. 所以一般的说主要有两种观点在 ...

  5. uva11997 K Smallest Sums&&UVALive 3135 Argus(优先队列,多路归并)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

  6. 如何使用FlashFXP上传网站程序?

    查看ftp信息 [登陆,www.jinlida.cn ,单击主机管理,即可看到ftp主机地址,ftp账号和密码,注意ftp端口号] 1.请先下载并安装FlashFXP_4.1.8.1700-Speci ...

  7. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    题目链接 dp进阶之CDQ分治优化dp. 前置技能:dp基本功底,CDQ分治,树状数组. 问题等价于求二维最长上升子序列,是一个三维偏序问题(时间也算一维). 设$dp[i]=(l,x)$为以第i枚导 ...

  8. BZOJ5336: [TJOI2018]party

    BZOJ5336: [TJOI2018]party https://lydsy.com/JudgeOnline/problem.php?id=5336 分析: 好题. 正常的思路是设\(f[i][j] ...

  9. [Luogu3727]曼哈顿计划E

    luogu 题意(简化版) 给你一棵树,每个点上有一个\(SG\)值,问你是否存在一条路径使得\(SG\)异或和为\(0\). sol 可以当做每个点的稳定值就是这个点上的石子数量. 很显然我们只需要 ...

  10. 我的ubuntu新系统自动装软件脚本

    装一些常用软件 配一下环境变量 #!/bin/bash #download g++sudo apt-get install g++ -y#download codeblockssudo apt-get ...