1.在mysql中创建一个数据库数据库名为zy;且在数据库zy中创建一个数据表users,数据表的结构如下。
2、idea创建一个项目,并命名zyproject。
(1)“file->project->Maven,如下图所示。
(2) 单击“next”进入,进入项目名称、存放路径、工作组id等如下图所示。
(3) 根据提示,把name=zyproject;location=D:\\Java\\zyproject;GroupId=qiin.com;ArtifactId=zyproject如上图所示。
(4) 单击“next”进入maven设置界面,如下图所示。
(5) maven设置根据需要设置为自己安装的maven,我的设置如上图所示。
(6) 单击“Finish”结束项目创建。如下图所示。
(7) 在main文件夹下创建以下几个文件夹,通过“file->Project Structure->Modules”,如下图所示。
正在上传…重新上传取消
分别在main目录下创建java(sources类型)、Resources(Resources类型)、Tests(Tests类型)、Test Resources(Test Resources类型)。
(8) 创建好这些文件夹后要给它们分别赋相应的类型,类型如下。
(9) 创建好返回到主界面,项目的结构如下图所示。
(10)在src\\main\\java目录中创建两数据包分别是qin.com.entity和qin.com.dao,创建好后工程目录结构如下。
到此maven工程创建结束。
3.添加 Mybatis3.4.5 的坐标(添加mybatis类库)
(1)进入网站https://mvnrepository.com/如下图所示。
(2)在搜索框中输入mybatis,然后单击“Search”,如下图所示。
(3)单击超链接文本“org.mybatis>mybatis”即进行mybatis相关界面。如下图所示。
(4)单击Central选项卡中的3.5.4,即进入3.5.4相关的界面,如下图所示。
(5)然后把Maven选项卡中的内容。
<!– https://mvnrepository.com/artifact/org.mybatis/mybatis –>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
复制到maven工程中pom.xml文件中。
按同样的方式添加mysql坐标,添加mybatis和mysql坐标结束后,工程中的pom.xml内容如下。
<?xml version=\”1.0\” encoding=\”UTF-8\”?>
<project xmlns=\”http://maven.apache.org/POM/4.0.0\” xmlns:xsi=\”http://www.w3.org/2001/XMLSchema-instance\”
xsi:schemaLocation=\”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\”>
<modelVersion>4.0.0</modelVersion>
<groupId>qin.com</groupId>
<artifactId>qinmybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>qinmybatis Maven Webapp</name>
<!– FIXME change it to the project\’s website –>
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<!– https://mvnrepository.com/artifact/mysql/mysql-connector-java –>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
<!– https://mvnrepository.com/artifact/org.mybatis/mybatis –>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
<build>
<finalName>qinmybatis</finalName>
</build>
</project>
4.编写Users实体类
创建users数据表对应的实体类。
在qin.com.entity数据包进行创建,要注意这个Users类中的成员变量名称、类型要和users数据表中的字段名和类型要一样。所以在创建数据表时字段一定不能为汉字或带有空格。Users.java代码如下。
package qin.com.entity;
public class Users {
private int id;
private String name;
private String pass;
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 String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String toString() {
return \”User{\” + \”uid=\” + uid + \”, uname=\’\” + uname + \’\\\’\’ + \”, upass=\” + upass + \’}\’;
}
}
这样与users数据表对应的实体类就创建结束了。
5.编写持久层接口 UsersDao
该接口中所有方法要下面定义的UsersMapper.xml映射文件中的id的方法一样,该接口主要作用是定义对users数据进行操作的抽象方法,如添加、删除、更新、统计等操作。下面我们我们只定义一个查询操作,代码如下。
package qin.com.dao;
import qin.com.entity.Users;
import java.util.List;
/**
* 接口中的访法是与我们定义的UsersMapper.xml的操作是对应的
*/
package qin.com.dao;
import qin.com.entity.Users;
import java.util.List;
/**
* 接口中的访法是与我们定义的UsersMapper.xml的操作是对应的
*/
public interface UsersDao {
/*
查询users数据表中所有数据
*/
List<Users> queryAll();
}
6.创建mybatis约束文件的模板
创建mybatis约束文件的模板主要作用是使得我们快速配置文件,并对配置文件进行语法检测。
一、创建模板文件的准备工作如下。
1、根据下面的地址去下载mybatis的两个约束文件。
http://mybatis.org/dtd/mybatis-3-config.dtd
http://mybatis.org/dtd/mybatis-3-mapper.dtd
下载好文件后要保存在与项目有关的目录中,以便创建模板使用。
二、构建模板文件的过程如下。
1、单击“file->settings\”命令,弹出下面的窗口,如下图所示。
2、单击”Languages & frameworks->Schemas and DTDs”选项如下图所示。
3、单击窗口中project旁边的“+”,会弹出下面的窗口,如下图所示。
按同样的方式,添加另外映射文件约束文件,如下图所示。
最后单击“apply\”应用设置。返回主界面,如下图所示。
4、单击”settings->Editer->File and Code Templates“选项,显示如下图所示的窗口。
5、单击files选项卡下面的”+“来创建一个mybatis配置文件的模板,如下图所示。
mybatis配置文件的内容如下。
<?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>
<typeAliases>
<package name=\”qin.com.entity\”></package>
</typeAliases>
<environments default=\”mysql\”>
<!–配置数据库连接环境–>
<environment id=\”mysql\”>
<transactionManager type=\”JDBC\”></transactionManager>
<!–数据源:driver、url、username、password–>
<dataSource type=\”POOLED\”>
<!– 连接mysql数据库的驱动程序 –>
<property name=\”driver\” value=\”com.mysql.jdbc.Driver\”></property>
<!– 连接mysql数据库的地址 –>
<property name=\”url\” value=\”jdbc:mysql:///qin\”></property>
<!– 连接mysql数据库的管理员 –>
<property name=\”username\” value=\”root\”></property>
<!– 连接mysql数据库的管理员的密码 –>
<property name=\”password\” value=\”admin\”></property>
</dataSource>
</environment>
</environments>
<mappers>
接下来按同样方式创建mybatis的映射文件模板mybatis-mapper.xml。mybatis-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 namespace=\”qin.com.dao.UsersDao\”>
<resultMap id=\”userBean\” type=\”Users\”>
<id property=\”id\” column=\”id\”></id>
<result property=\”name\” column=\”name\”></result>
<result property=\”pass\” column=\”pass\”></result>
</resultMap>
<!– 查询数据表中所有数据 –>
<select id=\”queryAll\” resultMap=\”userBean\”>
select * from users
</select>
</mapper>
创建结束后在文件列表中就出现我们创建的模板了,如下图所示。
到些我们创建mybatis的配置文件和映射文件的模板就创建好了。
6.创建映射文件
在数据包qin.com.entity数据中创建映射文件,UsersMapper.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=\”qin.com.dao.UsersDao\”>
<resultMap id=\”userBean\” type=\”Users\”>
<id property=\”id\” column=\”id\”></id>
<result property=\”name\” column=\”name\”></result>
<result property=\”pass\” column=\”pass\”></result>
</resultMap>
<!– 查询数据表中所有数据 –>
<select id=\”queryAll\” resultMap=\”userBean\”>
select * from users
</select>
</mapper>
说明:我们在UsersMapper.xml里面配置了对数据表users进行增删改查操作,分别是insertUser、deleteUserByName、updateUserById和queryAll
SQL 定义在 usersMapper.xml 文件中,里面的配置作用如下。
<mapper> : XML 的根元素,属性 ηamespace 定义了UsersDao接口的完整路径(qin.com.dao.UsersDao)。
• <select >元素 :我们所定义的一个 SELECT 查询。
• id 属性:定义了当前 SELECT 查询的唯一一个(queryAll它与UsersDao接口中的queryAll9()方法是对应)
result Type :定义了当前查询的返回值类型 ,此处就是指 userBean ,前面配
置中提到的别名主要用于这里,如果没有设置 ,此处就需要写 resu lt Type=”qin.com.entity.Users
select id, …: 查询 SQL 语句。
创建好实体和 Mapper.xml 接下来要mybatis主配置文件中添加下面的内容。
代码如下。
<mappers>
<!– 映射文件地址要记住把映射文件所在数据包中的\”.\”换成“/” –>
<mapper resource=\”qin/com/entity/usersMapper.xml\”></mapper>
</mappers>
7.编写mybatis.xm配置文件
该文件要放在工程目录结构中的Resources目录中,内容如下。该配置文件作用是设置mybatis环境,即连接mysql数据相关设置。
<?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>
<typeAliases>
<package name=\”qin.com.entity\”></package>
</typeAliases>
<environments default=\”mysql\”>
<!–配置数据库连接环境–>
<environment id=\”mysql\”>
<transactionManager type=\”JDBC\”></transactionManager>
<!–数据源:driver、url、username、password–>
<dataSource type=\”POOLED\”>
<!– 连接mysql数据库的驱动程序 –>
<property name=\”driver\” value=\”com.mysql.jdbc.Driver\”></property>
<!– 连接mysql数据库的地址 –>
<property name=\”url\” value=\”jdbc:mysql:///qin\”></property>
<!– 连接mysql数据库的管理员 –>
<property name=\”username\” value=\”root\”></property>
<!– 连接mysql数据库的管理员的密码 –>
<property name=\”password\” value=\”admin\”></property>
</dataSource>
</environment>
</environments>
<mappers>
<!– 映射文件地址要记住把映射文件所在数据包中的\”.\”换成“/” –>
<mapper resource=\”qin/com/entity/usersMapper.xml\”></mapper>
</mappers>
</configuration>
配置简单说明
1、<typeAliases >元素下面配置了 个包的别名,通常确定 个类的时候需要使用类的全限定名称 ,例如qin.com.entity 。在 MyBatis 需要频用到类的全限定名称,为了方便使用,我们配置了 qin.com.entity包,这样配置后,在使用类的时候不需要写包名的部分,只使用 Users即可。
2、<env ir onments >环境 配置中 主要 配置了数据库连接,数据库的 urljdbc:mysql://localhost:3306/zy ,使用的是本机 MySQL 中的 mybatis数据库,后面的 username password 分别是数据库的用户名和密码(如果你的数据库用户名及密码和这里的不 样,请修改为自己数据库可用的用户名和密码〉<mappers >中配置了 个包含完整类路径的UsersMapper.xml ,这是 MyBatisSQL 语句和映射配置文件.
3、 <environments default=\”mysql\”>中的dafault的值一定要与<environment id=\”mysql\”>中的id 的值一样。
注意:要在pom.xml中加入如下代码
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
上面内容中
directory指示存放资源的路径
<directory>src/main/java</directory>
include指示资源:如<include>**/*.xml</include>
工程目录结构如下。
8.创建mybatis工具
我们在qin.com数据包中创建一个DBtool.java类用于连接数据库和返回,主要目的代码重用,代码如下。
package qin.com;
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 java.io.IOException;
import java.io.Reader;
public class DBtools {
//定义会话工厂SqlSessionFactory对象
private static SqlSessionFactory sqlSessionFactory;
static { //创建静态块,它比类的构造方法先执行
try {
//通过文件流获取mybatis配置文件(mybatis.xml放在Resources文件夹中)
Reader reader = Resources.getResourceAsReader(\”mybatis.xml\”);
//实例化会话工厂,因为通过会话工厂才获取 SqlSession会话,这样才能通过 SqlSession对象对数据表进行操作。
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 返回会话工厂
* @return
*/
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
/**
* 返回会话
* @return
*/
public static SqlSession getSqlSession(){
return getSqlSessionFactory().openSession();
}
}
9.创建测试类
在qin.com.Test数据包中创建一个测试类UsersTest.java,代码如下。
package qin.com.entity;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import qin.com.DBtools;
import qin.com.dao.UsersDao;
import java.sql.SQLException;
public class UserTest {
public static void main(String[] args) throws SQLException {
//1.创建sqlsessionFactory
SqlSessionFactory sqlSessionFactory = DBtools.getSqlSessionFactory();
//2.创建SqlSession
SqlSession session = sqlSessionFactory.openSession();
//SqlSession session = DBtools.getSqlSession();可以省略前面两个步骤
//3.session 中创建相应的接口代理类,即mapper对象
UsersDao usersDao = session.getMapper(UsersDao.class);
//通过mapper对象usersDao接口中的方法对数据表users进行读操作
List<Users> list=usersDao.queryAll();
for(Users users:list){
System.out.println(\”uid=\”+users.getUid()+\” name=\”+users.getUname()+\” pass=\”+users.getUpass());
}
// System.out.println(usersDao.queryAll());
}
}
整个工程的完整目录结构如下图所示。
运行UsersTest.java测试类后得到如下结果。
至此mybatis入门到此结束。
10.mybatis工作原理
Mybatis工作原理图,如下图所示。
工作流程如下。
1、加载 mybatis 全局配置文件(数据源、事务、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个 MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。
2、SqlSessionFactoryBuilder 通过 Configuration 对象生成 SqlSessionFactory,用来开启 SqlSession。
3、SqlSession 对象完成和数据库的交互:
(1) 用户程序调用 mybatis 接口层api(即 Mapper 接口中的方法)
(2) SqlSession 通过调用 api 的 Statement ID 找到对应的 MappedStatemen 对象
(3) 通过 Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
(4) JDBC执行sql。
借助 MappedStatement 中的结果映射关系,将返回结果转化成 HashMap、JavaBean 等存储结构并返回。