定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。
途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。
特性:动态SQL语句。
文件结构:Mybatis主要有两种配置文件:全局配置文件和映射文件。
使用流程:
1、创建数据库,组织数据入库:
CREATE TABLE `client_infor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cp_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8;
2、定义pojo:
public class Client {
private int id; //客户ID
private String cp_name; //客户名称
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getCp_name() { return cp_name; }
public void setCp_name(String cp_name) { this.cp_name = cp_name; }
}
3、定义数据访问接口:
public interface ClientDAO {
//根据客户名称删除客户信息
public boolean deleteClient(String name) throws Exception;
}
4、创建全局配置文件:
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/infor_mg" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射文件路径 -->
<mapper resource="com/mapping/Client.xml" />
</mappers>
</configuration>
5、创建映射文件:
<mapper namespace="ClientDAO的类路径">
<delete id="deleteClient" parameterType="String">
DELETE FROM Infor_mg WHERE name = #{name}
</delete>
</mapper>
6、实现业务逻辑:
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
try {
// 执行删除
iuser.deleteUser("开源中国");
// 提交事务
session.commit();
} finally {
session.close();
}
}
}
示例2:
/**
* 1、接口式编程
* 原生: Dao ====> DaoImpl
* mybatis: Mapper ====> xxMapper.xml
*
* 2、SqlSession代表和数据库的一次会话;用完必须关闭;
* 3、SqlSession和connection一样她都是非线程安全。每次使用都应该去获取新的对象。
* 4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
* (将接口和xml进行绑定)
* EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
* 5、两个重要的配置文件:
* mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息
* sql映射文件:保存了每一个sql语句的映射信息:
* 将sql抽取出来。
*
*/
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
* 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
* 3、将sql映射文件注册在全局配置文件中
* 4、写代码:
* 1)、根据全局配置文件得到SqlSessionFactory;
* 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
* 一个sqlSession就是代表和数据库的一次会话,用完关闭
* 3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
*
* @throws IOException
*/
@Test
public void test01() throws IOException {
// 1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
// 2、获取sqlSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try {
// 3、获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass());
System.out.println(employee);
} finally {
openSession.close();
}
}
}
补充:
发现一个非常好的Mybatis详细教程,地址:https://www.w3cschool.cn/mybatis/