Mybatis
蓝瑟天宇 人气:013:01:16
MyBatis是Apache软件基金会下的一个开源项目,前身是iBatis框架。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射
MyBatis 采用的是 ORM(Object Relational Mapping) 对象关系映射
MyBatis 的两种映射方式:
-
通过XML映射
-
通过注解
MyBatis 的简单实现(xml 实现)
- 创建一个maven 模块
- 添加 pom 文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>mybatis01</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!--mysql数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--日志输出 log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <!--重新指定资源文件--> <resources> <!--指定src/main/java下的xml文件和properties文件作为资源文件--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <!--指定src/main/resources下的xml文件和properties文件作为资源文件--> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build> </project>
3. 配置mybatis-config.xml
配置 dataSource.properties(自己关联的数据库)
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/study_mybatis_01_01?useUnicode=true&characterEncoding=utf-8&useSSL=false username=root password=root
配置 log4j.properties(网上百度,看看需要啥)
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
配置mybatis-config.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> <!--定义属性文件 resource:从类路径下面读取外部文件 url:从一个资源定位地址来读取配置文件,很少使用,了解即可 --> <properties resource="dataSource.properties"/> <!-- 指定使用log4j输出日志--> <settings> <setting name="logImpl" value="LOG4J"/>
<!-- 貌似这里还可以插入一个驼峰命名--> </settings> <!-- 别名配置 --> <typeAliases> <package name="cn.ttx.pojo"/> </typeAliases> <!--mybatis环境的配置--> <environments default="default"> <environment id="default"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--加载映射文件--> <mappers> <package name="cn.ttx.dao" /> </mappers> </configuration>
完整配置
实体类编写(个人比较懒,所以用了Lombok)
package cn.ttx.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor public class User { private Integer id; private String username; private Date birthday; private String sex; private String address; }
测试
-
通过框架提供的Resources类,加载mybatis-config.xml,得到文件输入流InputStream对象
-
实例化会话工厂建造类SqlSessionFactoryBuilder
-
通过上面的SqlSessionFactoryBuilder对象,读取核心配置文件的输入流,得到会话工厂SqlSessionFactory
-
使用SqlSessionFactory对象,创建SqlSession对象
-
它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法
-
它提供了一个getMapper()方法,获取接口的实现对象。
-
-
获取接口的对象UserMapper,得到接口的代理对象
-
执行数据库的查询操作,输出用户信息
-
关闭会话,释放资源
package cn.ttx.dao; import cn.ttx.pojo.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.InputStream; import java.util.List; public class UserMapperTest { private SqlSession sqlSession; private UserMapper userMapper; @Before public void setUp() throws Exception { //1. 获取核心配置文件,得到输入流对象 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //2. 构造会话工厂建造类 SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder(); //3. 通过建造类得到会话工厂 SqlSessionFactory sessionFactory = factoryBuilder.build(is); //4. 通过会话工厂得到会话对象 sqlSession = sessionFactory.openSession(); //5. 通过会话对象得到UserMapper接口的代理对象 userMapper = sqlSession.getMapper(UserMapper.class); } @After public void tearDown() throws Exception { //7. 关闭会话 sqlSession.commit(); sqlSession.close(); } @Test public void findAll() { //6. 执行查询操作 List<User> userList = userMapper.findAll(); System.out.println(userList); } }
Mybatis执行流程
在Mybatis中一个会话(SqlSession)相当于一次访问数据库的过程,一个会话对象类似于一个Connection连接对象。
-
Resources:Mybatis提供的一个加载资源的工具类,我们也可以使用其他方式获取配置文件的InputStream。
-
SqlSessionFactoryBuilder:会话工厂建造类,用于创建会话工厂。
-
SqlSessionFactory:会话工厂,全局共享一个会话工厂,用于创建会话对象。
-
SqlSession: 会话,每次访问数据库都需要创建一个会话对象,这个会话对象不能共享。访问完成以后会话需要关闭。
IDEA 上面有很多 mybatis 的插件 free-mybatis (可以百度了解)
首次写这个东西,有什么错的地方,希望大家指出,谢谢各位大佬
加载全部内容