MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。
1、 简化JDBC的开发
2、 能够更好的完成ORM(对象关系映射)
MyBatis - 图1
1.SqlMapConfig.xml:此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
2.UserMapper.xml:sql映射文件,文件中配置了操作数据库的sql语句。此文件需要SqlMapConfig.xml中加载。
3.SqlSessionFactory:通过mybatis环境等配置信息构造会话工厂对象。
4.SQLSession:由会话工厂创建会话,操作数据库需要通过SqlSession进行。
5.User:Executor把执行sql后的内容输出映射到java对象中,输出结果映射过程相当于jdbc编译中对结果的解析处理过程。

引入依赖


UTF-8



mysql
mysql-connector-java
5.1.40


org.mybatis
mybatis
3.2.8


cglib
cglib
2.2.2


log4j
log4j
1.2.17


sqlMapConfig.xml

文件名可以随意命名,习惯名称sqlMapConfig.xml 主要配置3个内容:事务管理器,数据源信息,映射文件
后续和spring框架整合后,该文件内容就都没了
<?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">


配置别名
在sqlMapConfig.xml配置,在映射文件中直接写对象名称即可












value=”com.mysql.jdbc.Driver”/>
value=”jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf-8”/>










UserMapper.xml

文件名可以随意命名,习惯的方式是: POJO对象名+Mapper.xml
用来描述对应对象的信息,写大量表操作的SQL语句
通过#{value}来获取值,value写的是属性的名字。
命名空间namespace作为该映射文件的唯一标志
映射文件里的配置要和代码中匹配,比如返回值类型,参数类型等等

<?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">





*MyBatis中有两个重要的对象,分别是SqlSessionFactory和SqlSession。

SqlSessionFactory

可以理解为会话工厂,在整个项目中共享,是线程安全的。通过openSession方法创建SqlSession对象,该方法存在很多重载方式可以有参数,可以无参数。

SqlSession

可以通过会话工厂产生,线程不安全。用来执行SQL,提供了丰富的方法来完成数据库的操作。
Mybatis不会自动提交事务,需要手动提交。
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@56b981c0]
提交方式有两种:openSession(true)或者session.commit()
// 新增一条记录

测试类

  1. @Test<br /> **public** **void** add() **throws** IOException{<br /> //加载核心配置文件<br /> InputStream in = Resources._getResourceAsStream_( "sqlMapConfig.xml");<br /> //创建ssf会话工厂<br /> SqlSessionFactory ssf = **new** SqlSessionFactoryBuilder() .build(in);<br /> //创建会话<br /> SqlSession session = ssf.openSession();<br /> //定位SQL并执行<br /> session.insert("HelloMapper.Add"); <br /> //手动提交事务<br /> //openSession(boolean autocommit)<br /> session.commit(); <br /> //释放资源<br /> session.close(); <br /> }

#获取参数和$的区别

(推荐!)#: 使用#{parameterName}引用参数的时候,Mybatis会把这个参数认为是一个字符串,例如传入参数是“Smith”,那么在SQL(Select from emp where name = #{employeeName})使用的时候就会转换为Select from emp where name = ‘Smith’。
MyBatis - 图2

$: 不做字符串拼接,SQL(Select from emp where name = ${employeeName})使用的时候就会转换为Select from emp where name = Smith。此时,如果字段是varchar类型直接抛出SQL异常。
MyBatis - 图3

从安全性上考虑,能使用#尽量使用#来传参,因为这样可以有效防止SQL注入的问题。