什么是MyBatis呢?
官宣一波:
- MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
- MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录
↓↓(个人见解不足为据)
- 相比于原生JDBC而言,MyBatis有如下先进的地方:
- 将原本在代码内完成的MySql驱动注册迁移到了XML文件中进行配置(解耦)
- 将原本在代码内写死的sql语句迁移到了XML文件中进行配置(解耦)
- 通过SQL语句的执行角色由Connection转变为了SqlSession,也包括DRUD
- SqlSession可以通过指定"命名空间+SQLId"获取XML中配置的SQL语句
通过上面大致可以了解到从原生JDBC到MyBatis的转变了
那么疑问便接踵而至
一.SqlSession怎么获取的呢?
大致流程图如下:
二.MyBatis中是如何注册MySql驱动的呢?
通过配置XML文件(这里以SqlMapConfig.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>
<!--
从外部文件db.properties读取数据库连接信息
-->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--获取db文件中的数据-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
这里涉及到了如何通过在xml文件中引入外部文件配置,db.properties的配置如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/batistest?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
三.MyBatis中SQL语句的在XML文件中该如何配置呢?
这里以UserMapper.xml文件为例
<?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="user">
<!--
1.根据用户名进行模糊查询
使用#{}取值->会预处理,底层会为传入的参数username自动添加引号再拼接为sql语句
-->
<select id="queryUserByName1" parameterType="string" resultType="User">
SELECT
*
FROM
`user`
WHERE
`username` LIKE #{username}
</select>
<!--
2.根据用户名进行模糊查询
使用${}取值->非预处理,传入的参数usename不会被自动添加引号,需要主动添加引号
EP:传入参数为"Jhon"
使用$取值时,{}内部只能写value
-->
<select id="queryUserByName2" parameterType="string" resultType="User">
SELECT
*
FROM
`user`
WHERE
`username` LIKE ${value}
</select>
<!--
添加用户,并返回新数据的主键ID
-->
<insert id="addUser" parameterType="User">
<selectKey order="AFTER" resultType="int" keyProperty="id" keyColumn="id">
select LAST_INSERT_ID()
</selectKey>
INSERT INTO `user` ( `username`, `sex`, `birthday`, `address` )
VALUES
( #{username}, #{sex}, #{birthday}, #{address} )
</insert>
</mapper>
四.Mybatis的SqlSession是如何获取到SQL语句的呢?
1.SqlSession先通过配置SqlMapConfig.xml获取到SQL语句的配置文件名UserMapper.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>
....
other code
....
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
2.SqlSession使用需要事先指定ID:"user.queryUserByName1"
sqlSession.selectList("user.queryUserByName1",username);
3.通过ID在UserMapper中查找对应的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="user">
<!--
1.根据用户名进行模糊查询
使用#{}取值->会预处理,底层会为传入的参数username自动添加引号再拼接为sql语句
-->
<select id="queryUserByName1" parameterType="string" resultType="User">
SELECT
*
FROM
`user`
WHERE
`username` LIKE #{username}
</select>
.....
other code
.....
</mapper>
通过上面的几个疑问,相信你会对MyBatis大致能有些了解了!