mybatis是一个持久层框架,其主要思想就是想将程序中大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置.

使得SQL与程序代码分离,即在不修改程序代码的情况下,直接在配置文件中修改SQL.

mybatis的搭建步骤

下载jar包并部署包

  mybatisjar下载网址:https://github.com/mybatis/mybatis-3/releases,mybatis压缩包解压后结构目录如下

此外lib目录下存放着编译依赖包如下

最后只需把jar包放入项目的此lib 目录下即可

或者选中项目右键 build path

进入此窗口

单击第二个按钮直接从本地进行添加jar,亦或者按下按钮从此工作空间的项目中选择jar进行添加

编写mybatis核心配置文件

在此之前需要调整下xml的代码提示(引入dtd文件)

  请先看第6点

  1. 选择window →  preferences
  2. 搜索xml →  xml catalog出现如下窗口
  3. add → file system 选择你所需要的文件dtd

    这两个文件都是经常使用的所以都添加进去

  4. key 需要与配置文件中的 此部分相同

    所以key是  -//mybatis.org//DTD Config 3.0//EN,那么dtd文件到哪里找呢?

  5. 所需的dtd文件都在mybatis解压后的 mybatis-3.4.4\org\apache\ibatis\builder\xml 下面如图

创建核心配置文件

  1. 找到如下窗口 → next
  2. 选择第一个 → next 
  3. 选择第二个 → 选择config → next→finish即可

  4. 此时创建好的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>
<!-- 引入database.propeerties -->
<properties resource="database.properties"/>
<!-- 配置mybatis的log实现log4j -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="cn.smbms.pojo"/>
</typeAliases>
<!-- 配置mybatis多套运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事物管理,采用jdbc的事物管理 -->
<transactionManager type="JDBC"/>
<!-- POOLED:mybatis自带的数据源,jndi:基于Tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="cn/smbms/dao/UserMapper.xml"/>
</mappers>
</configuration>
属性 作用
configuration 配置文件的根元素节点
propertes 通过resource属性从外表知道properties属性文件,该属性文件描述数据库的相关配置
settings 设置mybatis运行中的一些行为,比如此处设置mybatis的log日志实现为LOG4J,即使用log4j实现日志功能
environments 表示配置mybatis的多套运行环境,将SQL映射到多个不同的数据库上,元素节点中可配置多个,但必须指定默认运行环境
environment 配置mybatis的一套运行环境,需指定运行环境id,事务管理,数据源配置等相关信息
mappers 作用是告诉mybatis去哪里找SQL映射文件(该内容是开发者定义的映射SQL语句),整个项目可以有1个或多个
mapper mappers的子元素节点,具体知道SQL映射文件的路径,其中resource属性表SQL映射文件的路径

创建实体类并为其创建DAO接口

  结构如下

创建sql映射文件

代码如下

 <?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="cn.smbms.dao.UserMapper">
<!-- 查询用户表记录数 -->
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
<!-- 查询用户列表 -->
<select id="getUserList" resultType="User">
select * from smbms_user
</select>
</mapper>
  1. mapper:映射文件的根元素节点,只有一个属性namespace
    1. namespace:用于区分不同的mapper,全局唯一.
  2. select:表示查询语句,是mybatis最常用的元素之一,常用属性如下
    1. id属性:改命名空间下唯一标识符
    2. resultType属性:表示SQL语句返回值类型,第一个select返回的是int,后者则是user类型

编写测试类运行

工具类代码如下

 package cn.smbms.utils;

 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; public class MyBatisUtil {
private static SqlSessionFactory factory;
static {
try {
//获取mybatis-config.xml文件的输出流
InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
factory=new SqlSessionFactoryBuilder().build(is);
} catch (Exception e) {
e.printStackTrace();
}
} public static SqlSession createSqlSession() {
return factory.openSession(false); //默认true自带提交事务
}
public static void closeSqlSession(SqlSession sqlSession) {
if(null!=sqlSession) {
sqlSession.close();
}
}
}

测试类代码方法一 基于mapper接口方式操作如下

public static void main(String[] args) {
Logger logger = Logger.getLogger(Test.class);
SqlSession sqlSession =null;
List<User> userList = new ArrayList<>();
try {
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.getMapper(UserMapper.class).getUserList();
for (User user : userList) {
logger.debug("testGetUserList UserCode:"+user.getUserCode()+"and userName:"+user.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
}finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
}

基于mapper接口方式操作此接口必须对应select映射SQL语句中的id对应

测试类代码方法二 运行映射SQL语句

public static void main(String[] args) {
Logger logger = Logger.getLogger(Test.class);
SqlSession sqlSession =null;
List<User> userList = new ArrayList<>();
try {
sqlSession = MyBatisUtil.createSqlSession();
//直接运行已映射的SQL语句
userList = sqlSession.selectList("cn.smbms.dao.UserMapper.getUserList");
for (User user : userList) {
logger.debug("testGetUserList UserCode:"+user.getUserCode()+"and userName:"+user.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
logger.error(e);
}finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
}

 在使用SQLsession实例执行已映射的语句,没有与id所对应的方法也不会出错,即使UserMpper这个接口没有也不会影响运行结果.

最新文章

  1. Lae程序员小漫画(三),仅供一乐
  2. js自定义延迟执行函数
  3. ci 使用体会
  4. SQL Server表的数据量大小查询
  5. unison + inotify 实现文件实时双向同步部署步骤
  6. animation css3动画与CSS3 @keyframes担配使用创建往复平缓动画
  7. PS:改装店收的是友情价,包安装十五个毛主席。
  8. RelativeLayout的一些感想
  9. android网络操作使用汇总(http)
  10. python Asyncore.dispatcher 理解
  11. 当Node.js遇见Docker
  12. GM8180_gpio内核模块调试
  13. seq2seq-chatbot:200 行代码实现聊天机器人
  14. SSM-MyBatis-14:Mybatis中智能标签
  15. (三) Keras Mnist分类程序以及改用交叉熵对比
  16. 阿里云上的Centos 7.6的一次Nginx+Mysql+PHP7.3 部署
  17. [ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子
  18. Confluence 6 WebDAV 禁用严格路径检查
  19. 两个UITableView的级联菜单
  20. ng 的 ng-repeat(对象) 把对象的 key 和value 都拿出来 循环

热门文章

  1. Ubuntu系统下同时打开多个终端窗口的软件
  2. HDU 5734 A - Acperience
  3. DevOps的工程化
  4. AOP注解方式
  5. 使用原生javascript实现瀑布流
  6. 介绍一个很好用的Rsa加解密的.Net库 Kalix.ApiCrypto
  7. Spring Cloud(1):微服务简介
  8. form表单多文件上传
  9. MobaXterm连接远程Linux服务器
  10. [WPF][ListBox]鼠标拖拽多选,(Shift Key、Ctrl Key多选有效)(转)