Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。
与hibernate比较:
配置数据库和实体配置文件
配置结果集和方法
delete from MESSAGE where ID = #{_parameter}
delete from MESSAGE where ID in(
#{item}
)
注意:
主表
实体:private List
附表
1.resultMap和resultType的区别:
resultMap需要在xml中配置相应的映射
resultType对SQL语句大小写敏感。
2.parameterMap和parameterType的区别:
3.#{}和${}的区别:
#{}会在预编译时变成一个?,而${}直接写入参数的值(如果想使用,需要用'${}')
${}多用在排序sql语句中(order by ${})
主要使用sqlSession来完成sql操作
//通过配置文件获取数据库连接信息
Reader reader =Resources.getResourceAsReader("com/config/Configuration.xml");
//通过配置文件构建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//通过SqlSessionFactory打开一个数据库会话
SqlSession sqlSession = sqlSessionFactory.openSession();
1、查询:
sqlSession.selectList("Message.queryMessageList",
message);
2、删除:删除后需要手动提交事务
sqlSession.delete("Message.deleteOne", id);
sqlSession.commit();
3、修改
sqlSession.update("Message.update", message);
sqlSession.commit();
4、插入
sqlSession.insert("Message.insert", message);
sqlSession.commit();
对API调用需要的namespace、与sql相关的id、传入的参数、返回值做约束,减少出错的可能。
2.1接口类
package com.imooc.dao;
import java.util.List;
import com.imooc.bean.Message;
/**
* 与Message配置文件相对应的接口
*/
public interface IMessage {
/**
* 根据查询条件查询消息列表
*/
public List queryMessageList(Message message);
}
2.2 调用
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.imooc.bean.Message;
import com.imooc.db.DBAccess;
/**
* 和message表相关的数据库操作
*/
public class MessageDao {
/**
* 根据查询条件查询消息列表
*/
public List queryMessageList(Message message) {
DBAccess dbAccess = new DBAccess();
List messageList = new ArrayList();
SqlSession sqlSession = null;
try {
sqlSession = dbAccess.getSqlSession();
// 通过sqlSession执行SQL语句
IMessage imessage = sqlSession.getMapper(IMessage.class);
messageList = imessage.queryMessageList(message);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return messageList;
}
}