(一)、什么是Mybatis?
1.基本介绍
https://mybatis.org/mybatis-3/zh/index.html
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2.历史进程
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
3.如何获得Mybatis?
(1).Github获取
(2).Maven获取
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency>
3.什么是持久化
(1).数据持久化: 就是将程序的数据在持久状态和顺势状态转换的过程。
- 内存。断电就失去
- 数据库。 io持久化数据
(2).有一些对象,不能让他丢掉;–》比如支付宝里面的金额。
(3).内存太贵了。
4.为什么需要持久层
(1).Dao层 ,Service层, Controller层…
- 完成持久化工作的代码块
- 层界限十分明显
5.为什么要使用Mybatis?
- 方便
- 传统的JDBC代码太复杂。简化。框架
- 帮助程序员将数据存入到数据库中
- 不用Mybatis也可以,更容易上手。(技术没有高低之分)
- 简单易学,灵活,提供xml标签
最重要的一点: 使用的人多
(二)、第一个Mybatis程序
1.学习思路
搭建环境-----》导入Mybatis—》编写代码—》测试
2.搭建环境
创建一个普通的Maven项目
3.需要依赖
<!--导入依赖--> <dependencies> <!-- mybatis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> </dependencies> <!-- !--在build中配置resources–>--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
4.删除Src 创建一个Moduel
5.编写mybatis的核心配置文件(resource 创建一个.xml文件)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration核心配置文件--> <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/mybatis?useSSL=false&useUnicode=true&charEncoding=UTF8"/> <property name="username" value="root"/> <property name="password" value="121788"/> </dataSource> </environment> </environments> <!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper resource="Com/Jsxs/Dao/UserMappr.xml"/> </mappers> </configuration>
6.编写Mybatis工具类(工厂)
package Com.Jsxs.utils; 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 java.io.IOException; import java.io.InputStream; // SqlSessionFactory---->sqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { String resource = "mybatis-config.xml"; try { // 第一步: 获取SqlSessionFactory对象 InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 既然有了sqlSessionFactory,顾名思义,我们就可以从中获得SqlSession的实列了 // sqlSession完全包含了面向数据库执行SQL命令所需要的所有方法 public static SqlSession getSqlSession(){ SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; } }
7.编写代码(实体类-Dao接口-接口实现类)
- 实体类: 实体类要和属性的字段名相同,否则输出会为null
package Com.Jsxs.pojo; public class User { private int id; private String mame; private String pwd; public User() { } public User(int id, String mame, String pwd) { this.id = id; this.mame = mame; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getMame() { return mame; } public void setMame(String mame) { this.mame = mame; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
- Dao接口
package Com.Jsxs.Dao; import Com.Jsxs.pojo.User; import java.util.List; public interface UserDao { List<User> getUserList(); }
- 接口实现类由原来的UserDaoImpl转换成UserMapper.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace绑定一个对应的Dao/Mapper接口--> <mapper namespace="Com.Jsxs.Dao.UserDao"> <!-- 查询语句--> <select id="getUserList" resultType="Com.Jsxs.pojo.User"> select *from mybatis.user </select> </mapper>
8.测试
package Com.Jsxs.Dao; import Com.Jsxs.pojo.User; import Com.Jsxs.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserDaoTest { @Test public void test(){ // 第一步: 获取sqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); // 方式一: 执行SQL // UserDao userDao = sqlSession.getMapper(UserDao.class); // List<User> userList = userDao.getUserList(); // 方式二: List<User> userList = sqlSession.selectList("Com.Jsxs.Dao.UserDao.getUserList"); for (User user : userList) { System.out.println(user); } // 关闭sqlSession sqlSession.close(); } }
9.分析:
1.核心配置文件
2.UserMapper.xml文件
3.工具类链接(Utils)
10.执行SQL语句有两种方式
(1).使用sqlSession.selectList(类所在路径+实现的方法)
public void testRowBounds(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); // 类的路径+实现的方法 List<User> list = sqlSession.selectList("Com.Jsxs.Dao.UserMapper.getUserByRowBounds"); for (User user : list) { System.out.println(user); } sqlSession.close(); }
(2).使用getMapper(实现的方法.class)
@Test public void test(){ // 第一步: 获取sqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User userById = mapper.getUserById(2); System.out.println(userById); // 关闭sqlSession sqlSession.close(); }