叙:这是之前本人学习mybatis的笔记,比较详细,因为之前的学习笔记有些放在电脑上被误删了,所以还是整理一下存到网上吧,也希望能帮到一些童鞋~
Mybatis新手项目搭建全过程—个人学习笔记-超详细
首先,我们要知道MyBatis这个框架是什么?是做什么用的?然后才需要学习怎么用它,最后需要知道它为什么这么用,下面就以这种思路来展开我的学习笔记的记录;
1、MyBatis这个框架是什么?
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github(这一点个人觉得是MyBatis框架想要进一步推广,进军世界级使用量的一步举措)。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
2、MyBatis是做什么用的?
MyBatis是一个基于Java的持久层框架,这是它的本质,说直白点就是和Hibernate框架存在的目的一样,都是为了操作数据库而生(而之所以有了Hibernate这个ORM数据持久层框架还会诞生MyBatis是因为他们的侧重点不同,在此不做详细叙述;)
3、MyBatis基础配置(干货)
明白了这个框架存在的意义,便有了学习他的目的,下面开始针对MyBatis进行入门级的学习,首先配置跑通一个MyBatis环境,一般配置一个框架环境都是有这几步来完成:一、创建一个新项目;二、导入框架所需要的Jar包;三、创建数据库表;四、创建框架配置文件(一般框架都或多或少的会存在一些文件项的配置);五、POJO创建;六、编写测试代码;
明白了大致流程,走起~
3.1、创建一个新项目
创建一个项目就不必说他多,直接看截屏就好;
其中我所用的jar包对于jdk要求在1.7或以上,因此我使用的是1.8的jdk,在创建时要注意使用的jar包和jdk的版本是否适配;
创建后的项目,如下图:
项目的组成只有 src 和 JRE System Library 这两个包,接下来我们对于需要的包可以手动创建;
3.2、项目所需引入的Jar包
Jar包存放的位置需要手动创建一下,在项目名下创建一个名为 lib 的 Folder 文件夹,里面专门存放我们的jar包,如下图:
创建如下:
现在jar包存放的文件路径已经创建安好了,我们需要查看一下自己的jar包有哪些?
- 首先是MyBatis的jar包,只有一个:mybatis-3.5.4.jar(下载文件的路径下方有贴出来);
- 其他的jar包(例如:日志包、连接数据库包等);
Mybatis框架包下载路径如下,在这个里面有各个版本的jar包:https://github.com/mybatis/mybatis-3
进入:
其他所需jar包如下图所示:
把总共11个jar包导入后选中所有进行Add to Build Path一下,如下图:
添加完后如下所示:
到此,项目的jar包便引入完毕了;
3.3、创建数据库表
Mybatis入门学习,数据库表没必要弄那么复杂,首先建立一个User表,我的数据库名称是:mybatis,编码字符集是 UTF-8 的,然后在里面创建了User数据表,其运行SQL的数据如下:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`uuid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户id',
`username` varchar(12) NOT NULL COMMENT '用户名称',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`address` varchar(20) DEFAULT NULL COMMENT '现居地址',
`gender` varchar(1) NOT NULL COMMENT '性别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
创建了user数据表后插入一条数据,插入SQL如下:
INSERT `user`
VALUES
(
'1',
'ba6567ac-8f41-11ea-b8d9-fc459696f733',
'测试',
'1989-04-20',
'三国',
'0'
)
运行结果:
刷新表后看到对应数据;
3.4、框架配置文件
Mybatis主要有两中配置文件,一个是配置数据库数据的(一个项目只有一个),另一个是配置POJO数据对象与数据库形成映射SQL语句的(一个项目有N个,原则上是每个POJO都有自己的一个这样的配置文件);而这两种配置文件一般尽量把他们放到一起,创建一个文件夹,命名要求不高,但是需要通俗易懂,一般可以用 config 、xml 等,此文件夹的存放在项目名即可,和 src 文件夹同层,如下图:
- 第一种:log4j.properties—日志配置文件
此文件不需要我们创建,但是需要从网上下载复制粘贴到config包中,下载网址(非官网,亲测可用):http://www.bvbcode.com/cn/8ejthn4s-2892004-down - 第二种手动创建的配置文件: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>
<!-- 和spring整合后 environments配置将废除 -->
<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://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
<!-- 测试环境 -->
<environment id="test">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatisTest?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/user.xml" />
</mappers>
</configuration>
其中configuration标签中的 default 属性是指当配有多个环境的数据库时切换所连接的数据库,不同环境的数据库链接需要在<environment id="xxx">
的id中进行配置,通过 Id 来进行区分;
<mapper resource="mybatis/user.xml" />
代码是将后续的一个POJO对象的SQL配置文件加载进来,先提前写出来;
- 创建第二种配置文件:user.xml
这是针对POJO对数据库sql关系映射的配置文件,简单点说就是在POJO对象上发生的SQL事件都最终写在这个POJO的配置文件里,一般都会存在多个这样的不同名称的配置文件,因此专门为这些文件在config文件包里新建一个mybatis包,用以存放这一类型的文件,创建如下:
然后在此包下创建一个 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="user">
<!-- 在注释下方进行编码 -->
</mapper>
创建完成后将此文件关联到mybatis的核心配置文件sqlMapconfig.xml中,就是那个<mapper resource="mybatis/user.xml" />
;注意引入路径是以核心配置文件为起点的;
3.5、创建POJO对象
之前一直提的POJO对象,现在开始创建,首先,在“src”文件包下创建一个POJO文件夹,专门用于存放POJO对象的,然后再在这个文件夹下根据之前创建的数据库表 user 表,编写 user.java 代码如下:
package com.java.POJO;
import java.util.Date;
public class User {
private int id;
private String uuid;
private String username;// 用户姓名
private String gender;// 性别
private Date birthday;// 生日
private String address;// 地址
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return gender;
}
public void setSex(String sex) {
this.gender = 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 "\n 用户编号:" + id + ", 唯一标识码:" + uuid + ", 名称:" + username
+ ", 性别:" + gender + ", 出生日期:" + birthday
+ ", 地址:" + address + "\n" ;
}
}
3.6、编写测试代码
编写 user 对象的测试代码,首先确定我们要实现有关 user 这个对象的什么功能,而实现功能的主要代码其实是SQL操作,因此,我们先在 user 对象的SQL配置文件 user.xml 文件中进行相关操作;
- 测试代码功能:查询 ID 为 “ 1 ” 的user用户信息;
- 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="user">
<!-- id:此条SQL的唯一标识符 parameterType:传入参数类型 resultType:返回结果类型 -->
<select id="getUserById" parameterType="int" resultType="com.java.POJO.User">
<!-- #{}:占位符,相当于是JDBC的'?'占位符 -->
<!-- 如果传入进来的数据类型是常规的数据类型,可任意填充 -->
SELECT * FROM `user` u WHERE u.id= #{id}
</select>
</mapper>
- class 文件中的Test代码:
package com.java.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 org.junit.Test;
import com.java.POJO.User;
public class TestClass {
/**
* 通过ID查询用户信息
* @throws IOException
*/
@Test
public void TestGetUserById() throws IOException{
// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 创建获取到sql语句配置文件的输入流对象
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 使用sql语句配置文件的输入流对象配合SqlSessionFactoryBuilder对象创建sqlSessionFactory(sqlsession工厂)对象
SqlSessionFactory sqlSessionFactory = ssfb.build(resourceAsStream);
// 创建sqlsession工厂的对象 true:开启自动提交事务
SqlSession openSession = sqlSessionFactory.openSession(true);
// 获取用户信息
User userObj = openSession.selectOne("user.getUserById", 1);
System.out.println(userObj);
// 释放资源
openSession.close();
}
}
3.7、测试
测试结果如下图:
能看到日志中能看到很多信息,例如:创建连接编号、SQL语句、传入参数及其类型、结果数量、结果展示、关闭JDBC连接、返回连接到连接池等。
以上就是Mybatis框架的搭建基本过程,至于进一步的笔记还在整理中,之前写的东西,现在需要再跑一遍确保万无一失才能发出来~
pass:存在不足之处,希望各位大佬童鞋们斧正~