一、Mybatis概述
1. 简介
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。最后mybatis框架执行sql并将结果映射为java对象并返回。 采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
2. 配置
代码语言:javascript复制① 核心配置文件【mybatisConfig.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>
<!-- 加载配置文件 -->
<properties resource="jdbc.properties" />
<!-- 别名 -->
<typeAliases>
<!-- 单个类起别名 -->
<typeAlias type="com.softwareMan.domain.User" alias="user" />
<!-- 整个包内起别名 -->
<package name="com.softwareMan.domain"/>
</typeAliases>
<!-- 开发环境 -->
<environments default="first">
<environment id="first">
<!-- 事务 -->
<transactionManager type="JDBC" />
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.dirveClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<!-- 配单个(基于 XML) -->
<mapper resource="mapper/userMapper.xml" />
<!-- 配单个(基于注解) -->
<mapper class="com.softwareMan.dao.UserDao" />
<!--
配多个
## 注意
- 使用此种方式时,接口与映射文件需再同一路径下
- IDEA 在使用这种方式时,若将映射文件写道 java 文件夹内时,IDEA 不会获取静态资源
【pom加如下配置使其能够获取静态资源】
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
-->
<package name="com.softwareMan.dao"/>
</mappers>
</configuration>
---------------------------------------------------------------------------------------------------------------
② 映射文件【daomapper.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">
<!-- namespace 为命名空间 -->
<mapper namespace="userMapper">
<!--
id 为唯一标识
parameterType、resultType参数与结果集需要配全限定名(或别名【常用数据类型Mybatis底层已有别名】)
## 注意
此数 标签名 见名知意,可以混用【不推荐】
-->
<select id="findByUserId" parameterType="int" resultType="com.softwareMan.domain.User">
<!-- sql 语句 #{} 为占位符,内填类的属性名,为单一值时可任意 -->
select * from user where id = #{value}
</select>
</mapper>
----------------------------------------------------------------------------------------------------------------
③ 执行【Test.java】
public static void main(String[] args) throws IOException {
//加载核心配置文件
InputStream rs = Resources.getResourceAsStream("mybatisConfig.xml");
//创建 session 工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rs);
/*
获取 sqlSession 会话对象
* openSession():执行增删改时需要手工提交事务
提交事务方法:sqlSession.commit();
* openSession(boolean):为 true 时,自动提交事务
*/
SqlSession sqlSession = factory.openSession();
/*
普通方式执行 sql
此处增删改方法可以混用
原因:方法分为两类,增删改底层调用同一种方法
- update : 增、删、改
- select : 查
*/
List<User> list = sqlSession.selectList("userMapper.find");
/*
使用接口代理对象执行
注意:
映射文件 命名空间 为接口的全限定名
映射文件 id 为接口方法名
*/
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> list = mapper.findAll();
//打印结果集
System.out.println(list);
}