初识MyBatis
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
引至https://www.yiibai.com/mybatis/
MyBatis需要手工匹配提供POJO、SQL和映射关系
核心组件:
SqlSessionFactoryBuilder:会根据配置信息或代码来生成SqlSessionFactory
SqlSessionFactory:用来生成SqlSession的工厂
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口
创建一个java项目
将所需的依赖写入maven配置文件
注意:仍需jdbc的包,因为MyBatis是基于jdbc接口的框架
pom.xml如下
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.5</version> </dependency>
创建好的项目目录结构如下:
-首先创建数据库和User表
-创建MyBatis配置文件mybatis.cfg.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> <!-- typeAliases 给实体类设置一个别名--> <typeAliases> <typeAlias type="com.mh.models.User" alias="User"/> </typeAliases> <!-- Mybatis的environment标签根据环境动态引入指定的dataSource default="development"开发模式 --> <environments default="development"> <environment id="development"> <!-- 事务管理器的配置--> <transactionManager type="JDBC"/> <!-- 数据源的配置 UNPOOLED - 这个数据源的实现只是每次请求时打开和关闭连接。 POOLED - 这种数据源的实现利用“池”的概念将JDBC连接对象组织起来, 避免了创建先的连接实例时所必须的初始化和认证时间。 这是一种使得并发WEb应用快速响应请求的流行的处理方式。--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/yiibai"/> <property name="username" value="root"/> <property name="password" value="sasa"/> </dataSource> </environment> </environments> </configuration>
-创建实体类User
package com.mh.models; public class User { private int id; private String name; private String dept; private String phone; private String website; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDept() { return dept; } public void setDept(String dept) { this.dept = dept; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } }
-创建实体类映射文件User.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.mh.mapper.UserMapper"> <!--自定义返回结果集--> <resultMap id="userMap" type="User"> <id property="id" column="id" javaType="java.lang.Integer"></id> <result property="name" column="name" javaType="java.lang.String"/> <result property="dept" column="dept" javaType="java.lang.String"/> <result property="website" column="website" javaType="java.lang.String"/> <result property="phone" column="phone" javaType="java.lang.String"/> </resultMap> <!--在各种标签中的id属性必须与接口中的方法名相同,id属性值必须是唯一的,不能够 重复使用。 parameterType属性指明查询时使用的参数类型 resultType指明查询返回的结果集类型 --> <select id="getUserById" parameterType="int" resultMap="userMap"> select * from user where id=#{id} </select> </mapper>
-对应的模型查询接口
package com.mh.mapper; import com.mh.models.User; public interface UserMapper { public User getUserById(int id) throws Exception; }
-测试类
package com.mh.service; import com.mh.mapper.UserMapper; import com.mh.models.User; import com.mh.tools.DBTools; import org.apache.ibatis.session.SqlSession; public class UserService { private static void selectUserById(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { User user=mapper.getUserById(1); System.out.println(user.getId()); System.out.println(user.getName()); System.out.println(user.getDept()); System.out.println(user.getWebsite()); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args){ System.out.println("hello"); selectUserById(); } }