Mybatis的下载并搭建核心架构
本人下载的是mybatis-3.4.5,其目录结构为:
源码包目录结构:
[第一步]在我们的项目中需要导入mybatis依赖包和mybatis核心包还有数据库驱动包
[第二步]创建mybatis核心配置文件,内容参考Mybatis源码的test文件夹下的配置文件,详细路径:src\test\java\org\apache\submitted\complex_property\Configuration.xml
我们可以在src下创建一个文件夹config用来存放项目中的配置文件
Configuration.xml文件中的environments-environment-dataSource标签内容是连接数据库的配置,包含driver,URL,username,password,关于Configuration.xml文件的知识点我们后面再细说
Configuration.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>
<!-- 和spring整合后environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<!-- 数据库连接池 -->
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/auto_message"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yhc/config/sqlxml/Message.xml"/>
<mapper resource="com/yhc/config/sqlxml/Command.xml"/>
<mapper resource="com/yhc/config/sqlxml/CommandContent.xml"/>
</mappers>
</configuration>
SqlSession
1.想一想jdbc:加载驱动,获取连接,创建对象,给SQL语句传参数,发送SQL语句,处理结果集, 释放资源,还有事务的管理
2.想一想Dao层的需求:需要一个对象能与数据库交互,能执行SQL语句,而Mybatis就可以提供这个对象,这就是SqlSession对象
3.SqlSession的作用:
①.向SQL语句传入参数
②.执行SQL语句
③.获取执行SQL语句的结果
④.事务的控制
4.如何得到SqlSession:
①.通过配置文件获取数据库连接相关信息
②.通过配置信息构建SqlSessionFactory
③.通过SqlSessionFactory打开数据库会话-SqlSession
代码:
//通过配置文件获取数据库连接信息
Reader reader = Resources.getResourceAsReader("com/yhc/.../Configuration.xml");
//通过配置文件信息构建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//通过sqlSessionFactory打开一个数据库会话
SqlSession sqlSession = sqlSessionFactory.openSession();
sql的基本配置与执行
message表:
下面我们通过对message表的操作学习Mybatis
1.创建配置SQL语句的配置文件-Message.xml:可以参考Mybatis源码包的mybatis-3-mybatis-3.4.5\src\test\java\org\apache\ibatis\submitted\complex_property\User.xml文件
配置文件有很多标签,比如select, insert, delete,update
<?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="Message">
<resultMap type="com.yhc.bean.Message" id="MessageResult">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="command" jdbcType="VARCHAR" property="command"/>
<result column="description" jdbcType="VARCHAR" property="description"/>
<result column="content" jdbcType="VARCHAR" property="content"/>
</resultMap>
<select id="selectMessageList" resultMap="MessageResult">
SELECT id, command, description, content FROM message
</select>
</mapper>
配置SQL的标签的属性:
id=”“:给标签起一个名字,给sqlSession看的,sqlSession可以通过ID找到这个标签对应的SQL语句并执行,id的名称一般跟Java代码的方法名称保持一致;ID的名字必须是唯一的,如果不是唯一的,那么sqlSession不能找到确切的标签,如果是多个人开发,配置文件有多个,很难保证id是唯一的,这里就需要根节点mapper标签的namespace属性来区分了,不同的namespace下select标签的ID属性可以重名,sqlSession调用的时候要这样写sqlSession.selectList(“Message.queryMessageList”);Message为namespace的属性值,queryMessageList为标签的ID属性值,类似于package的作用,而且namespace不能省略,否则加载配置文件的时候会出错(namespace一般约定写成dao的全路径类名,id是方法名,以后会通过代理模式优化代码的,约定大于配置)
resultMap=”“:应用关系,引用的是resultMap的id属性值
配置对象属性和表字段的关系:
1.标签:resultMap
<resultMap type="com.yhc.bean.Message" id="MessageResult">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="command" jdbcType="VARCHAR" property="command"/>
<result column="description" jdbcType="VARCHAR" property="description"/>
<result column="content" jdbcType="VARCHAR" property="content"/>
</resultMap>
type属性:配的是对应哪一个类,全名称类名
ID属性:id在resultMap标签中唯一
id标签:主键列,column属性:对应查询结果集中的那个字段,property属性:对应对象中的哪一个属性名,jdbcType:填写java.sql.Types下的常量名(数据库中的字段类型与其有一种对应关系,自己查),
result标签:普通列,column属性:对应查询结果集中的那个字段,property属性:对应对象中的哪一个属性名
2.应用关系
比如在select标签中:resultMap=“MessageResult”
3.在核心配置文件中的mappers标签中导入配置SQL语句的配置文件
<mappers>
<mapper resource="com/yhc/.../Message.xml" />
</mappers>