准备
IntelliJ IDEA :2017.2.5
JDK:1.8.+
MyBatis:org.mybatis 3.4.5
mysql : 5.1.38
步骤
▶数据库准备
创建一个数据库 mybatis,并连接上 mybatis 数据库。
在 mybatis 数据库新建数据表 users
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID' , userName VARCHAR(32) COMMENT '用户名', nickName VARCHAR(32) COMMENT '昵称', node VARCHAR(128) COMMENT '备注' );
往 users 表中插入测试数据
INSERT INTO users (userName, nickName, node) VALUES ('zhangsan','张三','永远的张三'); INSERT INTO users (userName, nickName, node) VALUES ('lisi','李四','永远的李四'); INSERT INTO users (userName, nickName, node) VALUES ('wangwu','王五','永远的王五'); INSERT INTO users (userName, nickName, node) VALUES ('laowang','老王','隔壁家的');
▶搭建一个Maven工程MyBatisDemo
▶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>com.lin</groupId>
<artifactId>MyBatisDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
▶编写 JavaBean 类
public class User {
private Integer id;
private String userName;
private String nickName;
private String node;
public User(Integer id, String userName, String nickName, String node) {
this.id = id;
this.userName = userName;
this.nickName = nickName;
this.node = node;
}
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", nickName='" + nickName + '\'' +
", node='" + node + '\'' +
'}';
}
}
▶编写接口类 UserMapper
public interface UserMapper {
/**
* 根据ID 查找用户
* @param id
* @return
*/
User findUserById(Integer id);
}
▶编写接口映射文件UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lin.mapper.UserMapper">
<select id="findUserById" resultType="com.lin.bean.User">
SELECT
id,
userName,
nickName,
node
FROM users
WHERE id = #{id}
</select>
</mapper>
▶配置MyBatis的核心文件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>
<environments default="mysql">
<!--数据库连接驱动配置-->
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--注册 映射配置文件-->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
注意:该文件中主要是连接数据库的信息,驱动,url,用户名,密码以及映射文件,将我们写好的sql映射文件(UserMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 。
▶配置log4j.properties 日志打印
log4j.rootLogger=DEBUG ,stdout
log4j.logger.com.queen = DEBUG
log4j.logger.org.mybatis=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{HH:mm:ss} [%t] [%F]-[%p] %m%n
提示:主要记录MyBatis运行过程中产生的一些日志信息。MyBatis 会自动加载 log4j.properties 日志配置。
▶最后编写测试类
package com.lin.test;
import com.lin.bean.User;
import com.lin.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;
public class MyBatisTest {
@Test
public void testFindUserById() throws IOException{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findUserById(3);
System.out.println(user);
session.commit();
session.commit();
}
}
▶测试运行一下,查找ID是3的数据,日志详细过程完美的打印在控制台
21:41:36 [main] [LogFactory.java]-[DEBUG] Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
21:41:37 [main] [JdbcTransaction.java]-[DEBUG] Opening JDBC Connection
21:41:37 [main] [JdbcTransaction.java]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@20bd8be5]
21:41:37 [main] [BaseJdbcLogger.java]-[DEBUG] ==> Preparing: SELECT id, userName, nickName, node FROM users WHERE id = ?
21:41:37 [main] [BaseJdbcLogger.java]-[DEBUG] ==> Parameters: 3(Integer)
21:41:37 [main] [BaseJdbcLogger.java]-[DEBUG] <== Total: 1
User{id=3, userName='lisi', nickName='李四', node='永远的李四'}
我们会很明显的发现这是一个完整的JDBC执行过程,打开连接,创建连接,将事务设置成false,准备SQL,SQL赋参数,执行SQL,事务提交,关闭连接,返回连接。其实MyBatis就是将这些动作封装,对于开发人员只需要关注SQL。
总结
MyBatis整个调用过程:
根据全局配置文件,SqlSessionFactoryBuilder得到SqlSessionFactory
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//指定全局配置文件路径 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//加载配置文件实例化SqlSessionFactory
使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
SqlSession session = factory.openSession();//获取一次会话
使用sql的唯一标志来告诉MyBatis执行哪个sql,sql都是保存在sql映射文件中的。
UserMapper mapper = session.getMapper(UserMapper.class);//获取指定的映射文件 User user = mapper.findUserById(3);//执行指定的 sql System.out.println(user);
一个sqlSession就是代表和数据库的一次会话,用完关闭
session.commit();//提交会话 session.commit();//结束会话(一次连接,一次会话,用完即关)
至此,关于MyBatis教程之简单的入门介绍完毕。只做了简单的查询动作。