MyBatis 快速入门和重点详解(详解)
目录
1、创建项目(本博主就使用Eclipse,其他编辑器都可以,工具而已)
2、创建数据库(mybatisdemo)及表(student)
4、在entity包下创建userMapper,xml文件,如下图
前言:
Mybatis概念、名词的解释这里就不在过多的解释了。这篇博文主要演示,从0开始快速上手Mybatis框架。先学会使用,再去了解为什么这样做,为什么约定大于配置(这里后面会说到)。先把效果做出来,让自己在有一丝的成就感下再去探究Mybatis更深层次的东西。Come on
图解:
1、 mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
准备工作:
既然打算从零开始,这里暂不打算使用Maven构建,就使用普通的java Project即可。后面spring整合时使用maven构建。
工具:Eclispe、IDEA等均可
Jar:mybatis-3.x.x.jar (mybatis类库)、mysql-connector-java(数据库连接)
可以在官网http://blog.mybatis.org/或https://github.com/mybatis/mybatis-3/releases中下载MyBatis的资源文件mybatis-3.x.x.zip
开始:
1、创建项目(本博主就使用Eclipse,其他编辑器都可以,工具而已)
创建好普通java project(如下左图) 。因为是普通java项目,因此自己手动创建lib文件夹放jar包(如下右图)。
选中两个jar包,右键Build path,选择Add to build path 会出现如下图,即可。
2、创建数据库(mybatisdemo)及表(student)
注:复制此sql语句,如若运行不成功,有可能是网页转换问题,手动建表即可。
INSERT INTO `mybatisdemo`.`student`(`id`, `name`, `age`) VALUES (11, '张三', 20);
INSERT INTO `mybatisdemo`.`student`(`id`, `name`, `age`) VALUES (22, '李四', 21);
INSERT INTO `mybatisdemo`.`student`(`id`, `name`, `age`) VALUES (33, '王五', 22);
3、创建User对象
根据表中的字段来进行创建实体类。这里需要有Get与Set方法
注:此处只是看起来更方便。开发中可以使用lombok中注解@Data即可。
package com.sss.entity;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
4、在entity包下创建userMapper,xml文件,如下图
<?xml version="1.0" encoding="UTF-8"?>
<!--mapper:根标签, namespace:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="mybatis.userMapper">
<!--
id:唯一标识,随便写, 在同一个命名空间下保持唯一
parameterType: 入参类型
resultType:sql语句查询结果集的封装类型,
-->
<select id="selectUser" parameterType="int" resultType="com.sss.entity.User">
select * from mybatisdemo where id = #{id}
</select>
</mapper>
5、创建MyBatis的配置文件
注:因为是java简单项目,因此配置文件就先暂时放置src目录下,spring+mybatis中会按照开发规定放置,这里不过多计较。
自行修改数据库用户名、密码及mapper路径配置
<?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>
<environments default="development">
<environment id="development">
<!-- 事务管理器,JDBC类型的事务管理器 -->
<transactionManager type="JDBC" />
<!-- 数据源,池类型的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatisdemo?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 在配置文件(mybatis-config.xml)中注册SQL映射文件(studentMapper.xml) -->
<mappers>
<mapper resource="com/sss/entity/userMapper.xml" />
</mappers>
</configuration>
6、创建MybatisTest.java进行测试
package com.sss.test;
import java.io.IOException;
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 com.sss.entity.User;
public class MybatisTest {
public static void main(String[] args) throws IOException {
// 指定全局配置文件
String resource = "mybatis-config.xml";
// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 构建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 还可以传递第二参数,直接指定默认环境是那个
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 操作CRUD,第一个参数:指定statement,规则:命名空间+“.”+statementId
// 第二个参数:指定传入sql的参数:这里是用户id
User user = sqlSession.selectOne("mybatis.userMapper.selectUser", 1);
System.out.println("user: " + user);
} finally {
sqlSession.close();
}
}
}
图解:
测试结果:只进行查询测试,剩下的增删改都一样。
______________________________________________________________________________________________
坚持总结工作中遇到的技术问题,坚持记录工作中所思所见。以下资料群中均可下载
上一篇: Hibernate 的主键生成策略