什么是 MyBatis ?
       MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
 
mybatis文档
 
mybatis入门程序
目录结构

1.创建数据库和数据表,数据库采用mysql
CREATE TABLE `tb_user` (
`Id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`Username` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL,
`Password` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL,
`Nickname` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL,
`Type` INT(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
)

  

2.创建一个普通的java project,在项目上右建新建一个文件夹(folder) lib,将jar导入,引用相关jar。
我这里一共用了三个jar,分别是:mybatis-3.1.1.jar、mysql-connector-java-5.1.17-bin.jar、junit-4.9.jar
 

3.创建model和xml文件
User.java
package org.mybatis.test.model;

public class User {
private int id;
private String username;
private String password;
private String nickname;
private int type;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
User.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="org.mybatis.test.model.User">
<insert id="add" parameterType="org.mybatis.test.model.User">
insert into tb_user (username,password,nickname,type)
value(#{username},#{password},#{nickname},#{type})
</insert>
<update id="update" parameterType="org.mybatis.test.model.User">
update tb_user set password=#{password},nickname=#{nickname},type=#{type} where id=#{id}
</update> <delete id="delete" parameterType="int">
delete from tb_user where id=#{id}
</delete> <select id="load" parameterType="int" resultType="org.mybatis.test.model.User">
select * from tb_user where id=#{id}
</select> <select id="list" resultType="org.mybatis.test.model.User">
select * from tb_user
</select>
</mapper>
4.mybatis-config.xml文件
      1.先添加jdbc.properties文件
username=root
password=123456
url=jdbc:mysql://localhost:3306/mybatistest
driver=com.mysql.jdbc.Driver
       2.添加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 resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<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>
<mapper resource="org/mybatis/test/model/User.xml"/>
</mappers>
</configuration>
5.junit测试
TestMyBatis.java
package org.mybatis.test.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.mybatis.test.model.User; public class TestMyBatis {
@Test
public void testInsertUser() {
try {
//1、创建配置文件(mybatis-config.xml)的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建SQLSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3、创建SQLSessioin
SqlSession session = factory.openSession();
//4、调用mapper文件插入数据(调用之前需要将mapper文件加入到mybatis-config.xml中)
User u = new User();
u.setNickname("小助理001");
u.setPassword("123456");
u.setUsername("zhuli001");
u.setType(0);
session.insert("org.mybatis.test.model.User.add", u);
session.commit();
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testUpdateUser() {
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
User u = new User();
u.setNickname("小猪手001");
u.setPassword("111111");
u.setType(0);
u.setUsername("zhushou");
u.setId(1);
session.update("org.mybatis.test.model.User.update",u);
session.commit();
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testDeleteUser() {
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory f = new SqlSessionFactoryBuilder().build(is);
SqlSession session = f.openSession();
session.delete("org.mybatis.test.model.User.delete",2);
session.commit();
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testLoad() {
SqlSession session = null;
try{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory f = new SqlSessionFactoryBuilder().build(is);
session = f.openSession();
User u = (User)session.selectOne(User.class.getName()+".load", 1);
System.out.println(u.getNickname());
}
catch (IOException e) {
e.printStackTrace();
}
finally {
session.close();
}
} @Test
public void testList() {
SqlSession session = null;
try{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory f = new SqlSessionFactoryBuilder().build(is);
session = f.openSession();
List<User> us = session.selectList(User.class.getName()+".list", null);
for (User u : us) {
System.out.println(u.getId()+"-"+u.getUsername()+"-"+u.getNickname()); //逐个输出数组元素的值
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
session.close();
}
} }
 
 

01—mybatis开山篇的更多相关文章

  1. 01—EF开山篇,ORM介绍

    我是2014年接触的EF,用了一年多,感觉非常的方便,现在的公司没有使用,最近有朋友接了两个项目找我帮忙,都想使用EF,自己也有断时间没有使用,借着这个机会复习下.Entity Framework,简 ...

  2. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  3. Struts2开山篇【引入Struts、自定义MyStruts框架】

    前言 这是Strtus的开山篇,主要是引入struts框架-为什么要引入struts,引入struts的好处是什么-. 为什么要引入struts? 首先,在讲解struts之前,我们来看看我们以前写的 ...

  4. 【DevOps】团队敏捷开发系列--开山篇

    随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发-测试-发布)模式已经不能满足快速交付的需求.2009 年左右 DevOps 应运而生,开发运维一体化,通过自动化工具与流程让整个软件开发构建.测 ...

  5. WCF开山篇__图片传输

    WCF开山篇__图片传输   一.  简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是. ...

  6. MyBatis高级篇之整合ehcache缓存框架

    MyBatis高级篇之整合ehcache缓存框架  2017-09-01  0 Comments  1,671 Views  0 Times 一.前言 MyBatis为我们提供了Cache接口,也提供 ...

  7. 01: tornado基础篇

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...

  8. Mybatis 实用篇(四)返回值类型

    Mybatis 实用篇(四)返回值类型 一.返回 List.Map List<User> getUsers(); <select id="getUsers" re ...

  9. Mybatis 实用篇(三)参数处理

    Mybatis 实用篇(三)参数处理 sql 语句中的参数 parameterType 可以省略不写. 一.参数封装 1.1 单个参数处理 public interface UserMapper { ...

随机推荐

  1. 如何在视图中启用thymeleaf

    1.在HTML标签中引入一个属性 <html xmlns:th="http://www.thymeleaf.org"> <!-- 引入xmlns:th属性才能启用 ...

  2. 1-2-K Game

    题目链接:https://vjudge.net/contest/330119#problem/E 题目大意可以理解为: 1.给出n个物品以及k,Alice与Bob轮流拿1个,或2个,或k个物品,Ali ...

  3. Java包的基本概述

    第七章 7.1 包的基本概述 起因: 在我们设计一个程序的时候(尤其是多人合作),会写一些类来实现功能,但是往往会有重名的现象发生,为了解决这个问题,则专门设计了包.(还有其他作用,下述) 简单理解: ...

  4. oracle - for in loop 循环更新

    用法:目的更新B表的数据 查询出A表的字段,命名为表1.然后更新B表 BEGIN FOR 表1 IN ( SELECT [匹配字段],[更新字段] FROM A表 ) loop UPDATE B表 S ...

  5. 使用dockerfile 搭建django系统(nginx+redis+mongodb+celery)

    背景 有需求需要对django系统进行docker化,以达到灵活部署和容灾.该系统基于django 2.2版本开发,数据库采用mongodb,服务器使用nginx,因系统有部分异步任务,异步任务则采用 ...

  6. Win7 Eclipse 搭建spark java1.8编译环境,JavaRDD的helloworld例子

    [学习笔记] Win7 Eclipse 搭建spark java1.8编译环境,JavaRDD的helloworld例子: 在eclipse oxygen上创建一个普通的java项目,然后把spark ...

  7. Redis3.2学习记录

    nosql 特征:访问量大,高并发,高可用,海量数据 redis3.2作用:减轻关系型数据库查询的压力安装:windows下解压即可使用,启动服务如:redis-server redis-config ...

  8. java如何读写json文件

    在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是一种实现方式,但是这有一个弊端 ...

  9. S02_CH06_XADC实验

    S02_CH06_XADC实验 6.1实验概述 这次借助zynq的内嵌的XADC来采集zynq内部的一些参数: •VCCINT:内部PL核心电压 •VCCAUX:辅助PL电压 •VREFP:XADC正 ...

  10. 【思维】Kenken Race

    题目描述 There are N squares arranged in a row, numbered 1,2,...,N from left to right. You are given a s ...