一、mybatis介绍
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
下载地址:https://github.com/mybatis/mybatis-3/releases
1.1mybatis执行流程图,如下图:
二、mybatis快速入门
1.创建工程(可以使web工程,也可以是普通java工程)
2.加入jar包
3.创建数据库表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
`birthday` date NULL DEFAULT NULL COMMENT '生日',
`sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
`address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`) USING BTREE
)
4.创建user的pojo类
package me.mybatis.po;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class User implements Serializable{
private int id;
private String username;//用户名
private String sex;//性别
private Date birthday;//出生日期
private String address;//地址
/*private List<Orders> orders;*/
/*public List<Orders> getOrders() {
return orders;
}
public void setOrders(List<Orders> orders) {
this.orders = orders;
}*/
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
+ address + ", orders=" + "" + "]";
}
}
5.创建user的mapper(user.xml)
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,对statement的信息进行分类管理 -->
<!-- 注意:在mapper代理是,它具有特殊重要的作用 -->
<mapper namespace="test" >
<!-- 根据用户ID查询用户信息 -->
<!-- select:表示一个mappedStatement对象 -->
<!-- id:statement的唯一标识 -->
<!-- #{}:标识一个占位符? -->
<!-- #{id}:里面的id表示输入的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 -->
<!-- parameterType:输入参数得java类型 -->
<!-- resultType:输出结果的所映射的Java类型(单条记录所对应的java类型) -->
<select id="findUserById" parameterType="int" resultType="me.mybatis.po.User">
select * from user where id=#{id}
</select>
</mapper>
6.创建sqlMapConfig.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>
<!-- 配置mybaits的环境细信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3307/mybatis01" />
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件 -->
<mappers>
<!-- 注册mapper -->
<mapper resource="me/mybatis/mapper/User.xml"/>
</mappers>
</configuration>
7.创建测试类,测试映射mapper中的select操作
7.1工程目录
7.2测试代码
package me.mybatis.test;
import java.io.InputStream;
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.Before;
import org.junit.Test;
import me.mybatis.po.User;
public class test01 {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
//取出配置文件
//全局配置文件的路径
String resource="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlsession工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() {
//得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//调用映射mapper的id为finUserById的select
//第一个参数:表示statement的唯一表示namespace.id,第二个参数表示传入参数
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
}
}
7.3运行结果
从数据库中查询到id为1的用户