Mybatis简单入门
Mybatis是目前javaweb开发中最流行的orm框架,网上的教程多是springmvc+mybatis的整合过程。在这里我们来简单了解一下mybatis是怎么运行的。
Maven配置
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.0</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<!--google tools-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>15.0</version>
</dependency>
<!--阿里巴巴json处理工具-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.16</version>
</dependency>
以上,mybatis,mysql是必须的,guava是谷歌的一个工具包推荐使用,fastjson是阿里巴巴推出的一款json序列化和反序列化的工具包,同样推荐使用。
数据库设置
我们需要创建一个表,进行入门操作。
CREATE TABLE test.my_info
(
id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(64),
user_age INT,
column_4 INT
);
code形式使用
平常,我们都是用xml配置的方式使用mybatis,但是这样常常不知道底层是怎么运作的。
代码
使用最久远的方式就是创建一个xml,里面写上你要执行的sql内容。这里,我们举一个例子。
/src/main/resources/xxx/mybatis_test.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">
<mapper namespace="com.gavinzh.mybatis.MyInfoMapper">
<select id="selectTest" resultType="java.util.Map">
SELECT id ,user_name as userName,user_age as userAge,column_4 as column4 FROM test.my_info
</select>
</mapper>
接下来,在/src/main/java/目录下创建类MybatisMain.java
import com.alibaba.fastjson.JSON;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author gavin
* @version V1.0
*/
public class MybatisMain {
public static void main(String[] args) throws IOException {
codeResourceTest();
}
public static void codeResourceTest() throws IOException {
//线程池
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true");
dataSource.setUsername("root");
dataSource.setPassword("root");
//数据库运行环境
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("dev",transactionFactory,dataSource);
//配置生成
Configuration configuration = new Configuration();
configuration.setEnvironment(environment);
InputStream inputStream = Resources.getResourceAsStream("xxx/mybatis_test.xml");
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, "xxx/mybatis_test.xml", configuration.getSqlFragments());
mapperParser.parse();
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
List list = sqlSession.selectList("com.gavinzh.mybatis.MyInfoMapper.selectTest");
System.out.println(JSON.toJSONString(list));
}
}
结果
以上,就已经可以运行。结果如下:
[{"id":1,"userName":"gavin","userAge":22}]
小结
最简单的mybatis的使用方式已经展示了。看代码,我们可以看到。
- mybatis自己实现了一个数据库连接池PooledDataSource,实现了druid,dbcp,c3p0差不多的功能。
- 一个数据库连接池需要设置运行环境Environment
- mybatis从配置Configuration中获取用户的配置,所以运行环境被设置到了配置中,
- mybatis中最关键的sql是通过XMLMapperBuilder,设置到配置中,具体怎么设置上的这里不表。
- mybatis默认情况一个数据库对应一个SqlSessionFactory,工厂的生成当然要依靠配置了。
- 工厂生成后,以上的实例均可销毁,只保留工厂即可。
XML形式使用
上一节,我们使用了code形式配置的mybatis,其实xml配置就是mybatis解析xml生成Configuration。具体可以对比一下代码和xml的节点是怎么对应的。
代码
非常简单,之前我们写过了mapper的xml,这次只用写配置xml就可以了。
/src/main/resources/mybatis.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="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- mapping 文件路径配置 -->
<mappers>
<mapper resource="xxx/mybatis_test.xml" />
</mappers>
</configuration>
/src/main/java/目录下类MybatisMain.java
import com.alibaba.fastjson.JSON;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author gavin
* @version V1.0
*/
public class MybatisMain {
public static void main(String[] args) throws IOException {
xmlTest();
}
public static void xmlTest() throws IOException {
String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List list = sqlSession.selectList("com.gavinzh.mybatis.MyInfoMapper.selectTest");
System.out.println(JSON.toJSONString(list));
}
}
结果
和code方式运行的结果一致。可见,mybatis解析配置文件同样是生成的Configuration。
总结
如果想在简单的java程序中使用mybatis,就足够了,这里不牵扯spring,springmvc。