mybatis框架学习(1) - helloworld
之前项目一直使用hibernate,但是也有用过mybatis,不过还未系统的学习mybatis,后续先玩转各种用法再去读源码深入了解这个框架。
问题:首先搞java的ORM框架开源大部分不是选择hibernate就是mybatis,在面试的时候一定会有人问你mybatis和hibernate有什么区别?为什么要选择myabtis?
1)hibernate可以做到不用写SQL就能实现和数据库交互,因为hibernate会根据Java Bean自动处理SQL策略发送SQL。而myabtis需要自己写SQL。但是他们共同点都是不需要处理JDBC建立连接、预编译、执行SQL、结果集映射到PO的工作。所以比单纯使用JDBC更方便。
2)hibernate自动发SQL就有个问题,如果hibernate自动发出的SQL有性能问题您又如何优化?当然hibernate可以用HQL,但是HQL又是一套知识。所以hibernate如果要用在生产环境,我认为是对hibernate框架比较熟悉的人使用比较合适。而myabtis编写SQL部分都提取到配置文件处理比较适合新手。
接下来开始搭建Mybatis
首先找到官网:http://www.mybatis.org/
然后下不下载自己看着办。为夫先打开eclipse创建一个maven工程右键依赖myabtis和mysql,这样就有依赖包了。
<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>com.pss</groupId>
<artifactId>mybatis-01-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
</dependencies>
</project>
然后看官网
OK入门了。
首先创建一个myabtis-config.xml。总的myabtis配置,然后InputStream包含mybatis-config.xml,SqlSessionFactoryBuilder通过mybatis配置去生成SqlSessionFactory。到了这一步就看看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>
<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://xxxx:3306/mybatis-helloworld"/>
<property name="username" value="root"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapping/Blog.xml"/>
</mappers>
</configuration>
一个环境包含DataSource, 一个mappers包含一个Blog.xml。然后看看Blog.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.pss.mapper.BlogMapper">
<select id="selectBlog" resultType="com.pss.model.Blog">
select * from t_blog where id = #{id}
</select>
</mapper>
package com.pss.mapper;
import com.pss.model.Blog;
public interface BlogMapper {
Blog selectBlog(int id);
}
package com.pss.model;
public class Blog {
private int id;
private String name;
private String lastName;
public Blog() {
// TODO Auto-generated constructor stub
}
// 省略setter/getter方法
@Override
public String toString() {
return "Blog [id=" + id + ", name=" + name + ", lastName=" + lastName
+ "]";
}
}
namespace 指定的是mapper的接口。
id是具体的SQL唯一标示。
SqlSession sqlSession = sessionFactory.openSession();
Blog blog = (Blog) sqlSession.selectOne("com.pss.mapper.BlogMapper.selectBlog", 1);
System.out.println(blog.toString());
打印结果:
Blog [id=1, name=a, lastName=null]
然后这样就可以调用 select * from t_blog where id = #{id} 这个SQL。不过上面的代码只是说明了mybatis的调用原理,实际是不会这么写的,写class.method太累了。
SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
现实都是获取Mapper然后调用selectBlog方法获取Blog。这时候你会发现SQL语句已经从你java代码中分离。
上一篇: Mybatis 框架(1)