1. 基本概念
- 基于JAVA的持久层框架
- 封装了JDBC操作的很多细节
- 使用了ORM思想实现结果集封装
- ORM(Object Relational Mapping):对象映射关系
2. 环境搭建
- 2.1 创建maven工程并导入坐标
在工程的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>org.example</groupId> <artifactId>DemoMaven01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>
- 2.2 创建实体类和dao的接口
实体类中的类名及属性严格对于数据表 - 2.3 创建Mybatis的主配置文件
在resource文件夹中创建配置的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="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test1"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
- 2.4 创建映射配置文件
配置文件的文件位置必须和dao接口的包结构相同
配置文件的Mapper标签namespace属性值必须为dao接口的全限定类名
映射配置文件的操作配置其id属性取值必须是dao接口的方法名
3. 注解配置
使用注解配置模式时可以免去映射配置文件的工作量,书写更为方便。
其中SqlMapConfig的配置信息改为
<?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>
<!-- 引入外部配置文件 -->
<properties resource="jdbcConfig.properties"></properties>
<!-- 配置别名 -->
<typeAliases>
<package name="com.handsomexu.mybatis"/>
</typeAliases>
<!-- 配置环境 -->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 指定带有注解的dao接口所在位置 -->
<mappers>
<package name="com.handsomexu.dao"/>
</mappers>
</configuration>
定义dao层接口时采用注解配置
package com.handsomexu.dao;
import com.handsomexu.mybatis.Test1;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;
import java.util.List;
/**
* 在mybatis中争对crud一共有四个注解为:@Select @Insert @Update @Delete
*/
public interface ITest1 {
@Select("select * from test1")
List<Test1> findAll();
@Insert("insert into test1(username,password) values(#{username},#{password})")
void insertUser(Test1 test1);
}
最后可在test文件中进行数据库的访问
package com.handsomxu.test;
import com.handsomexu.dao.ITest1;
import com.handsomexu.mybatis.Test1;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
private InputStream in;
private SqlSessionFactory factory;
private SqlSession session;
private ITest1 test1Dao;
@Before
public void init() throws IOException {
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂,其为接口 不能new
factory = new SqlSessionFactoryBuilder().build(in);
//3.使用工厂生产SqlSession对象
session = factory.openSession();
//4.使用SqlSession创建Dao接口代理对象
test1Dao = session.getMapper(ITest1.class);
}
@After
public void destroy() throws IOException {
//6.释放资源
session.commit();
session.close();
in.close();
}
@Test
public void testSelectUser() {
//5.使用代理对象执行方法
List<Test1> test1s = test1Dao.findAll();
for(Test1 test1:test1s){
System.out.println(test1);
}
}
@Test
public void testInsertUser(){
Test1 user = new Test1();
user.setUsername("wangchen");
user.setPassword("123456");
test1Dao.insertUser(user);
}
}