一、MyBatis简介

1.1、概述

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

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

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

1.2、ORM

orm工具的基本思想
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory  产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。

5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。

二、环境搭建

2.1、所需要Jar包

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

2.2、建立数据库与插入数据

这里使用MySql数据库:

CREATE TABLE `mybatis`.`user` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`name` VARCHAR(45) NOT NULL DEFAULT '无名氏' COMMENT '用户名',
`age` TINYINT(3) NOT NULL DEFAULT 21 COMMENT '用户年龄',
`birthday` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '用户生日',
`address` VARCHAR(256) NOT NULL DEFAULT '北京' COMMENT '用户地址',
PRIMARY KEY (`id`) COMMENT '')
COMMENT = '用户表';
insert into user(id,name,age,birthday,address)
values(1,'张三',23,'1990-01-23 20:24:21','上海'),(2,'李四',18,'1986-12-23 12:13:11','广州'),(3,'张五',33,'1975-09-23 02:13:11','上海'),(4,'王六',27,'1984-11-01 11:23:14','重庆'),(5,'张三丰',108,'1971-01-02 02:12:11','武当');

2.3、建立Web项目把Jar包引入项目

三、建立配置文件,实体类,与接口

3.1、建立实体类

/**  

* @Title: User.java

* @Package com.pb.mybatis.po

* @Description: TODO(用户类)

* @author 刘楠 

* @date 2015-10-26 下午5:42:13

* @version V1.0  

*/
package com.pb.mybatis.po; import java.util.Date; /**
* @ClassName: User * @Description: TODO(用户类) * @author 刘楠 * @date 2015-10-26 下午5:42:13 * */
public class User { /**
* id(用户ID)
*/
private int id;
/**
* name(用户名)
*/
private String name;
/**
*age (用户年龄)
*/
private int age;
/**
* birthday(用户生日)
*/
private Date birthday;
/**
* address (用户地址)
*/
private String address;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the brithday
*/
public Date getBirthday() {
return brithday;
}
/**
* @param brithday the brithday to set
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
} }

3.2、写实体类接口

/**  

* @Title: UserMapper.java

* @Package com.pb.mybatis.dao

* @Description: TODO(用一句话描述该文件做什么)

* @author 刘楠 

* @date 2015-10-26 下午5:45:13

* @version V1.0  

*/
package com.pb.mybatis.dao; import com.pb.mybatis.po.User; /**
* @ClassName: UserMapper * @Description: TODO(用户类数据访问接口) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * */
public interface UserMapper {
/**
*
* @Title: selectUserById * @Description: TODO(根据用户ID查询) * @param id
* @return User
*/
public User selectUserById(int id); }

3.3、与db.properties

db.properties

#数据库基本配置
#驱动
driver=com.mysql.jdbc.Driver
#连接url
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
#用户名
username=root
#密码
password=root

3.4、建立映射文件与configuration.xml配置

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">
<!--mapper命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper">
<!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径-->
<select id="selectUserById" parameterType="int" resultType="com.pb.mybatis.po.User">
select * from user
where id=#{id}
</select>
</mapper>

configuration.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="db.properties"/>
<!--配置环境 -->
<environments default="development">
<environment id="development">
<!--事务管理 -->
<transactionManager type="JDBC"/>
<!--数据源 通过Properties加载配置 -->
<dataSource type="POOLED">
<!--驱动driver -->
<property name="driver" value="${driver}"/>
<!--连接URL -->
<property name="url" value="${url}"/>
<!--用户名 -->
<property name="username" value="${username}"/>
<!--密码 -->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--建立映射 -->
<mappers>
<mapper resource="com/pb/mybatis/dao/UserMapper.xml"/>
</mappers>
</configuration>

3.5、简单根据ID查询

/**  

* @Title: Test1.java

* @Package com.pb.mybatis.test

* @Description: TODO(用一句话描述该文件做什么)

* @author 刘楠 

* @date 2015-10-26 下午5:55:54

* @version V1.0  

*/
package com.pb.mybatis.test; 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; import com.pb.mybatis.dao.UserMapper;
import com.pb.mybatis.po.User; /**
* @ClassName: Test1 * @Description: TODO(测试类) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * */
public class Test1 {
//Session工厂
static SqlSessionFactory sqlSessionFactory=null;
//Session
static SqlSession session=null;
//字符流
static Reader reader=null; public static void main(String[] args) { selectById();
}
/**
*
* @Title: selectById * @Description: TODO(根据ID查找用户)
void
*/
public static void selectById(){
//加载配置文件
try {
reader=Resources.getResourceAsReader("configuration.xml");
//建立SqlSessionFactory
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//打开Session
session=sqlSessionFactory.openSession();
//获取用户接口对象
UserMapper userMapper=session.getMapper(UserMapper.class);
//调用查询方法
User user=userMapper.selectUserById(1);
System.out.println(user.getName()+"..."+user.getAge()+"..."+user.getBirthday().toLocaleString()+"..."+user.getAddress());
} catch (IOException e) {
e.printStackTrace();
} } }

3.6、使用别名

<!--使用别名  -->
<typeAliases>
<!--用户类别名 -->
<typeAlias type="com.pb.mybatis.po.User" alias="User"/>
</typeAliases>

更改mapper.xml中的User类的路径 为别名

<?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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper">
<!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径-->
<select id="selectUserById" parameterType="int" resultType="User">
select * from user
where id=#{id}
</select>
</mapper>

测试类不变

3.7、使用resultMap

在mapper.xml中使用resultMap

<?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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--结果映射 不区另大小写,建议数据库的列写为大写 -->
<resultMap type="User" id="userMap">
<!--主键 -->
<id property="id" column="ID"/>
<!--姓名 -->
<id property="name" column="NAME"/>
<!--年龄 -->
<id property="age" column="AGE"/>
<!--生日 -->
<id property="birthday" column="BIRTHDAY"/>
<!--地址 -->
<id property="address" column="ADDRESS"/>
</resultMap> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名, resultMap写已经有的映射2都只能同时有一个-->
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from user
where id=#{id}
</select>
</mapper>

测试类不变

四、实现基本的增、删、改、查

4.1、在接口中增加,模糊查询,添加,修改,删除的方法,

/**  

* @Title: UserMapper.java

* @Package com.pb.mybatis.dao

* @Description: TODO(用一句话描述该文件做什么)

* @author 刘楠 

* @date 2015-10-26 下午5:45:13

* @version V1.0  

*/
package com.pb.mybatis.dao; import java.util.Date;
import java.util.List; import com.pb.mybatis.po.User; /**
* @ClassName: UserMapper * @Description: TODO(用户类数据访问接口) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * */
public interface UserMapper {
/**
*
* @Title: selectUserById * @Description: TODO(根据用户ID查询) * @param id
* @return User
*/
public User selectUserById(int id); /**
*
* @Title: selectUserLikeName * @Description: TODO(根据姓名模糊查询) * @param name
* @return List<User>
*/
public List<User> selectUserLikeName(String name); /**
*
* @Title: addUser * @Description: TODO(添加用户) * @param user void
*/
public void addUser(User user);
/**
*
* @Title: updateUser * @Description: TODO(修改用户) * @param user void
*/
public void updateUser(User user);
/**
*
* @Title: deleteUser * @Description: TODO(删除用户) * @param id void
*/
public void deleteUser(int id);
}

4.2、在mapper.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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--结果映射 不区另大小写,建议数据库的列写为大写 -->
<resultMap type="User" id="userMap">
<!--主键 -->
<id property="id" column="ID"/>
<!--姓名 -->
<id property="name" column="NAME"/>
<!--年龄 -->
<id property="age" column="AGE"/>
<!--生日 -->
<id property="birthday" column="BIRTHDAY"/>
<!--地址 -->
<id property="address" column="ADDRESS"/>
</resultMap> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名, resultMap写已经有的映射2都只能同时有一个-->
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from user
where id=#{id}
</select>
<!--根据姓名模糊查询 -->
<select id="selectUserLikeName" parameterType="String" resultMap="userMap">
select * from user
where name like "%"#{name}"%"
</select> <!--添加用户 useGeneratedKeys使用数据的增序列 keyProperty将增加后的用户ID返回-->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,age,birthday,address)
values(#{name},#{age},#{birthday},#{address})
</insert>
<!--修改更新 -->
<update id="updateUser" parameterType="User">
update user set name=#{name},age=#{age},birthday=#{birthday},address=#{address}
where id=#{id}
</update>
<!--删除 -->
<delete id="deleteUser" parameterType="int">
delete from user
where id=#{id}
</delete>
</mapper>

4.3、测试类

/**  

 * @Title: Test1.java

 * @Package com.pb.mybatis.test

 * @Description: TODO(用一句话描述该文件做什么)

 * @author 刘楠 

 * @date 2015-10-26 下午5:55:54

 * @version V1.0  

 */
package com.pb.mybatis.test; import java.io.IOException;
import java.io.Reader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
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 com.pb.mybatis.dao.UserMapper;
import com.pb.mybatis.po.User; /**
* @ClassName: Test1
*
* @Description: TODO(测试类)
*
* @author 刘楠
*
* @date 2015-10-26 下午5:55:54
*
*
*/
public class Test1 {
// Session工厂
static SqlSessionFactory sqlSessionFactory = null;
// Session
static SqlSession session = null;
// 字符流
static Reader reader = null; public static void main(String[] args) { } /**
*
* @Title: selectById
*
* @Description: TODO(根据ID查找用户) void
*/
public static void selectById() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 调用查询方法
User user = userMapper.selectUserById(1);
System.out.println(user.getName() + "..." + user.getAge() + "..."
+ user.getBirthday().toLocaleString() + "..."
+ user.getAddress());
} catch (IOException e) {
e.printStackTrace();
} } /**
*
* @Title: selectLikeName
*
* @Description: TODO(根据用户名模糊查询) void
*/
public static void selectLikeName() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 调用查询方法
List<User> users = userMapper.selectUserLikeName("张");
for (User user : users) {
System.out.println(user.getName() + "..." + user.getAge()
+ "..." + user.getBirthday().toLocaleString() + "..."
+ user.getAddress());
}
} catch (IOException e) {
e.printStackTrace();
} }
/**
*
* @Title: addUser * @Description: TODO(添加用户)
void
*/
public static void addUser() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 声明新用户
User user =new User();
user.setName("呵呵");
user.setAge(22);
String d="1984-09-23 20:23:22";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date date=sdf.parse(d);
user.setBirthday(date);
user.setAddress("不知道是哪的");
userMapper.addUser(user);
System.out.println("插入后的ID"+user.getId());
//提交事务
session.commit();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
/**
*
* @Title: updateUser * @Description: TODO(修改用户)
void
*/
public static void updateUser() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 调用查询方法
User user = userMapper.selectUserById(6);
user.setName("想起 来叫什么了");
user.setAddress("魔都上海");
//更新
userMapper.updateUser(user);
//提交事务
session.commit();
} catch (IOException e) {
e.printStackTrace();
} }
public static void detleUser() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class); //删除
userMapper.deleteUser(6);
//提交事务
session.commit();
} catch (IOException e) {
e.printStackTrace();
} }
}

MyBatis入门(一)---基本使用的更多相关文章

  1. MyBatis1:MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  3. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  4. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  5. mybatis入门_mybatis基本原理以及入门程序

    一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...

  6. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  7. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  8. MyBatis入门学习(一)

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

  9. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  10. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

随机推荐

  1. CSS实例

    CSS 实例 CSS背景 设置页面的背景颜色 设置不同元素的背景颜色 设置一个图像作为页面的背景 错误的的背景图片 如何在水平方向重复背景图像 如何定位背景图像 一个固定的背景图片(这个图片不会随页面 ...

  2. Visual Studio 2013 Preview对C++11的支持

    为期3天的微软Build 2013大会结束了,作为微软一年一度的开发者大会,微软也做足了功夫:很多产品(包括Windows 8.1和Visual Studio 2013 Preview)发布,chan ...

  3. UML系列03之 UML类图(二)

    概要 在"UML系列02之 UML类图(一) "中介绍了类图的基本构成--类的UML表示方法.本文是接着前文,继续对"UML的类图"中几种关系进行介绍.介绍的主 ...

  4. [Math] Deferred Acceptance Algorithm

    约会配对问题 一.立即接受算法: 对于约会的配对,大家都去追自己最心仪的女生.而这个女生面对几位追求者,要立刻做个决定. 被拒绝的男生们调整一下心情,再去追求心中的 No. 2.以此类推. 这样做法有 ...

  5. Awk by Example--转载

    原文地址: http://www.funtoo.org/Awk_by_Example,_Part_1?ref=dzone http://www.funtoo.org/Awk_by_Example,_P ...

  6. Linux的段错误调试方法

    linux段错误的调试方法 相关博文: http://blog.csdn.net/htianlong/article/details/7439030 http://www.cnblogs.com/pa ...

  7. mysql中如何把字符串转换成日期类型

    select date_format('2013-03-09','%Y-%m-%d'); select date_format('2013-03-09','%y-%m-%d'); select STR ...

  8. ok6410 android driver(3)

    This article discusses the Makefile and how to port the module to different platform (localhost and ...

  9. 安装 Oracle P6 EPPM 16 R1 database for 12C

    . 打开命令提示符(Windows)或 终端(如果UNIX)和连接数据库使用以下命令: sqlplus sys/password@dbservicename as sysdba 连接到: sqlplu ...

  10. Ext.NET 4.1.0 GridPanel数据分页

    针对大量数据在前端展示,需要进行分页显示,这里我使用的数据量为100万,数据存储在MongoDb中(也可以存储在本地文件或其它数据库中).最终显示效果如下: 步骤如下: 1.新建程序并配置,详见htt ...