what’s mybatis?
- JDBC
- ORM
- Mybatis
JDBC
我相信所有学习java编程的同学们最早接触连接数据库的工具就是JDBC(java Data Base Connectivity)。JDBC是一种典型的桥接模式,因为对于DB它只是规定了接口规范,而具体的DB厂商根据自己DB的特性进行具体的实现。
基于JDBC的数据库连接代码演示:
mport java.sql.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class JdbcConnectivity {
private static final Logger LOGGER = LogManager.getLogger(Connection.class);
/**
* 获取数据库连接
*
* @return Connection
*/
public static Connection getConnection() {
Connection connection = null;
try {
//1、加载驱动(mysql)
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306//test_db?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull";
String user = "root";
String password = "root";
//2、连接数据库
connection = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
LOGGER.error("连接数据库异常");
e.printStackTrace();
}
return connection;
}
/**
* 获取数据
*
* @param id
* @return User
*/
public static User getResult(String id) {
User user = new User();
Connection connection = getConnection();
PreparedStatement ps = null;
ResultSet resultSet = null;
String sql = "select name from test_tb where id=? ";
try {
//3、执行sql
//4、获得结果集
ps = connection.prepareStatement(sql);
ps.setString(1, id);
resultSet = ps.executeQuery();
//5、关系型数据转换成POJO对象
while (resultSet.next()) {
user.setId(resultSet.getString("id"));
user.setName(resultSet.getString("name"));
}
} catch (Exception e) {
LOGGER.error("获取数据异常");
} finally {
//6、关闭DB以及相关资源
close(connection,ps,resultSet);
}
return null;
}
/**
* 关闭连接以及相关资源
* @param connection
* @param preparedStatement
* @param resultSet
*/
public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
try {
if (resultSet != null && !resultSet.isClosed())
resultSet.close();
if (preparedStatement != null && !preparedStatement.isClosed())
preparedStatement.close();
if (connection != null && !connection.isClosed())
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用JDBC的步骤:
1、加载驱动以及数据信息;
2、连接数据库;
3、执行sql;
4、获取结果集,并将关系型数据转换成相应的POJO对象;
5、关闭相关资源;
JDBC优缺点
优点:
- 灵活
- 性能较好
缺点:
- 工作量大,对编程技巧要求高:底层事务处理、数据转换、资源关闭、以及异常的捕获要求较高
ORM
ORM:Object Relational Mapping 对象关系映射,顾名思义:主要用于实现关系型数据库表数据与POJO对象之间实现映射关系。简化JDBC繁琐的过程
hibernate 是比较成熟的ORM框架,是一种全表映射的持久层框架,但是由于对SQL优化困难等原因,因此性能上很难应对大型互联网系统。(不是重点略过)
Mybatis
相比较与hibernate,Mybatis是一种半自动映射的ORM框架。因为它除了需要提供POJO、数据库表数据与POJO的映射关系之外,还需要编程同学提供SQL。也就是说编程同学控制SQL。
综上所述,Mybatis主要包括一下内容:
POJO对象;
映射文件:数据库配置映射文件、POJO与表数据映射文件;
SQL语句;
1、POJO对象
就是标准的java对象
2、映射文件
数据库配置映射文件
<?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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
#映射文件,包含了POJO属性与表的映射关系以及SQL语句
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
POJO与表数据映射文件以及SQL语句
下面配置中POJO属性与表数据属性关系省略,是因为SQL中列名与POJO的属性名一致。
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
Mybatis操作过程概述
1、程序与数据库建立关系过程
获取SqlSessionFactory实例:
String resource = "classpath:mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2、程序对数据库操作过程
//获取session实例
SqlSession session = sqlSessionFactory.openSession();
try {
//调用接口方法,得到结果集
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
源码下载地址:http://download.csdn.net/download/wangchuanqi1234/10152414