MyBatis就是一个ORM(Object Relation Mapping)框架。在以前我们可能会用Java自带的JDBC,可是JDBC代码太冗余了,MaBatis对JDBC做了一个封装,提高我们的效率。具体是怎么提高效率的呢?MyBatis将SQL写在XML文件中,将其与Java代码分离,降低了耦合度,提高开发效率。
所以根据上述简单理解,MyBatis使我们的程序可以动态的编写XML文件,并提供映射标签,支持了对象与数据库字段的一一映射。
SqlSession就是MaBatis里Java程序与数据库打交道的那个切入口,这个类又创建它的工厂SqlSessionFactory通过openSession产生,而SqlSessionFactory则是由它的建造者SqlSessionFactoryBuilder通过build方法构建而出
SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession
我们开发都是调用SqlSession的各种API进行开发。
在pom文件里导入下面依赖,Mabatis环境就算搭建成功了
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.5version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.48version>
dependency>
dependencies>
接下来我们搞出这样一张叫做mybatis_account的表和下面这个对应的DO类,所有的前置工作我们就做完了。
接下来进入MyBatis的环节
我们在resources -> 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>
<!-- 注意如果用SpringBoot,这些配置都可以用@Configuration类来写,这里面只用配置mapper就行
所以下面的环境配置可以写成这样
@Configuration
public class TransactionManagerConfig {
@Bean(name="environment1")
public PlatformTransactionManager TransactionManager1(@Qualifier("dataSource1") DataSource dataSource1) {
return new DataSourceTransactionManager(dataSource1);
}
@Bean(name="environment2")
public PlatformTransactionManager TransactionManage2r(@Qualifier("dataSource2") DataSource dataSource2) {
return new DataSourceTransactionManager(dataSource2);
}
}
-->
<!-- 如果我们有多个数据库这里就可以配置多个数据源,然后在default里-->
<environments default="MyBatisLearning">
<environment id="MyBatisLearning">
<!-- 配置当前环境的事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源,也就是要跟哪个数据库链接-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/tx"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
Mybatis有两种使用方式,第一个是使用原生接口,第二个是使用自定义的mapper代理(这个文件俗称mapper.xml)。在开发中我们需要对每一个DO写这样的mapper.xml,方便我们对每一个DO进行SQL操作。
重点介绍一下Mapper里的重要标签
<mapper namespace="com.test.dao.MybatisAccountDO">
<insert id="insert" parameterType="com.test.entity.MybatisAccountDO">
insert into mybatis_account (id, username, password,
age)
values (#{id,jdbcType=BIGINT}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{age,jdbcType=INTEGER})
insert>
mapper>
然后在全局配置文件mybatis-config.xml中注册这个mapper就大功告成了
<mappers>
<mapper resource="sqlmapper/MybatisAccountDAO.xml">mapper>
mappers>
别忘了在com.test包下创建dao包,创建MybatisAccountDAO(这个DAO在本示例中没用,但是别忘了它,我们在mapper代理的学习中会用到它)
public interface MybatisAccountDAO{
int insert(MybatisAccountDO record);
}
最后我们在测试方法中写如下的方法就可以测试成功
public class Test {
@Test
public void test(){
//在build时要以流的方式加载Mybatis配置文件
SqlSession sqlSession = new SqlSessionFactoryBuilder()
.build(Test.class.getClassLoader().getResourceAsStream("mybatis/mybatis-config.xml"))
.openSession();
//这个statement的写法是mapper.xml里的namespace+id的组合方式
String statement = "com.test.MybatisAccountDAO.insert";
MybatisAccountDO ma = new MybatisAccountDO(1L,"frank","samsung",24);
sqlSession.insert(statement,ma);
sqlSession.commit();
sqlSession.close();
}
}
由上面的方法可以看出,我们只要有了对应的DO类,就可以用MyBatis帮我们操作数据库了,那我们的DAO还有什么妙用呢,见下一篇博客(MyBatis——mapper代理)。