一、配置流程

1.流程示意图(通过XML映射文件实现):

2.流程:

2.1 导入包:
2.1.1 下载包

  数据库驱动包(本文以MySQL为例):https://mvnrepository.com/artifact/mysql/mysql-connector-java

  Mybatis框架包:https://mvnrepository.com/artifact/org.mybatis/mybatis

2.1.2 导入程序

将jar包放入程序新建的文件夹

  

选中jar包,右键Build Path->Add to Build Path,结果如图,jar包已加载进程序内

2.2 添加规则文件

规则文件的位置:①\mybatis-3.4.1\org\apache\ibatis\builder\xml

        ②打开上面下载的Mybatis框架文件夹,查找dtd

规则文件的Key:官方文档内Ctrl+F查找public:

选择Window->Preferences

点击OK,重复上面的操作,完成添加Mapper规则文件。

2.3.编写配置文件
2.3.1 创建XML文件

在src文件下创建XML文件,填写文件名为MybatisConfig.xml,然后Next:

选择DTD文件,然后Next,

选择创建配置文件,然后Next->FInish,创建成功。

2.3.2 编写文件
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
<!--environments标签用于配置数据库连接信息,可以配置多个数据库的连接信息
default属性:环境集里面可以配置多个数据库连接环境,但是必须要指定默认的环境,指定的是环境environment标签的ID
-->
<environments default="sms">
<!-- environment环境标签 ,用于配置一个数据库连接的信息-->
<environment id="sms">
<!--指定使用的事务类型
JDBC : 使用JDBC的事务处理
MANAGER: 不需要事务处理
-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource标签:配置数据库连接信息
type:配置数据源的类型
JNDI :使用JNDI数据源,就是在web服务器配置数据源,让程序调用
POOLED : 使用默认内置的连接池
UNPOOLED:使用直连数据库,不需要连接池
-->
<dataSource type="POOLED">
<!-- 连接四要素 -->
<property name="driver" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sms"/>
<property name="username" value="root"/>
<property name="password" value="12345"/>
</dataSource>
</environment>
</environments>
<!-- 配置指定加载的映射文件 -->
<mappers>
<mapper class="cn.zwj.mapper.StudentMapper"></mapper>
</mappers>
</configuration>

MybatisConfig.xml

2.4 映射文件和映射接口

因为映射文件和映射接口要向对应,所以使用相同命名表示他们的对应关系,在多映射文件中可以很好找到相对应的接口

创建一个映射文件,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.zwj.mapper.StudentMapper">
<!-- #{}类似于?(预处理块),与POJO中的变量名对应 -->
<insert id="insert">
INSERT INTO tb_student (STUDENT_NAME, STUDENT_PWD, STUDENT_STATUS, CREATE_DATE, STUDENT_ACCOUNT) VALUES (#{studentName}, #{studentPwd}, #{studentStatus}, #{createDate}, #{studentAccount})
</insert>
</mapper>

StudentMapper.xml

 package cn.zwj.mapper;

 import cn.zwj.pojo.Student;

 public interface StudentMapper {
int insert(Student student);
}

StudentMapper.java

通过XML中的<mapper>标签的namespace属性,来绑定对应的接口,<insert>标签的id属性值为借口中的方法名

2.5 POJO
 import java.io.Serializable;
import java.util.Date; public class Student implements Serializable{
private static final long serialVersionUID = -9125884258413809899L;
public Long studentId;//bigint(20) not null auto_increment comment '学生编号',
public String studentName;//varchar(50) null default null comment '姓名',
public String studentPwd;//varchar(50) null default null comment '密码',
public Integer studentStatus;//int(11) null default null comment '状态',
public Date createDate;//datetime null default null comment '创建时间',
public String studentAccount;//varchar(50) null default null comment '学生帐号',
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getStudentPwd() {
return studentPwd;
}
public void setStudentPwd(String studentPwd) {
this.studentPwd = studentPwd;
}
public Integer getStudentStatus() {
return studentStatus;
}
public void setStudentStatus(Integer studentStatus) {
this.studentStatus = studentStatus;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public String getStudentAccount() {
return studentAccount;
}
public void setStudentAccount(String studentAccount) {
this.studentAccount = studentAccount;
}
}

Student.java

与数据库中的一个表对应的实体类,实现set/get方法

2.6 会话构建工具类
 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; public class MybatisUtils {
//对外只开放一个工厂
public static final SqlSessionFactory SSF = createSqlSessionFactory();
//声明一个线程变量
public static final ThreadLocal<SqlSession> THREAD_LOCAL = new ThreadLocal<>(); //1.获得会话工厂
private static SqlSessionFactory createSqlSessionFactory() {
try {
//读取配置文件
Reader reader = Resources.getResourceAsReader("MybatisConfig.xml");
//创建会话工厂构建类对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//构建会话工厂
return builder.build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} //2.获得会话
public static SqlSession getSession() {
if (THREAD_LOCAL.get() == null) {
SqlSession session = SSF.openSession();
THREAD_LOCAL.set(session);
}
return THREAD_LOCAL.get();
} public static void close() {
if (THREAD_LOCAL.get() != null) {
SqlSession session = THREAD_LOCAL.get();
session.close();
THREAD_LOCAL.remove();
}
}
}

MybatisUtils.java

为什么只对外开放一个工厂?

答:因为如果出现多个数据源,数据库的连接就可能来自于不同的数据源!导致数据库连接无法同步,从而导致事务失效!

为什么要声明一个线程变量?

答:同访问的一条线程,获得的会话是相同的,实现线程安全

2.7.测试
 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import cn.zwj.mapper.StudentMapper;
import cn.zwj.pojo.Student;
import cn.zwj.utils.MybatisUtils; public class StudentTest {
@Test
public void test1() {
//获得会话
SqlSession session = MybatisUtils.getSession();
//构建映射接口 的动态对象
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
Student student = new Student();
student.setStudentName("张三1");
int insert = studentMapper.insert(student);
System.out.println(insert);
//提交事务
session.commit();
MybatisUtils.close();
}
}

Test.java

当控制台输出一个大于0的数字,表示成功实现运用mybatis框架操作数据库

2.8 修改为注解实现
2.8.1 流程示意图:

2.8.2 修改代码:
 import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options; import cn.zwj.pojo.Student; public interface StudentMapper {
@Insert("INSERT INTO tb_student (STUDENT_NAME, STUDENT_PWD, STUDENT_STATUS, CREATE_DATE, STUDENT_ACCOUNT) VALUES (#{studentName}, #{studentPwd}, #{studentStatus}, #{createDate}, #{studentAccount})")
@Options(useGeneratedKeys = true, keyProperty = "studentId")
//@Options:注解声明生成主键
int insert(Student student);
}

StudentMapper.java

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
<environments default="sms">
<environment id="sms">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sms"/>
<property name="username" value="root"/>
<property name="password" value="12345"/>
</dataSource>
</environment>
</environments>
<!-- 修改映射文件为映射接口-->
<mappers>
<mapper class="cn.zwj.mapper.StudentMapper"></mapper>
</mappers>
</configuration>

MybatisConfig.xml

删除映射文件,然后测试代码。

Mybatis框架的简单运用的更多相关文章

  1. SSM框架之MyBatis框架实现简单的增删改查

    MyBatis框架介绍 MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系是一种半自动化的ORM实现,其封装性要低于Hibernate,性能优越,并且小巧,简单易学,应用也 ...

  2. Java Web开发中Spring+MyBatis框架的简单搭建

    这里使用的eclipse,首先创建一个动态web项目. 1.导入Spring IOC.AOP.DAO.dbcp.dbdrive.mybatis.jar . mybatis-spring.jar  本人 ...

  3. Mybatis框架的简单配置

    Mybatis 的配置 1.创建项目(当然,这是废话) 2.导包 下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis ...

  4. mybatis 框架 的简单使用

    # Global logging configuration #在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error log4j.rootLogger=DEBUG, stdout ...

  5. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  6. Mybatis框架简单使用

    Mybatis框架简单使用 环境搭建 新建一个JavaWeb项目,在web\WEB-INF\创建lib文件,并且在其下添加Mybatis的核心包以及依赖包,以及Mysql驱动包,junit4测试包等. ...

  7. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  8. 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

    此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...

  9. Java Mybatis 框架入门教程

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBati ...

随机推荐

  1. 【热身】github的使用

    GitHub 可以托管各种Git版本库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性.为一个 ...

  2. 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

    微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...

  3. Python_os、os.path、os.shutil使用案例

    import os import os.path print(os.path.basename('/Users/c2apple/Desktop/彩屏')) #获取路径的最后一个组成部分 os.path ...

  4. github routine

    1. 从官方库fork 自己的分支库后,git clone到local. 2. local的remotes/origin默认是自己的分支库.可以添加remotes/upstream指向官方库. 3. ...

  5. 语音识别中的CTC算法的基本原理解释

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者:罗冬日 目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分.目前结合神经网络的端到端的声学模型训练方法主要CTC和基 ...

  6. js基础--浏览器标签页隐藏或显示状态 visibility详解

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 在工作中我们可能会遇到这样的需求,当浏览器切换到别的标签页或着最小化时,我们需要暂停页面上正在播放的视频或者音乐,这个需求 ...

  7. Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)

    一.Bean的Scope Scope描述的是Spring容器如何新建Bean实例的.Spring的Scope有以下几种,通过@Scope注解来实现. (1)Singleton:一个Spring容器中只 ...

  8. RocketMQ部分数据消费不了问题排查

    问题现象 今天忽然收到RocketMQ预警信息如下: 提醒有部分数据没有消费,产生堆积情况. 打开RocketMq-Console-Ng查看如下图形式: 备注:第一反应是Consumer Group内 ...

  9. PAT1099:Build A Binary Search Tree

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  10. Swagger使用教程大全,从入门到精通

    Swagger是遵守OpenAPI规范(OAS)的世界上最大的API框架开发工具,可在整个API生命周期内进行开发,从设计和文档到测试和部署.它提供了许多试用的工具来帮助开发者进行接口开发,如及时接口 ...