Mybatis的初步实现
0. 思路
搭建环境--->导入Mybatis--->编写代码--->测试
1. 搭建环境
搭建数据库:
1 CREATE DATABASE `mybatis`; 2 USE `mybatis`; 3 CREATE TABLE `user`( 4 `id` INT(20) NOT NULL, 5 `name` VARCHAR(30) DEFAULT NULL, 6 `pwd` VARCHAR(30) DEFAULT NULL, 7 PRIMARY KEY(`id`) 8 )ENGINE=INNODB DEFAULT charset=utf8;
添加数据
1 INSERT INTO `user` (`id`,`name`,`pwd`) VALUES (1,'张三','12345'),(2,'李四','123456');
2. 基于idea新建项目
2.1 创建项目File-->New Project-->maven
2.2 设置自己的maven
Settings-->Build-->BuildTools-->Maven-->Maven home directory
Maven主目录和用户设置文件需要配置成自己的maven路径
maven下载地址:https://maven.apache.org/download.cgi
2.3 将创建号的Maven项目删除src文件夹,这样可以将刚创建的Maven项目变为父类,之后可在Maven项目中创建子模块
2.4 导入依赖
1 <!-- 导入依赖--> 2 <dependencies> 3 <!-- mysql驱动--> 4 <dependency> 5 <groupId>mysql</groupId> 6 <artifactId>mysql-connector-java</artifactId> 7 <version>8.0.19</version> 8 </dependency> 9 <!-- mybatis--> 10 <dependency> 11 <groupId>org.mybatis</groupId> 12 <artifactId>mybatis</artifactId> 13 <version>3.5.5</version> 14 </dependency> 15 <!--junit--> 16 <dependency> 17 <groupId>junit</groupId> 18 <artifactId>junit</artifactId> 19 <version>3.8.1</version> 20 </dependency>
父类导入依赖后创建的子模块也可以集成依赖
3. 创建模块(子模块)
3.1 编写mybatis核心配置文件
依据Mybatis的中文文档,进行mybatis的入门创建,网址为:https://mybatis.org/mybatis-3/zh/getting-started.html
XML 配置文件中包含了对 MyBatis 系统的核心设置
包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。
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 <environments default="development"> 7 <environment id="development"> 8 <transactionManager type="JDBC"/> 9 <dataSource type="POOLED"> 10 <property name="driver" value="com.mysql.jdbc.Driver"/> 11 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 12 <property name="username" value="root"/> 13 <property name="password" value="root"/> 14 </dataSource> 15 </environment> 16 </environments> 17 <mappers> 18 <mapper resource="com/dz/dao/UserMapper.xml"/> 19 </mappers> 20 </configuration>
进入idea中的数据库连接,点击测试连接数据库,测试数据库是否连接成功
连接数据库时需要更改时区,将时区改为shanghai时区
选择架构中你需要连接的数据库,点击确定即可
在URL中获取对应的值
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
3.2 编写Mybatis应用文件
- 每一个Mybatis都以一个sqlSessionFactory实例为核心
- SqlSessionFactory可以获取SqlSession实例
- SqlSession可以进行数据的操作
1 //每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的 2 //SqlSessionFactory-->SqlSession 3 public class MybatisUtils { 4 private static SqlSessionFactory sqlSessionFactory; 5 6 static { 7 try { 8 //使用Mybatis获取SqlSessionFactory对象 9 String resource = "mybatis-config.xml"; 10 inputStream = Resources.getResourceAsStream(resource); 11 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 12 } catch (IOException e) { 13 e.printStackTrace(); 14 } 15 } 16 17 18 //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 19 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。 20 public static SqlSession getSqlSession() { 21 return sqlSessionFactory.openSession(); 22 } 23 }
4. 代码编写
4.1 实体类的编写 pojo
1 public class User { 2 private Integer id; 3 private String name; 4 private String pwd; 5 6 public User() { 7 } 8 9 public User(Integer id, String name, String pwd) { 10 this.id = id; 11 this.name = name; 12 this.pwd = pwd; 13 } 14 15 public Integer getId() { 16 return id; 17 } 18 19 public void setId(Integer id) { 20 this.id = id; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void setName(String name) { 28 this.name = name; 29 } 30 31 public String getPwd() { 32 return pwd; 33 } 34 35 public void setPwd(String pwd) { 36 this.pwd = pwd; 37 } 38 39 @Override 40 public String toString() { 41 return "User{" + 42 "id=" + id + 43 ", name='" + name + '\'' + 44 ", pwd='" + pwd + '\'' + 45 '}'; 46 } 47 }
4.2 Dao接口 UserDao.interface
1 public interface UserDao { 2 List<User> getUserList(); 3 }
4.3 接口实现类 UserMapper.xml,由之前的UserDaoImpl转变为一个Mapper的配置文件。
namespace绑定一个Dao或Mapper接口,用于连接接口和接口实现类
返回值类型需要些全限定类名
全限定类名:包名+类名
id值为Dao接口写的方法名
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 <!-- nameSpace绑定一个Dao或Mapper接口--> 6 <mapper namespace="com.dz.dao.UserDao"> 7 <!-- 返回值类型为:全限定类名--> 8 <select id="getUserList" resultType="com.dz.pojo.User"> 9 select * from mybatis.user 10 </select> 11 </mapper>
4.4 测试
1 public class UserDaoTest { 2 @Test 3 public void test() { 4 //获取SqlSession对象 5 SqlSession sqlSession = MybatisUtils.getSqlSession(); 6 //方式一:getMapper 7 UserMapper userDao = sqlSession.getMapper(UserMapper.class); 8 List<User> userList = userDao.getUserList(); 9 for (User user : userList) { 10 System.out.println(user); 11 } 12 //关闭getSession 13 sqlSession.close(); 14 }
4.5 注意
Maven由于它的约定大于配置,可能在开发过程中遇到我们写的配置文件,无法被导出或者生效的问题,尝试在Maven中加上如下配置。
1 <!--在build中配置resources,来防止我们资源导出失败的问题--> 2 <build> 3 <resources> 4 <resource> 5 <directory>src/main/resources</directory> 6 <includes> 7 <include>**/*.properties</include> 8 <include>**/*.xml</include> 9 </includes> 10 <filtering>true</filtering> 11 </resource> 12 13 <resource> 14 <directory>src/main/java</directory> 15 <includes> 16 <include>**/*.properties</include> 17 <include>**/*.xml</include> 18 </includes> 19 <filtering>true</filtering> 20 </resource> 21 </resources> 22 </build>