1. MyBatis简介

1)MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

3)MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录

2. 使用 MyBatis原因

1)JDBC

(1)SQL 夹在 Java 代码块里,耦合度高导致硬编码内伤

(2)维护不易且实际开发需求中 sql 是有变化,频繁修改的情况多见

2)Hibernate 和 JPA

(1)长难复杂 SQL,对于 Hibernate 而言处理也不容易

(2)内部自动生产的 SQL,不容易做特殊优化

(3)基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。导致数据库性能下降

3)MyBatis

(1)对开发人员而言,核心 sql 还是需要自己优化

(2)sql 和 java 编码分开,功能边界清晰,一个专注业务、一个专注数据

3. MyBatis下载

1)下载网址

https://github.com/mybatis/mybatis-3/

4. MyBatis HelloWorld

· HelloWorld

– 创建一张测试表

– 创建对应的javaBean

– 创建mybatis配置文件,sql映射文件

– 测试

1) 开发环境准备

(1) 导入 MyBatis 框架的 jar 包、Mysql 驱动包、log4j 的 jar 包

log4j:经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。

mysql-connector:连接数据库的驱动

mybatis:使用mybatis框架

log4j-1.2.17.jar

mybatis-3.4.1.jar

mysql-connector-java-5.1.37-bin.jar

(2)导入log4j的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT"
class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

2)创建Mysql测试表

-- 创建库

CREATE DATABASE test_mybatis;

-- 使用库

USE test_mybatis;

-- 创建表

CREATE TABLE tbl_employee(

id INT(11) PRIMARY KEY AUTO_INCREMENT,

last_name VARCHAR(50),

email VARCHAR(50),

gender CHAR(1)

);

3)Employee

使用Employee接收数据库的记录.

public class Employee {

    private Integer id;
private String lastName;
private String email;
private String gender; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]";
}
}

Employee.java

4)配置文件

(1)参考MyBatis官方手册

<?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="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root123" />
</dataSource>
</environment>
</environments> <!-- !!!!!!!!!非常重要!!!!!!!!!!!! -->
<!-- 将我们写好的sql映射文件<EmployeeMapper.xml>一定要注册到全局配置文件中 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers> </configuration>

(2)创建MyBatis的SQL映射文件

<?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.atguigu.mybatis.EmployeeMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
-->
<select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>

</mapper>

5)测试

(1) 构建 SqlSessionFactory

根据全局配置文件,利用SqlSessionFactoryBuilder创建SqlSessionFactory

  String resource = "mybatis-config.xml";

  InputStream inputStream = Resources.getResourceAsStream(resource);

  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

(2)从 SqlSessionFactory 中获取 SqlSession

使用SqlSessionFactory获取sqlSession对象。一个SqlSession对象代表和数据库的一次会话。

使用SqlSession根据方法id进行操作。

① 最新版的Session获取方式

try (SqlSession session = sqlSessionFactory.openSession()) {

  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

}

② 4.1版本获取方式

// 获取sqlSession实例,能直接执行已经映射的sql语句

// sql的唯一标识:statement Unique identifier matching the statement to use.

// 执行sql要用的参数:parameter A parameter object to pass to the statement.

   SqlSession openSession = sqlSessionFactory.openSession();

  try {

    Employee employee = openSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp", 1);

    System.out.println(employee);

  } finally {

    openSession.close();

  }

(3)NameSpaces说明  

(4)注入框架说明


使用接口式编程

public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}

EmployeeMapper.java

    @Test
public void test1() throws IOException { //1. 获取SQLSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.获取sqlsession对象
SqlSession openSession = sqlSessionFactory.openSession(); //3.获取接口的实现类对象 接口的类对象会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass());
System.out.println(employee);
} finally {
openSession.close();
} }

EmployeeTest.java

    <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>

EmployeeMapper.xml

参考文档:https://mybatis.org/mybatis-3/zh/getting-started.html

https://github.com/mybatis/mybatis-3/

01、MyBatis HelloWorld的更多相关文章

  1. 01、Mybatis快速入门

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  2. spring、springmvc、mybatis整合笔记

    这段时间上一个项目刚做完,下一个项目还没开始,趁这个时候来认真总结一下上个项目使用的ssm开发框架.由于,项目中关于使用ssm这部分的代码和配置是我们项目的整体架构师一个独立完成的,我们只负责业务部分 ...

  3. Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统

    一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...

  4. 基于Maven + SSM (Spring、SpringMVC、Mybatis)构建一个简单的测试项目

    最近在公司实习期间的培训交流中有机会接触到SSM,然后自己花费1周的时间投入学习.谈不上深刻理解其中原理,所以没有涉及理论知识,只是浅层次的学习如何使用,在此将学习过程记录整理出来,一方面自己备用:另 ...

  5. [J2EE]MyBatis HelloWorld

    一.MyBatis简单介绍 iBatis是apche的一个开源项目.2010年迁移到google code后改名为MyBatis,2013年前已到github.MyBatis是一个基于java的持久层 ...

  6. java maven、springmvc、mybatis 搭建简单Web项目学习笔记

    前言: 空余的时间,学学 Java,没准哪天用的到: 环境搭建折腾了好几天,总算搞顺了,也做个学习笔记,以防后面会忘记: 一.安装文件及介绍 JDK:jdk1.8.0 77 eclipse-maven ...

  7. springBoot整合spring、springMVC、mybatis

    前文 1.为什么使用springBoot 众所周知,spring是Java在搭建后台时非常实用的框架,其整合了市场上几乎所有的主流框架于一体,使后端编程更加高效.快速: 而SpringBoot更是把s ...

  8. Spring Boot -- Spring Boot之@Async异步调用、Mybatis、事务管理等

    这一节将在上一节的基础上,继续深入学习Spring Boot相关知识,其中主要包括@Async异步调用,@Value自定义参数.Mybatis.事务管理等. 本节所使用的代码是在上一节项目代码中,继续 ...

  9. SpringBoot:整合Druid、MyBatis

    目录 简介 JDBC 导入依赖 连接数据库 CRUD操作 自定义数据源 DruidDataSource Druid 简介 配置数据源 配置 Druid 数据源监控 配置 Druid web 监控 fi ...

随机推荐

  1. xshell多窗口同时执行输入命令

  2. Linux命令之命令别名

    对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行 显示当前shell进程所有可用的命令别名 [04:33:43 root@C8[ ~]#alias alias cp='cp -i' al ...

  3. git删除缓存区中文件

    删除缓冲区中的文件 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除: git rm --f "文件路径",不仅将该文件从缓 ...

  4. mysql 必会基础2 distinct

    1.插入数据方式 a> insert into student (id, name, age) values (1, 'zhangsan', 3); --字符串类型要用双引号.或单引号引起来,否 ...

  5. centos7 添加环境变量

    修改/etc/profile文件使其永久性生效,并对所有系统用户生效 PATH=$PATH:/usr/local/php/bin export PATH source /etc/profile

  6. 感知机vs支持向量机

    感知机原理:二维空间中找到一条直线可以把所有二元类别分离开,三维或多维空间中,找到一个分离超平面把所有二元类别分离开.而可把所有二元类别分离开的超平面不止一个,哪个是最好的呢?损失函数:所有误分类的点 ...

  7. C2. Pokémon Army (hard version) 解析(思維)

    Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...

  8. 硬核!15张图解Redis为什么这么快

    作为一名服务端工程师,工作中你肯定和 Redis 打过交道.Redis 为什么快,这点想必你也知道,至少为了面试也做过准备.很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两 ...

  9. 机器学习 第5篇:knn回归

    基于最邻近算法的分类,本质上是对离散的数据标签进行预测,实际上,最邻近算法也可以用于对连续的数据标签进行预测,这种方法叫做基于最邻近数据的回归,预测的值(即数据的标签)是连续值,通过计算数据点最临近数 ...

  10. python爬虫scrapy框架

    Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...