MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
官网:https://mybatis.org/mybatis-3/zh/index.html
持久层
负责将数据到保存到数据库的那一层代码
JavaEE三层架构:表现层、业务层、持久层
框架
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
MyBatis 快速入门
查询user表中所有数据
1.创建user表,添加数据
2.创建模块,导入坐标
3.编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题
4.编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题
5.编码
1.定义POJO类
2.加载核心配置文件,获取 SqlSessionFactory 对象
3.获取 SqlSession 对象,执行 SQL 语句
4.释放资源
2.创建模块,导入坐标
要使用 MyBatis,只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将依赖代码置于 pom.xml 文件中。
pom.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>org.example</groupId> 8 <artifactId>mybatis-demo</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <properties> 12 <maven.compiler.source>8</maven.compiler.source> 13 <maven.compiler.target>8</maven.compiler.target> 14 </properties> 15 16 <dependencies> 17 <!--mybatis 依赖--> 18 <dependency> 19 <groupId>org.mybatis</groupId> 20 <artifactId>mybatis</artifactId> 21 <version>3.5.5</version> 22 </dependency> 23 <!--mysql 驱动--> 24 <dependency> 25 <groupId>mysql</groupId> 26 <artifactId>mysql-connector-java</artifactId> 27 <version>5.1.46</version> 28 </dependency> 29 <!--junit 单元测试--> 30 <dependency> 31 <groupId>junit</groupId> 32 <artifactId>junit</artifactId> 33 <version>4.13</version> 34 <scope>test</scope> 35 </dependency> 36 <!-- 添加slf4j日志api --> 37 <dependency> 38 <groupId>org.slf4j</groupId> 39 <artifactId>slf4j-api</artifactId> 40 <version>1.7.20</version> 41 </dependency> 42 <!-- 添加logback-classic依赖 --> 43 <dependency> 44 <groupId>ch.qos.logback</groupId> 45 <artifactId>logback-classic</artifactId> 46 <version>1.2.3</version> 47 </dependency> 48 <!-- 添加logback-core依赖 --> 49 <dependency> 50 <groupId>ch.qos.logback</groupId> 51 <artifactId>logback-core</artifactId> 52 <version>1.2.3</version> 53 </dependency> 54 </dependencies> 55 </project>
3.编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题
mybatis-config.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 7 <typeAliases> 8 <package name="com.test.pojo"/> 9 </typeAliases> 10 11 <!-- 12 environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment 13 --> 14 <environments default="development"> 15 <environment id="development"> 16 <transactionManager type="JDBC"/> 17 <dataSource type="POOLED"> 18 <!--数据库连接信息--> 19 <property name="driver" value="com.mysql.jdbc.Driver"/> 20 <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/> 21 <property name="username" value="root"/> 22 <property name="password" value="1234"/> 23 </dataSource> 24 </environment> 25 </environments> 26 <mappers> 27 <!--加载sql映射文件--> 28 <mapper resource="UserMapper.xml"/> 29 </mappers> 30 </configuration>
4.编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题
UserMapper.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <!-- 7 namespace:名称空间 8 --> 9 10 <mapper namespace="test"> 11 <!--statement--> 12 <select id="selectAll" resultType="com.test.pojo.User"> 13 select * from tb_user; 14 </select> 15 </mapper>
5.编码
1.定义POJO类
User.java:
1 public class User { 2 3 private Integer id; 4 private String username; 5 private String password; 6 private String gender; 7 private String addr; 8 9 public Integer getId() { 10 return id; 11 } 12 public void setId(Integer id) { 13 this.id = id; 14 } 15 ... 16 @Override 17 public String toString() { 18 ... 19 } 20 }
2.加载核心配置文件,获取 SqlSessionFactory 对象
3.获取 SqlSession 对象,执行 SQL 语句
4.释放资源
MyBatisDemo.java:
1 public static void main(String[] args) throws IOException { 2 //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory 3 String resource = "mybatis-config.xml"; 4 InputStream inputStream = Resources.getResourceAsStream(resource); 5 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 6 7 //2. 获取SqlSession对象,用它来执行sql 8 SqlSession sqlSession = sqlSessionFactory.openSession(); 9 //3. 执行sql 10 List<User> users = sqlSession.selectList("test.selectAll"); 11 System.out.println(users); 12 //4. 释放资源 13 sqlSession.close(); 14 }
解决SQL映射文件的警告提示
UserMapper.xml存在警告信息:
产生原因:Idea和数据库没有建立连接,不识别表信息
解决方式:在Idea中配置MySQL数据库连接
Mapper 代理开发
目的:
解决原生方式中的硬编码
简化后期执行SQL
使用 Mapper 代理方式完成入门案例
1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
创建mybatis-demo/src/main/java/com/test/mapper/UserMapper.java
创建mybatis-demo/src/main/resources/com/test/mapper,将UserMapper.xml放到该文件夹下。(注:resources文件夹下需要使用【com/test/mapper】方式来定义文件夹,不能使用【com.test.mapper】来定义文件夹)
2、设置SQL映射文件的namespace属性为Mapper接口全限定名
修改UserMapper.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <!-- 7 namespace:名称空间 8 --> 9 10 <!--<mapper namespace="test">--> 11 <mapper namespace="com.test.mapper.UserMapper"> 12 <!--statement--> 13 <select id="selectAll" resultType="com.test.pojo.User"> 14 select * from tb_user; 15 </select> 16 </mapper>
3、在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
UserMapper.java:
1 public interface UserMapper { 2 List<User> selectAll(); 3 }
注:
1、UserMapper.xml位置变更,MyBatis核心配置文件mybatis-config.xml中加载sql映射文件路径也需修改;
2、如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载
mybatis-config.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 7 <typeAliases> 8 <package name="com.test.pojo"/> 9 </typeAliases> 10 11 <!-- 12 environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment 13 --> 14 <environments default="development"> 15 <environment id="development"> 16 <transactionManager type="JDBC"/> 17 <dataSource type="POOLED"> 18 <!--数据库连接信息--> 19 <property name="driver" value="com.mysql.jdbc.Driver"/> 20 <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/> 21 <property name="username" value="root"/> 22 <property name="password" value="1234"/> 23 </dataSource> 24 </environment> 25 </environments> 26 <mappers> 27 <!--加载sql映射文件--> 28 <!--<mapper resource="UserMapper.xml"/>--> 29 <!--修改1--> 30 <!--<mapper resource="com/test/mapper/UserMapper.xml"/>--> 31 <!--修改2--> 32 <!--Mapper代理方式--> 33 <package name="com.test.mapper"/> 34 </mappers> 35 </configuration>
4、编码
通过 SqlSession 的 getMapper方法获取 Mapper接口的代理对象
调用对应方法完成sql的执行
MyBatisDemo.java:
1 public static void main(String[] args) throws IOException { 2 //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory 3 String resource = "mybatis-config.xml"; 4 InputStream inputStream = Resources.getResourceAsStream(resource); 5 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 6 7 //2. 获取SqlSession对象,用它来执行sql 8 SqlSession sqlSession = sqlSessionFactory.openSession(); 9 //3. 执行sql 10 //List<User> users = sqlSession.selectList("test.selectAll"); 11 //3.1 获取UserMapper接口的代理对象 12 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 13 List<User> users = userMapper.selectAll(); 14 System.out.println(users); 15 //4. 释放资源 16 sqlSession.close(); 17 }
MyBatis 核心配置文件详解
MyBatis 核心配置文件的顶层结构如下:(注:配置各个标签时,需要遵守前后顺序)
类型别名(typeAliases)
在mybatis-config.xml中添加类型别名(typeAliases)
1 <typeAliases > 2 <package name="com.test.pojo"/> 3 </typeAliases>
在UserMapper.xml中写返回类型时可直接写类名(不区分大小写)
UserMapper.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <!-- 7 namespace:名称空间 8 --> 9 <mapper namespace="com.test.mapper.UserMapper"> 10 <!--<select id="selectAll" resultType="com.test.pojo.User">--> 11 <select id="selectAll" resultType="user"> 12 select * from tb_user; 13 </select> 14 </mapper>
配置文件完成增删改查
MyBatisX 插件
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
主要功能:
XML 和 接口方法 相互跳转
根据接口方法生成 statement
安装:
标签:xml,配置文件,UserMapper,mybatis,test,SQL,MyBatis From: https://www.cnblogs.com/sunny-sml/p/17524476.html