概要
基于Java的持久层框架
MyBatis特征
1. 它是一个半自动的ORM框架。
2. 轻便、灵活;功能强大、使用简单、扩展性极强。
3. 支持定制化 SQL、存储过程以及高级映射。
4. 避免了几乎所有的 JDBC 代码和手工操作。
5. 可使用XML或注解将接口和 POJO映射成数据库中的记录。
ORM模型
简单地说,ORM模型就是数据库的表与简单Java对象(Plain Ordinary Java Object,简称 POJO)的对象关系映射模型(Object Relational Mapping,简称ORM)。在该模型中,“对象”指的是Java的实体类对象,“关系”指的是关系型数据库(例如MySQL等),“映射”指的是两者之间的对应关系。在该“映射”中,Java类与数据库中的表相对应,类的对象与表中的一条记录相对应,对象的属性与表的字段相对应。
ORM工作原理
使用MyBatis
基础环境检查
请检查并确保开发设备已经正确安装了JDK、IDEA、Maven、MySQL数据库并能够正常使用。
创建项目
首先创建新项目用于存放之后的每个Module,具体步骤:打开开发工具IDEA,在工具栏中依次选择“File”→“New”→“Project”选项,在弹出的“New Project”对话框中选择“Empty Project”创建新的空项目。
配置Maven
为了便于项目中各Module的统一管理与配置,我们需要在项目中对Maven进行配置。请在IDEA工具栏中依次选择“File”→“Settings”→“Build, Execution, Deployment”→“Build Tools”→“Maven”选项,打开Maven配置界面并设置Maven的home路径、配置文件路径以及本地仓库位置。如图:
入门案例
准备好开发环境后,通过一个完整案例详细介绍其基本使用方法。在该案例中,对每一步操作都进行详尽描述并交代其注意事项,借此为后续开发打下坚实基础。为了便于初学者进行编码实践,在此给出项目开发完成后的总体结构。
开发准备
首先,我们准备案例所需的数据库及数据表。请在MySQL中创建名为mybatisdb的数据库,并在其中创建用户表user。
id:自增长的用户主键。
username:用户姓名。
password:用户密码。
gender:用户性别。
创建数据库及表的相关SQL语句如下:
-- 创建数据库mybatisdb DROP DATABASE IF EXISTS mybatisdb; CREATE DATABASE mybatisdb; use mybatisdb; -- 创建用户表user CREATE TABLE user( id INT primary key auto_increment, username VARCHAR(50), password VARCHAR(50), gender VARCHAR(10) ); -- 向用户表user中插入数据 INSERT INTO user(username,password,gender) VALUES("lucy","123456","female"); INSERT INTO user(username,password,gender) VALUES("momo","234567","female"); INSERT INTO user(username,password,gender) VALUES("xixi","345678","female"); INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");
创建Module
在IDEA的工具栏中依次选择“File”→“New”→“Module”→“Maven”选项,以Maven方式创建新Module。
设置打包方式
在Module的pom.xml文件中,使用packaging标签设置打包方式为jar,相关代码如下:
<groupId>com.cn</groupId> <artifactId>MyBatis_HelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <!-- 设置打包方式 --> <packaging>jar</packaging>
添加依赖
在Module的pom.xml文件中,使用dependency标签添加Module所需依赖,例如, MyBatis依赖、JUnit依赖、MySQL依赖、log4j依赖,相关代码如下:
<?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>com.cn</groupId> <artifactId>MyBatis_HelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <!-- 设置打包方式 --> <packaging>jar</packaging> <dependencies> <!-- MyBatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!-- JUnit依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- MySQL依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <!-- log4j依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
添加日志配置文件
在Module的resources包下创建log4j的日志配置文件log4j.properties,以便观察MyBatis的输出日志信息,相关代码如下:
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
创建实体类
public class User { private Integer id; private String username; private String password; private String gender; }
//省略构造函数、各属性的set和get方法、toString方法
创建接口文件
在src/main/java目录下创建com.cn.mapper包,通常情况下该包用于存放接口文件。在该包中创建接口文件UserMapper.java。
public interface UserMapper { User selectUserById(String id); }
创建映射文件
在src/main/resources目录下以com/cn/mapper的方式创建专门存放映射文件的包。一般而言,接口文件和映射文件是成对出现的,两者的文件名一样但后缀不同。例如接口文件UserMapper.java对应的映射文件为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="com.cn.mapper.UserMapper"> <select id="selectUserById" parameterType="String" resultType="com.cn.pojo.User"> select * from user where id = #{id} </select> </mapper>
<mapper/>标签的namespace属性表示该mapper的命名空间,其取值为xxxMapper.java接口的全类名。所以,此处namespace属性的值为com.cn.mapper.UserMapper。通过此配置,把xxxMapper.xml映射文件与xxxMapper.java接口文件进行了绑定。
编写全局配置文件
在src/main/resources目录下创建MyBatis的核心配置文件mybatis-config.xml,该文件主要用于配置连接数据库的信息以及MyBatis的全局配置信息。
<?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="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 配置数据库驱动 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <!-- 配置数据库地址 --> <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/> <!-- 连接数据库所需的用户名 --> <property name="username" value="root"/> <!-- 连接数据库所需的密码 --> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 配置mapper --> <mappers> <!-- 设置mapper的完整路径 --> <mapper resource="com/cn/mapper/UserMapper.xml"/> </mappers> </configuration>
测试
在src/test/java/com/cn/MyBatisTest中对数据库查询操作进行单元测试
public class MyBatisTest { @Test public void testSelectUserById() { SqlSession sqlSession = null; try { // 读取MyBatis核心配置文件mybatis-config.xml String fileName = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(fileName); // 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 通过SqlSessionFactoryBuilder解析配置文件获取sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); // 通过SqlSessionFactory对象创建SqlSession对象 sqlSession = sqlSessionFactory.openSession(true); // 通过sqlSession获取UserMapper.java接口的代理实现类的对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 调用UserMapper中的方法执行查询 String userID = "1"; User user = userMapper.selectUserById(userID); // 打印查询结果 System.out.println(user); } catch (Exception e) { System.out.println(e); } finally { // 关闭SqlSession if (sqlSession != null) { sqlSession.close(); } } } }
控制台输出:
DEBUG [main] - ==> Preparing: select * from user where id = ?
DEBUG [main] - ==> Parameters: 1(String)
DEBUG [main] - <== Total: 1
User [id=1, username=lucy, password=123456, gender=female]
分析:
通过Resources读取MyBatis的配置文件mybatis-config.xml。
通过sqlSessionFactoryBuilder对象生成sqlSessionFactory对象。
通过sqlSessionFactory对象的openSession()方法创建sqlSession对象,该对象用于操作数据库或者获取Mapper。调用openSession()方法时可传入boolean类型的参数(它表示是否自动提交事务),通常情况下传入true即可。
通过sqlSession的getMapper()方法获取Mapper。在此过程中,getMapper()会通过动态代理动态生成UserMapper.java接口的代理实现类。
利用Mapper进行查询操作。
执行完查询操作后关闭sqlSession。
标签:入门,创建,UserMapper,sqlSession,user,使用,MyBatis,log4j From: https://www.cnblogs.com/ywzh/p/17738018.html