Mybatis 的作用
可以用来执行普通的sql操作 存储过程
它是一个高级的ORM(Object Relation Mapping 对象关系映射 以面向对象的思想操作数据库)框架
它封装了几乎所有的jdbc 操作 以及参数的手工设置
结果集检索(把结果集自动转换成对象)
Mybatis 框架的构成
实体类 封住数据和业务逻辑
SQL定义文件 写SQL语句的XML 文件
主配置文件 用来定义连接数据库信息 和 加载SQL定义文件 以及做一些特殊设置的 XML文件
框架的API 主要通过SqlSession 来体现 (SqlSession 略微麻烦一些) 用来完成增删改查
案例
使用Mybatis 完成根据id 查询银行账户
建立一个项目 导入jar包(mybatis.jar 数据库驱动)
根据表建立对应的实体类
拷贝sql 定义文件的模板 到 一个包中 在sql 定义文件中 定义SQL语句
拷贝主配置文件模板 到src下 定义连接数据的信息 并加载sql定义文件
获取SqlSession对象 使用SqlSession 完成查询
代码如下:
mapper.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.xdl.mapper.XdlBankAccountDAO">
<select id="findAccNoById" parameterType="int"
resultType="String">
select acc_no from account where id = #{n}
</select>
</mapper>
AccountDao.java :
import java.util.List;
import com.xdl.bean.XdlBankAccount;
public interface XdlBankAccountDAO {
String findAccNoById(int id);
}
sqlmap-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="system"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/mapper.xml"/>
</mappers>
</configuration>
测试类:
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.xdl.bean.Account;
public class SqlSessionTest {
public static void main(String[] args) {
// SqlSession 工厂构建器
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 获取SqlSessionFactory
InputStream inputStream = SqlSessionTest.class.getClassLoader().
getResourceAsStream("sqlmap-config.xml");
SqlSessionFactory ssf = ssfb.build(inputStream);
// 通过SqlSession 工厂获取SqlSession
SqlSession ss = ssf.openSession();
// 根据id 完成查询
String acc_no = ss.selectOne("findAccNoById",2);
System.out.println(acc_no);
}
}
MyBatis的 Mapper 映射器规则
- 如果按照规则编写DAO 接口则不用写DAO的实现类 因为可以自动生成
- 接口中方法的返回值类型 和 sql语句中的 resultType 保持一致
- 当是查询语句时 如果是返回单值 则 和 resultType 保持一致 如果可能返回多个值,则使用List<这里的类型和restultType保持一致>
如果是增删改 语句 则返回void 或者int 推荐使用 int - 接口中方法的参数和 parameterType 保持一致 如果没有 parameterType 则代表方法参数任意
- SQL 定义文件中的 namespace 要写 包名.接口名
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!