MyBatis快速入门
简介
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML用于配置和原始映射,将接口和Java的POJO类映射成数据库中的记录
使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
历史
原是apache的一个开源项目iBatis
2010年6月这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
为什么要用MyBatis?
JDBC
SQL夹在Java代码块里,耦合度高导致硬编码内伤
维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
要自已创建connection、创建statement、手动设置参数、结果集检索等
Hibernate
长难复杂SQL,对于Hibernate而言处理也不容易
内部自动生产的SQL,不容易做特殊优化。
基于全映射的全自动框架,javaBean存在大量字段时无法只映射部分字段。导致数据库性能下降。
Mybatis
对开发人员而言,核心sql还是需要自己优化
MyBatis是一个半自动化的持久化层框架。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
对比三者,MyBatis的优势显而易见,所以现在MyBatis很受欢迎。
开发步骤
1. 下载Mybatis核心包
http://www.mybatis.org/mybatis-3/getting-started.html
https://github.com/mybatis/mybatis-3/releases
2.创建工程,引入MyBatis核心包及依赖包
除了MyBatis提供的jar包,还需要加上数据库连接的jar包。需要lombok则需要加上lombok的jar包。
3.创建customer表,建立与表对象的domain
package cn.rayfoo.bean; import lombok.Data; import lombok.NoArgsConstructor; /** * Created by rayfoo@qq.com Luna on 2020/2/4 15:29 */ @Data@NoArgsConstructor public class Customer { private Integer cust_id; private String cust_name; private String cust_profession; private String cust_phone; private String email; }
4.创建MyBatis核心配置文件SqlMappingConfig.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>
<!--配置SQL打印-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<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://rayfoo.cn:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="****"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/rayfoo/mapper/CustomerMapper.xml"/>
</mappers>
</configuration>
5.编写Mapper接口
package cn.rayfoo.mapper; import cn.rayfoo.bean.Customer; import java.util.List; /** * Created by rayfoo@qq.com Luna on 2020/2/4 15:45 */ public interface CustomerMapper { /** * 查询所有记录 * * @return */ List<Customer> findAll(); }
6.编写Mapper文件
<?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="cn.rayfoo.mapper.CustomerMapper"> <select id="findAll" resultType="cn.rayfoo.bean.Customer"> select * from customer </select> </mapper>
7.编写测试类进行测试
package cn.rayfoo.test; import cn.rayfoo.bean.Customer; import cn.rayfoo.mapper.CustomerMapper; 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 sun.security.tools.keytool.Resources_de; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * Created by rayfoo@qq.com Luna on 2020/2/4 15:58 */ public class TestApp { @Test public void test01() throws IOException { InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession sqlSession = sqlSessionFactory.openSession(); CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class); List<Customer> all = mapper.findAll(); System.out.println(all); } }