MyBatis中文网,超详细的:http://www.mybatis.org/mybatis-3/zh/index.html

MyBatis英文网:http://www.mybatis.org/mybatis-3/

MyBatis的Github:https://github.com/mybatis/mybatis-3

1:创建一个动态web工程
2:导入MyBatils必须的包
    MyBatis的使用说明:
    asm-3.3.1.jar 【字节码的包】
    cglib-2.2.2.jar  【代理包】
    commons-logging-1.1.1.jar  【日志包】
    log4j-1.2.16.jar
    mybatis-3.1.1.jar   【mybatis的核心包】
    mysql-connector-java-5.1.40-bin.jar  【mysql的驱动包】
3:创建数据库和数据表,省略,创建实体类

 package com.bie.mybatis01;
/**
* @author BieHongLi
* @version 创建时间:2017年4月11日 下午2:47:03
*
*/
public class User { private Integer id;//用户编号
private String name;//用户姓名
private int sal;//用户薪资 public Integer getId() {
System.out.println("测试配置文件,确实是调用了user.getId");
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
System.out.println("测试配置文件,确实是调用了user.getName");
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSal() {
System.out.println("测试配置文件,确实是调用了user.getSal");
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
public User(Integer id, String name, int sal) {
super();
this.id = id;
this.name = name;
this.sal = sal;
} }

4:创建MyBatis的工具类:

 package com.bie.utils;

 import java.io.IOException;
import java.io.Reader;
import java.sql.Connection; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; /**
* @author BieHongLi
* @version 创建时间:2017年4月11日 下午3:01:22
* 工具类
*/
public class MyBatisUtils { //定义私有静态当前线程泛型(SqlSession)对象
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
//定义私有静态sqlSessionFactory
private static SqlSessionFactory sqlSessionFactory; //静态块,使用该类时,自动加载该静态块
//加载位于src目录下面的mybatis.cfg.xml配置文件
static{
try {
//读取配置文件mybatis.cfg.xml
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
} //禁止外界通过new方法创建
private MyBatisUtils(){} //获取SqlSession
public static SqlSession getSqlSession(){
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession对象为空
if(sqlSession == null){
//在SqlSessionFactory非空的情况下,获取SqlSession对象
sqlSession = sqlSessionFactory.openSession();
//将sqlSession对象与当前线程绑定在一起
threadLocal.set(sqlSession);
}
//返回sqlSession对象
return sqlSession;
} //关闭SqlSession与当前线程分开
public static void closeSqlSession(){
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession对象非空
if(sqlSession != null){
//关闭SqlSession对象
sqlSession.close();
//分开当前线程与SqlSession对象的关系,目的是让GC尽早回收
threadLocal.remove();
}
} /*public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
Connection con = sqlSession.getConnection();
if(con!=null){
System.out.println("连接成功");
}else{
System.out.println("连接失败");
} System.out.println(con!=null?"connection is ok":"connection is fail");
}*/ }

5:创建映射文件,放到其包中即可,如UserMapper.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"> <!-- MyBatis的映射配置文件
namespace:名称空间,必须唯一
-->
<!-- <mapper namespace="userNamespace"> -->
<mapper namespace="com.bie.mybatis01.User"> <!--
resultMap标签:映射实体与表
type属性:表示实体全路径名
id属性:为实体与表的映射取一个任意名称且唯一的名字
-->
<resultMap type="com.bie.mybatis01.User" id="userMap">
<!-- id标签映射主键
property属性:实体的属性名
column属性:表的字段名
-->
<id column="id" property="id"/> <!-- result标签非主键属性 -->
<result column="name" property="name"/>
<result column="sal" property="sal"/> </resultMap> <!--
insert标签:要书写insert这么一个sql语句
id属性:为insert这么一个sql语句取一个任意唯一的名字
-->
<insert id="insertId" parameterType="com.bie.mybatis01.User">
insert into user values(2,"张三",1234)
</insert> <insert id="insertId2" parameterType="com.bie.mybatis01.User">
<!--
可以这样理解,参数的设置,其实#{id} 就等价于#{user.getId()}
insert into user values(#{user.getId()},#{user.getName()},#{user.getSal()}); -->
insert into user values(#{id},#{name},#{sal})
</insert> </mapper>

6:创建配置文件,放到src目录下面,如mybatils.cfg.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"> <!-- 1:连接数据库的配置 -->
<configuration> <!-- 设置一个默认的连接环境信息 -->
<environments default="jdbc_developer"> <!-- 连接环境信息,取一个任意唯一的名字 -->
<environment id="jdbc_developer"> <!-- 2:MyBatis使用jdbc事务事务管理方式 -->
<transactionManager type="jdbc"></transactionManager> <!-- 3:MyBatis使用连接池方式来获取连接 -->
<dataSource type="pooled"> <!-- 4:配置与数据库交互的4哥必要属性 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 加载映射文件 -->
<mappers>
<mapper resource="com/bie/mybatis01/UserMapper.xml"/>
</mappers> </configuration>

7:开始写测试类UserDao进行测试

 package com.bie.mybatis01;

 import org.apache.ibatis.session.SqlSession;

 import com.bie.utils.MyBatisUtil;
import com.bie.utils.MyBatisUtils; /**
* @author BieHongLi
* @version 创建时间:2017年4月11日 下午3:03:54
* dao层持久层:数据交互层
*/
public class UserDao { /***
* 用户添加的方法
* @param user
*/
public void insert(){
SqlSession sqlSession = null;
try {
//sqlSession = MyBatisUtils.getSqlSession();
sqlSession = MyBatisUtil.getSqlSession();
//事务开始(默认)
//读取UserMapper.xml映射文件中的SQL语句
int i = sqlSession.insert("userNamespace.insertId");
System.out.println("本次操作影响了" + i + "行"); //事务提交
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
sqlSession.rollback();
}finally {
MyBatisUtils.closeSqlSession();
} } /***
* 插入带参的方法
* @param user
*/
public void insert2(User user){
SqlSession sqlSession = null;
try {
//第一首先链接数据库
sqlSession = MyBatisUtils.getSqlSession();
//默认打开事务
//读取UserMapper.xml映射文件的SQL语句
//第一个参数,命名空间.sql的id,d第二个参数是方法的参数user
sqlSession.insert("userNamespace.insertId2", user); //提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
sqlSession.rollback();
}finally {
//关闭SqlSession
MyBatisUtils.closeSqlSession();
} } public void insert3(User user){
SqlSession sqlSession = null;
try {
//第一首先链接数据库
sqlSession = MyBatisUtils.getSqlSession();
//默认打开事务
//读取UserMapper.xml映射文件的SQL语句
//第一个参数,命名空间.sql的id,d第二个参数是方法的参数user
sqlSession.insert("com.bie.mybatis01.User.insertId2", user); //提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
sqlSession.rollback();
}finally {
//关闭SqlSession
MyBatisUtils.closeSqlSession();
} } public static void main(String[] args) {
UserDao dao = new UserDao();
//dao.insert();
//dao.insert2(new User(3,"张三",1234));
dao.insert3(new User(4,"张三",1234)); } }

8:MyBatis的工作流
    (a)通过Reader对象读取src目录下面的mybatis.xml配置文件(该配置文件的名称和未知可以任意)
        Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
    (b)通过SqlSessionFactoryBuilder对象创建 SqlSessionFactory对象
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    (c)从当前线程中获取SqlSession对象
        SqlSession sqlSession = threadLocal.get();
    (d)事务开始,在mybatis中默认
    (e)通过SqlSession对象读取UserMapper.xml映射文件中的操作编号,从而读取sql语句
        int i = sqlSession.insert("userNamespace.insertId");
    (f)事务提交,必写
        sqlSession.commit();
        【注意:不要忘记事务回滚】
    (g)关闭SqlSession对象,并且分开当前线程与SqlSession对象,让GC尽早回收
        MyBatisUtils.closeSqlSession();

时间一分一秒的溜走,让自己做更有意义的事情,奋斗吧,小怪兽~~~

Time passes by, let yourself do more meaningful things, fight it, little monster ~ ~ ~ ~ ~ ~ ~ ~ ~!

MyBatis之Hello world(Mybatis入门)的更多相关文章

  1. MyBatis学习笔记(一)入门

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001    没事看看 - MyBatis工具:www.mybatis.t ...

  2. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  3. mybatis系列笔记(1)---mybatis入门

    mybatis入门   MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了goog ...

  4. MyBatis 学习总结 01 快速入门

    本文测试源码下载地址: http://onl5wa4sd.bkt.clouddn.com/MyBatis0918.rar 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级 ...

  5. Mybatis系列(一):Mybatis入门

    一.Mybatis是什么 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  6. Mybatis系列(一)入门

    Mybatis系列(一)入门 mybatis简介 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结 ...

  7. 持久层之 MyBatis: 第一篇:快速入门

    MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ...

  8. Mybatis Dynamic Query 2.0 入门

    简介 2.0 昨天打包好了,主要是整合了tk.mybatis.mapper 到项目中去,所以和1.x比起来主要多了一个通用mapper.因为作者主要是使用springboot 这里讲一下Springb ...

  9. springmvc+mybatis的增删改查入门

    先到官网了解mybatis的语法:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html 前端用了thymeleaf和vue.js,效果图和demo地址:ht ...

  10. 深入学习Mybatis框架(一)- 入门

    1.什么是Mybatis? Mybatis是一个优秀持久层框架,提供了对数据库的一系列操作(增删改查).Mybatis可以避免重复的写JDBC代码,让我们以较少的代码实现对数据库的操作,从而提高开发效 ...

随机推荐

  1. 使用rownum对oracle分页【原】

    以Student表为例进行分页 建表及插入 -- 有表结构如下 create table STUDENT ( sno INTEGER, sname ), sage INTEGER ); -- 插入数据 ...

  2. 原生js的ajax请求

    传统方法的缺点: 传统的web交互是用户触发一个http请求服务器,然后服务器收到之后,在做出响应到用户,并且返回一个新的页面,,每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次 ...

  3. Java的参数传递是「按值传递」还是「按引用传递」?

    JAVA传递的只有值,.传递的都是栈里的的值,只是有些栈里面的是值.有的是内存地址.(原文传递的都是栈里的的值有误,局部变量在栈中,成员变量在堆中,类变量(静态变量和常量)在方法区中,可以看做本文的变 ...

  4. Java高并发秒杀API之高并发优化

    ---恢复内容开始--- 第1章 秒杀系统高并发优化分析   1.为什么要单独获得系统时间 访问cdn这些静态资源不用请求系统服务器 而CDN上没有系统时间,需要单独获取,获取系统时间不用优化,只是n ...

  5. 机器学习课程-第8周-聚类(Clustering)—K-Mean算法

    1. 聚类(Clustering) 1.1 无监督学习: 简介 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签 ...

  6. 【转载】Etcd+Confd实现Nginx配置文件自动管理

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lizhenliang.blog.51cto.com/7876557/191015 ...

  7. Docker 入门 第五部分:Stacks

    目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ...

  8. centos redis集群搭建

    说明: 10.0.0.111部署6500,6501,6502三个主节点 10.0.0.222部署6500,6501,6502三个备份节点 1.安装redis:略 2.配置内核参数 # 配置 vm.ov ...

  9. Java SE之正则表达式Demo

    @Test public void regex() {//匹配教务系统课程 // String content = "公共机座 (1-10)".replaceAll(" ...

  10. activity 解析

    acitvity的四种状态: running.paused.stopped.killed 生命周期: onCreate()用来加载资源布局 onStart()启动activity,用户已经可以看到界面 ...