https://www.bilibili.com/video/av47952553
p1~10
框架概述
什么是框架:整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法
目的:封装细节,提高开发效率 -> 关注功能实现
不同的框架各司其职,解决某一层或某一类问题
持久层技术有jdbc、Spring的JdbcTemplate、Apache的DBUtils
但是它们都不是框架,jdbc是规范,JdbcTemplate和DButils是工具类(只有简单的封装而没有完整的解决方案)
MyBatis框架概述
基于 java 的持久层框架
内部封装了 jdbc操作的细节,使开发者只需要关注 sql 语句本身,而无需关注注册驱动、创建连接等繁杂过程
使用ORM(Object Relational Mapping)思想实现结果集的封装
通过xml或注解的方式配置statement
环境搭建&入门案例
项目结构
Idea中创建目录和包是不一样的
创建包时com.itheima.dao是三级结构
创建目录时com.itheima.dao是一级目录
resource中创建directory要一级一级的创建,因为MyBatis的映射配置文件位置必须和dao接口的包结构相同
再进行相应的配置,就无须再写dao的实现类了,剩下的由MyBatis实现
(MyBatis支持自己写实现类,但是没什么意义)
1.准备数据库
User表
2.Idea创建Maven工程,导坐标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies>
|
3. 实体类和Dao接口
实体类User,属性和数据库表中字段一一对应,实现Serializable,生成get、set方法
用户的持久层接口IUserDao,一个方法:List findAll();
4. 配置文件
主配置文件 SqlMapConfig.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?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> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments>
<mappers> <mapper resource="com/itheima/dao/IUserDao.xml"/> </mappers> </configuration
|
映射配置文件 IUserDao.xml
MyBatis中持久层的操作接口名和映射文件也叫Mapper
命名IUserDao或者IUserMapper都可以
1 2 3 4 5 6 7 8 9 10
| <?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="com.itheima.dao.IUserDao"> <select id="findAll" resultType="com.itheima.domain.User"> select * from user </select> </mapper>
|
namespace必须是dao接口的权限定类名
id要写dao接口的方法名
resultType写返回类型(封装成什么对象)
sql语句写不写分号均可
5.测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in);
SqlSession session = factory.openSession();
IUserDao userDao = session.getMapper(IUserDao.class);
List<User> users = userDao.findAll(); for(User user : users){ System.out.println(user); }
session.close(); in.close();
|
涉及构建者模式&工厂模式&动态代理
注解方式
主配置文件还要有,修改一下mapper即可,映射配置文件可以不要了
1 2 3 4 5 6
|
<mappers> <mapper class="com.itheima.dao.IUserDao"/> </mappers>
|
IUserDao加@Select
1 2 3 4 5 6
| public interface IUserDao {
@Select("select * from user") List<User> findAll(); }
|