目录
什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<!--添加MyBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--添加数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!--添加日志依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
创建数据库
导入SQL脚本
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`userId` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'moti', '3333');
结果如下:

创建User类
package com.moti.bean;
public class User {
private Integer userId;
private String userName;
private String password;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
}
创建UserMapper接口
package com.moti.mapper;
import com.moti.bean.User;
public interface UserMapper {
public User getUserById(Integer userId);
}
创建所有所需要的配置文件
在pom同级创建resource
文件夹,在resource
文件夹下创建db.properties
,log4j.properties
,mybatis-config.xml
文件,在resource
文件夹下创建mapper
文件夹,在mapper
文件夹下创建UserMapper.xml
文件.
具体如下
db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1/mybatis?serverTimezone=UTC&useSSL=false
username=root
password=983934
log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.cn.mybatis.mydemo.mapper.PersonMapper=DEBUG
log4j.logger.cn.mybatis.mydemo.mapper.CardMapper=DEBUG
# 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-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">
<!-- XML 配置文件包含对 MyBatis 系统的核心设置 -->
<configuration>
<!-- 指定 MyBatis 数据库配置文件 -->
<properties resource="db.properties" />
<!-- 指定 MyBatis 所用日志的具体实现 -->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<environments default="mysql">
<!-- 环境配置,即连接的数据库。 -->
<environment id="mysql">
<!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
<transactionManager type="JDBC" />
<!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- mappers告诉了MyBatis去哪里找持久化类的映射类(注解形式)
将写好的sql映射文件注册到全局配置文件中
-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
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">
<mapper namespace="com.moti.mapper.UserMapper">
<!--
namespace:名称空间
id:唯一标识
resultType:返回值类型
#{userId}:根据传入的参数获得userId值
将接口和xml进行绑定
xml中的namespace属性为接口的全路径
xml中的sql的id为接口的方法名
-->
<select id="getUserById" resultType="com.moti.bean.User">
select * from user where userId = #{userId}
</select>
</mapper>
全部创建完成后的目录结构如下:

编写测试类AppTest
package com.moti;
import com.moti.bean.User;
import com.moti.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
/**
* Unit test for simple App.
*/
public class AppTest
{
@Test
public void test1() throws IOException {
//根据配置文件,创建一个SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获得SqlSession对象,SqlSession代表和数据库的一次会话,用完关闭(线程不安全)
SqlSession session = sqlSessionFactory.openSession();
try{
User user = session.selectOne("UserMapper.selectUser",1);
System.out.println(user);
}finally {
session.close();
}
}
/*
接口式编程:
Dao ===> DaoImpl
Mapper ===> XXXMapper.xml
Mapper接口没有实现类,但是框架会为我们生成代理对象
将接口和xml进行绑定
xml中的namespace属性为接口的全路径
xml中的sql的id为接口的方法名
两个重要的配置文件:
mybatis-config.xml:
mybatis的全局配置文件,包含了数据库的连接信息,事务管理器信息...系统运行时环境
XXXMapper.xml:
保存了每一个sql语句的映射信息,将sql语句抽离出来
*/
@Test
public void test2() throws IOException {
//1.获得SqlSessionFactory对象
//根据配置文件,创建一个SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获得SqlSession对象,SqlSession代表和数据库的一次会话,用完关闭(线程不安全)
SqlSession session = sqlSessionFactory.openSession();
try{
//3.获得接口的实现类对象(这里的对象是由MyBatis框架为我们生成的代理对象)
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
}finally {
//记得一定要关闭session对象
session.close();
}
}
}
留言