Mybatis框架在Ibatis基础上发展而来,支持SQL查询、存储过程、支持映射的持久层(模型层)ORM框架;
Mybatis与Hibernate区别:
Hibernate是全表映射框架,只需要定义对象与数据库表的映射关系,就可以通过Hibernate操作数据库,不需要掌握SQL,通过调用Hibernate的封装方法,Hibernate会自动生成SQL语句,并调用JDBC接口来执行,就开发效率而言,要比Mybatis要好一些;但是对于多表关联,支持较差,更新数据时,也会发送一张表的全部字段,不支持存储过程,不能通过SQL调优来优化系统性能,因为所有SQL都是有Hibernate框架根据自己API生成的
Mybatis是一个半自动的ORM框架,需要手动匹配对象与数据库表的映射,需要开发者手动编写SQL,所有可以通过SQL调优来优化系统性能,对于一些复杂对性能要求高的来说,Mybatis框架更加适合。
(1)首先将Mybatis核心jar包,及系统所用的数据库驱动jar包(以mysql数据库为例) 添加到pom.xml的<dependencies>
节点下:
<?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>
<!--1.配置环境 ,默认的环境id为mysql-->
<environments default="mysql">
<!--1.2.配置id为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!--数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-"3306"端口是mysql的默认端口,具体根据数据库设置的端口更改,数据库名同理-->
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="user" />
<property name="password" value="******" />
</dataSource>
</environment>
</environments>
<!--2.配置Mapper的位置 -->
<!--此处配置对象与数据库表的映射文件,可以在mappers节点中,配置多个mapper映射文件-->
<mappers>
<!--此处指向项目资源文件目录下的 com.ssm.mapper 目录下的 CustomerMapper.xml 文件-->
<mapper resource="com.ssm.mapper/CustomerMapper.xml" />
</mappers>
</configuration>
(3)创建对象与数据库表的映射文件 CustomerMapper.xml 也就是在(2)指向的映射文件 :
<?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">
<!-- namespace表示命名空间 -->
<mapper namespace="resources.com.ssm.mapper.CustomerMapper">
<!--根据客户编号获取客户信息 -->
<select id="findCustomerById" parameterType="Integer"
resultType="com.ssm.po.Customer">
select * from t_customer where id = #{id}
</select>
<!--根据客户名模糊查询客户信息列表-->
<select id="findCustomerByName" parameterType="String"
resultType="com.ssm.po.Customer">
<!-- select * from t_customer where username like '%${value}%' -->
select * from t_customer where username like concat('%',#{value},'%')
</select>
<!-- 添加客户信息 -->
<insert id="addCustomer" parameterType="com.ssm.po.Customer">
insert into t_customer(username,jobs,phone)
values(#{username},#{jobs},#{phone})
</insert>
<!-- 更新客户信息 -->
<update id="updateCustomer" parameterType="com.ssm.po.Customer">
update t_customer set
username=#{username},jobs=#{jobs},phone=#{phone}
where id=#{id}
</update>
<!-- 删除客户信息 -->
<delete id="deleteCustomer" parameterType="Integer">
delete from t_customer where id=#{id}
</delete>
</mapper>
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.ssm=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
并在pom.xml文件中,把log4j及其相关依赖引入进来:
创建单元测试类 mybatisTest :
import java.io.InputStream;
import java.util.List;
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 org.junit.Test; // 单元测试类 Junit API提供的
import com.ssm.po.Customer; // 手动创建的 数据库表映射的对象 包含 属性的setter getter 方法
public class mybatisTest {
@Test
public void findCustomerByIdTest() throws Exception {
// 1、读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2、根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、通过SqlSessionFactory创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4、SqlSession执行映射文件中定义的SQL,并返回映射结果
Customer customer = sqlSession.selectOne("resources.com.ssm.mapper"+ ".CustomerMapper.findCustomerById", 1);
// 打印输出结果
System.out.println(customer.toString());
// 5、关闭SqlSession
sqlSession.close();
}
}