目录
一、MyBatis简介
一、什么是MyBatis
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。
MyBatis是一个基于 Java 的持久层框架,是一个sql映射框架,提供的数据库的操作能力。在一个项目中搭建一次之后,我们对于数据库的操作就可以集中到sql编写上,不必去关心 Connection,Statement,ResultSet 等对象的创建,销毁、sql语句的执行、 sql语句执行结果的转换等问题。
二、MyBatis的搭建
一、 使用 Maven 创建 web 工程
-
创建 web 工程,可参考我之前的一篇博客链接: 004-IDEA 中基于 Maven 创建 web 工程.
-
加入 maven 坐标
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
- 加入 maven 插件
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
二、编写实体类
创建包 com.domain, 包中创建 User 类,为了提高代码可读性,这里实体类的类名推荐和表名一样,类中定义属性的属性名和所要操作的数据库表列名一样。
package com.domain;
public class User {
// 属性名和表的列名一样
private Integer userId;
private String userName;
private String password;
private String sex;
private String email;
//记得补上构造方法和set ,get , toString等方法
}
三、编写 Dao 接口 UserDao
创建 com.dao 包,创建 UserDao 接口
package com.dao;
import com.domain.User;
//接口操作User表
public interface UserDao {
//可以根据你要操作表的方式定义不同的方法,例如
//根据 id 查询信息
User getByID(Integer id);
}
四、编写 Dao 接口 Mapper 映射文件 UserDao.xml
- 在 dao 包中创建文件 UserDao.xml;
- UserDao.xml 文件名称和接口 UserDao 一样,区分大小写的一样。
<?xml version="1.0" encoding="UTF-8" ?>
<!--指定约束文件,起到限制作用,检查在当前文件中出现的标签,属性必须符合mybatis的要求。-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper 是当前文件的根标签,必须的。
namespace:叫做命名空间,唯一值的, 可以是自定义的字符串,但是为了配合使用动态代理创建对象,需使用dao接口的全限定名称。-->
<mapper namespace="com.dao.UserDao">
<!--
select:表示查询操作。
id: 执行的sql语法的唯一标识, mybatis会使用这个id的值来找到要执行的sql语句,可以自定义,但是但是为了配合使用动态代理创建对象,需使用使用接口中的方法名称。
parameterType:表示参数类型
resultType:表示结果类型的, 是sql语句执行后得到ResultSet,遍历这个ResultSet得到java对象的类型,其值写的类型的全限定名称-->
<select id="getByID" parameterType="java.lang.Integer" resultType="com.domain.User">
select * from users where userId = #{id}
</select>
<!--插入操作-->
<insert id=""></insert>
<!--更新操作-->
<update id=""></update>
<!--删除操作-->
<delete id=""></delete>
</mapper>
五、创建 MyBatis 主配置文件
在目录 src/main/ resources ,创建主配置文件:名称为 mybatis.xml (主配置文件名称是自定义的) 内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!--
mybatis的主配置文件: 主要定义了数据库的配置信息, sql映射文件的位置
-->
<!--指定约束文件,起到限制作用,检查在当前文件中出现的标签,属性必须符合mybatis的要求。-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration 是当前文件的根标签。-->
<configuration>
<!--settings:控制mybatis全局行为-->
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--环境配置: 数据库的连接信息
default:必须和下面某个environment的id值一样。告诉mybatis使用哪个数据库的连接信息。也就是访问哪个数据库
-->
<environments default="mysql">
<!-- environment : 一个数据库信息的配置
id:一个唯一值,自定义,表示环境的名称。
-->
<environment id="mysql">
<!--
transactionManager :mybatis的事务类型
type: JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)
-->
<transactionManager type="JDBC"/>
<!--
dataSource:表示数据源,连接数据库的
type:表示数据源的类型, POOLED表示使用连接池
-->
<dataSource type="POOLED">
<!--
driver, user, username, password 是固定的,不能自定义。
-->
<!--数据库的驱动类名-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--连接数据库的url字符串-->
<property name="url" value="jdbc:mysql://localhost:3306/exmp"/>
<!--访问数据库的用户名-->
<property name="username" value="root"/>
<!--密码-->
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!-- sql mapper(sql映射文件)的位置-->
<mappers>
<!--一个mapper标签指定一个映射文件的位置。-->
<mapper resource="com/dao/UserDao.xml"/>
</mappers>
</configuration>
六、创建测试类 Test
创建测试文件并且执行,如下:
package com.test;
import java.io.IOException;
import java.io.InputStream;
import com.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class test {
public static void main(String[] args) {
//1.mybatis 主配置文件
String config = "mybatis.xml";
//2. 读取配置文件
InputStream in = null;
try {
in = Resources.getResourceAsStream(config);
//3. 创建 SqlSessionFactory 对象,获取 Sql Session
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//4. 获取 SqlSession,SqlSession 能执行 sql 语句
SqlSession session = factory.openSession();
//5. 基于动态代理: 使用SqlSession.getMapper(dao接口.class) 获取这个dao接口的对象,并且执行对应的方法
UserDao dao = session.getMapper(UserDao.class);
User studentList = dao.getByID(5);
//6. 循环输出查询结果
System.out.println(studentList);
//7. 关闭 SqlSession ,释放资源
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关链接:
链接: 004-IDEA 中基于 Maven 创建 web 工程.
链接: 001-SSM三大框架(一)—— 三层架构.