简介
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。它支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
MyBatis流行的主要原因在于它的简单性和易用性。在Java应用程序中,数据持久化层涉及到的工作有:将从数据库查询到的数据生成所需要的Java对象;将Java对象中的数据用SQL持久化到数据库中。
配置
1、jar包
1.1下载jar包,然后解压
https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.2.7
1.2 Maven
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ls</groupId>
<artifactId>mybatis1009</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
mysql 的版本选择对应的;junit用于测试,可不加。
2、配置log4j日志配置文件
# Global logging configuration
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
3、配置mybatis的全局配置文件sqlMapConfig.xml
此配置文件,文件名称不固定,可由开发人员自己指定,同样配置在config目录下,如下所示:
<?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>
<!-- MyBatis的全局参数设置,基本用来进行MyBatis的优化处理 -->
<settings>
<setting name="logImpl" value="LOG4J" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<setting name="cacheEnabled" value="true" />
</settings>
<!-- 以下配置不需掌握,和Spring整合后,以下配置将被废除 -->
<environments default="mysqlenv">
<environment id="mysqlenv">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=Hongkong" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
</configuration>
入门程序
1、创建配置SQL语句的mapper.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" >
<!-- 命名空间类似于java里的包名,给映射文件起一个唯一的标识 -->
<mapper namespace="worker">
<!-- 抽取了原来设计在Dao里的sql、?、结果集封装为java对象 -->
<select id="queryWorker" parameterType="String"
resultType="com.ls.bean.Worker">
select * from worker where wid = #{value}
</select>
<!-- 入参是多个时,一般使用对象或map传递参数 -->
<update id="updateWorker"
parameterType="com.ls.bean.Worker">
update worker set age = #{age} where wname = #{wname}
</update>
</mapper>
2、创建mapper.xml映射文件对应的Java Bean
package com.ls.bean;
public class Worker {
private String wid;
private String wname;
private Integer age;
private String sex;
public Worker() {
}
public String getWid() {
return wid;
}
public void setWid(String wid) {
this.wid = wid;
}
public String getWname() {
return wname;
}
public void setWname(String wname) {
this.wname = wname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Worker(String wid, String wname, Integer age, String sex) {
super();
this.wid = wid;
this.wname = wname;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Worker [wid=" + wid + ", wname=" + wname + ", age=" + age + ", sex=" + sex + "]";
}
}
3、配置sqlMapConfig.xml文件
为了让配置的mapper.xml文件起作用,那么需要在mybatis的全局配置文件sqlMapConfig.xml中加载该文件
在<configuration></configuration>里添加以下代码:
<mappers>
<mapper resource="WorkerMapper.xml"/>
</mappers>
4、创建测试方法
package com.ls.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.After;
import org.junit.Before;
import org.junit.Test;
import com.ls.bean.Worker;
public class Test1 {
SqlSession session = null;
@Before
public void basic() throws IOException {
//使用Mybatis提供的资源类读取主配置文件
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");//相对于类路径
//工厂构建者
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//工厂构建者通过配置文件得到流构建工厂
SqlSessionFactory sqlSessionFactory = ssfb.build(is);
//工厂打开到指定数据库的连接
session = sqlSessionFactory.openSession();//,,默认不自动提交
}
@After
public void close(){
//会话关闭
session.close();
}
@Test
public void test1() throws Exception {
Worker w = session.selectOne("worker.queryWorker", "5af9f088-5e5d-11e9-9dc0-28d244d68b7c");
System.out.println(w);
}
@Test
public void test2() throws Exception {
Worker w = new Worker();
w.setAge(60);
w.setWname("郭靖");
int row = session.update("worker.updateWorker", w);
System.out.println(row+"行受影响");
session.commit();
}
}
附:
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>
<settings>
<setting name="logImpl" value="LOG4J" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<setting name="cacheEnabled" value="true" />
</settings>
<environments default="mysqlenv">
<environment id="mysqlenv">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=Hongkong" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="WorkerMapper.xml"/>
</mappers>
</configuration>
本文以mysql8为例,mysql5选择对应版本的mysql-connector-java,url与driver也填写mysql5对应的内容。