MyBatis简介
原始jdbc操作复杂(注册驱动、获得连接、获得执行对象、增删改查、释放资源),存在问题:
- 数据库创建连接、释放连接频繁;
- sql语句变化多样;
- 查询操作时,需要手动将结果集中的数据封装到实体中。
解决方案:
- 使用数据库连接池;
- 将sql语句抽取到xml配置文件中;
- 使用发射、内省等底层技术,自动将实体与表进行属性与字段的自动映射。
mybatis:
- 是一个基于java的持久层框架(DAO层框架),内部封装了jdbc,使开发者只需要关注与sql语句本身;
- 通过xml或注解方式配置各种statement;
- 采用ORM思想解决了实体和数据库映射的问题。
快速入门
步骤:
- 添加MyBatis坐标
- 创建数据表
- 创建实体类
- 编写映射文件UserMapper.xml(sql代码)
- 编写核心文件SqlMapConfig.xml
- 测试
模块结构:
module
src
main
java
com.domain
User.java
resources
SqlMapConfig.xml (配置文件)
UserMapper.xml (配置文件)
test
java
UserMapperTest.java (测试文件)
代码:
-
添加MyBatis坐标
<!-- 连接数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!-- mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
-
创建数据表
CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), PASSWORD VARCHAR(20) );
-
创建实体类
和数据表一致,并且有Getter/Setter/toString方法
-
编写映射文件userMapper.xml(复制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="userMapper"> <select id="findAll" resultType="com.domain.User"> select * from user </select> </mapper>
-
编写核心文件sqlMapConfig.xml(复制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> <!-- 数据源环境--> <environments default="developement"> <environment id="developement"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/db1"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 加载映射文件--> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
-
测试
public class MyBatisTest { @Test public void test1() throws IOException { // 获取核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 获取session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // 获得session会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行操作(参数就是配置文件中的id) List<User> userList = sqlSession.selectList("userMapper.findAll"); System.out.println(userList); // 释放资源 sqlSession.close(); } }