MyBatis是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为Mybatis,实质上 MyBatis对ibatis进行了一些改进。
特点:
- 通过直接编写SQL语句,可以直接对SQL进行性能的优化;
- 学习门槛低,学习成本低,只要有SQL基础,就可以学习MyBatis,而且很容易上手
- 由于直接编写SQL语句。所以灵活多变,代码维护性更好
- 不能支持数据库无关性,即数据库发送变更,要写多套代码进行支持,移植性不好
- 需要编写结果映射
开发步骤
1、创建PoJo实体类
2、创建全局配置文件SqlMapConfig.xml
3、编写映射文件
4、加载映射文件,在SqlMapConfig.xml中进行加载
5、编写测试程序,即编写Java代码,连接并操作数据库。
第一步 实体类
第二步:全局配置文件SqlMapConfig.xml (注意 上面的第四步 已经在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>
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--告诉MyBatis加载映射文件 -->
<mappers>
<mapper resource="com/lq/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
第三步:编写映射文件
[id] : statement的id,要求在命名空间内唯一
[parameterType] : 入参的Java类型
[resultType]:查询出的单条结果集对应的Java类型
namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
注意了 注意了!!! 除了使用#{id}占位符以外 还有一个${}用法
两者的区别:${}相当于SQL语句拼接 #{}相当于占位符 可以防止SQL注入
${}会引起SQL注入,一般情况下不推荐使用。但是有些场景必须使用${},比如order by ${colname}
<?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.lq.pojo.User">
<select id="findUserBuid" parameterType="int" resultType="com.lq.pojo.User">
SELECT * FROM users where id=#{id}
</select>
</mapper>
第四步:测试
package com.lq.test;
import java.io.IOException;
import java.io.InputStream;
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 com.lq.pojo.User;
/**
* 1.读取配置文件
* 2.通过SqlSessionFactoryBuidlder创建SqlSessionFactory会话工厂
* 3.通过SqlSessionFactory创建SqlSession
* 4.调用SqlSession的操作数据库方法
* 关闭SqlSession
*/
public class MainTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream iStream=Resources.getResourceAsStream("SqlMapConfig.xml");
//2.通过SqlSessionFactoryBuidlder创建SqlSessionFactory会话工厂
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(iStream);
// 3.通过SqlSessionFactory创建SqlSession
SqlSession openSession = build.openSession();
//4.调用SqlSession的操作数据库方法
User user = openSession.selectOne("findUserBuid",1);
System.out.println(user.toString());
openSession.commit();
}
}
最后说明,这只是一个小入门的MyBatis 我们可以很直观看到 它比之前的JDBC简单太多 ,但是底层还是JDBC的哈,还有 编写入门时候 可能你会抛很多异常,你要认真检查 很多小地方的错误 例如XML里面有个namespace 路径一定要填对,openSession.selectOne("findUserBuid",1); 里面这个findUserBuid一定要和XML标签取的id一致