手把手教你搭MyBatis框架
MyBatis简介
MyBatis的前身叫iBatis,是一个持久层的框架,是apache下的顶级项目。本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis 是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架,MyBatis可以将向 preparedStatement 中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)。MyBatis 移除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
需要使用的Jar包:
mybatis-3.4.6.jar(mybatis核心包)
mybatis-spring-1.0.0.jar(与Spring结合包)
Mybatis的运行环境(jar包)下载
mybaits的代码由github.com管理,地址:https://github.com/mybatis/mybatis-3/releases
下载完成mybatis-3.4.6.zip解压即可
mybatis-3.4.6.jar:mybatis的核心包
lib:mybatis的依赖包
mybatis-3.4.6.pdf:mybatis使用手册
MyBatis环境搭建步骤
所需jar包:
log4j-1.2.16.jar
mybatis-3.2.2.jar
mysql-connector-java-5.1.0-bin.jar
项目结构:
1、新建JavaWeb项目
2、导入jar包,WebContent/WEB-INF/lib文件夹下,然后全部选中所有jar包,右键build path构建一下即可。
如果你是使用maven构建工程的话,那就对应在pom.xml文件中添加对应依赖即可。
3、项目 → 右键 → new → source folder 创建包资源管理器 → 这里创建的是 resources
4、在 resources 文件夹下创建文件名为 log4j.properties 的文件 复制如下代码,保存:
# Global logging configuration
# 开发环境下,日志级别要设置成DEBUG或者ERROR
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis默认使用log4j作为输出日志信息。
5、在 resources 文件夹下创建文件名为 mybatis-config.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配置将废除-->
<!-- 引入 database.properties 文件 -->
<properties resource="database.properties"></properties>
<!-- 配置log4j,配置后后台会自动对SQL语句输入 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<!-- 配置事务管理,此处采用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池,配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- resource:dao层映射的路径 -->
<mapper resource="com/yuntu/dao/user/UserMapper.xml"/>
</mappers>
</configuration>
mybatis-config.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。
6、在 resources 文件夹下创建文件名为 database.properties 的数据库配置文件
driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc:mysql://127.0.0.1:3306/SMBMS?useUnicode=true&characterEncoding=utf-8
user=root
password=123456
7、创建实体类(POJO)
8、创建Dao层,新建SQL映射文件(UserMapper.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">
<!--
namespace:命名空间,作用为,对sql进行分类化管理,理解sql隔离,
注意:使用mapper代理方法开发,namespace有特殊作用
-->
<mapper namespace="test">
<!--在映射文件中配置sql-->
<!--
通过select执行数据库查询
id:标识映射文件的sql
将sql语句封装到mappedStatement对象中,所以将id称为Statement的id
resultType:指定sql输出结果的所映射的Java对象类型,select指定的resultType表示将单条记录映射成的Java对象
-->
<!-- 查询用户总数 -->
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
</mapper>
9、创建测试类(JUnit Test单元测试)
实现思路:
1.定义mybatis配置文件名字的变量
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource);
2.创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
3.通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
4. 通过SqlSession操作数据库
//第一个参数:映射文件中的statement的id,等于namespace+"."+statement的id
//第二个参数:指定和映射文件中所匹配的所有parameterType的类型
//sqlSession.selectOne()的结果是映射文件中所匹配的resultType类型的对象 User user =
sqlSession.selectOne("test.findUserById",1);
System.out.println(user); /
/释放资源
sqlSession.close();
示例:
package com.yuntu.test;
import static org.junit.jupiter.api.Assertions.*;
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.apache.log4j.Logger;
import org.junit.jupiter.api.Test;
class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Test
void test() {
//mybatis配置文件
String resource="mybatis-config.xml";
SqlSession sqlSession = null;
int count=0;//用来接收结果
try {
//1.根据 Resources(mybatis配置文件名) 获取 mybatis-config.xml 的输入流
InputStream is = Resources.getResourceAsStream(resource);
//2.创建核心对象 SqlSessionFactory 对象,来完成配置文件的读取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.创建SqlSession对象
sqlSession=factory.openSession();
//4.调用mapper文件对数据进行操作 ps:检查mapper是否在mybatis-config.xml中进行配置
count = sqlSession.selectOne("com.yuntu.dao.user.UserMapper.count");
logger.debug("当前系统一共有"+count+"用户");
} catch (IOException e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
}