- 1.简介
- 1.1什么是Mybatis
- 1.2持久化
- 1.3持久层
- 1.4为什么需要Mybatis
- 2.第一个Mybatis程序
- 2.1搭建环境
- 2.2创建模块
- 2.3编写代码
- 2.4测试
- MyBatis 是一款优秀的持久层框架。
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。
- 2013年11月迁移到Github。
如何获得Mybatis?
- maven仓库
-
Github:Releases · mybatis/mybatis-3 · GitHub
-
中文文档的地址:MyBatis中文网
数据持久化
- 持久化就是将程序的数据再持久的状态和瞬时的状态转化的过程
- 内存:断电即失
- 数据库(jdbc),io文件持久化。
为什么需要持久化
- 有些对象数据不能失去
- 内存太贵
Dao层,Service层,Controller层…
- 完成持久化工作的代码
- 层的界限十分明显
- 帮助程序员将数据存入数据库中
- 使用简便
- 简化了传统JDBC复杂的代码
- 优点:
- 简单易学
- 灵活
- sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射。
- 提供对象关系映射标签,支持对象关系组建维护。
- 提供xml标签,支持编写动态sql。
思路:搭建环境–>导入Mybatis–>编写代码–>测试
2.1搭建环境1.搭建数据库
2.新建项目
2.1新建一个普通的maven项目
2.2删除src目录
2.3导入maven依赖
2.2创建模块mysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.5.2 junit junit 4.11
- 编写mybatis的核心配置文件(在新模块的resources目录下新建一个mybatis-config.xml文件进行配置)
注:mapper里面的路径是用/分隔的
- 编写mybatis的工具类
//sqlSessionFactory -->sqlsession 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; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { InputStream inputStream = null; try { //使用mybatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }2.3编写代码
- 编写实体类
//实体类 public class User { private int id; private String username; private String pwd; public User() { } public User(int id, String username, String pwd) { this.id = id; this.username = username; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
- Dao接口
import pojo.User; import java.util.List; public interface UserDao { ListgetUserList(); }
- 接口实现类:由原来的UserDaoImpl(jdbc)转换成一个Mapper配置文件
注:namespace、id、resultType一定要写对,不然会报java.lang.ExceptionInInitializerError
2.4测试select * from mybatis.user
- 注意当测试报错为:org.apache.ibatis.binding.BindingException: Type interface dao.UserDao is not known to the MapperRegistry.
要去注意在mybatis-config.xml文件里面是否有配置Mapper这个映射
- 注意当报错为:java.lang.ExceptionInInitializerError
就要去注意pom.xml中是否配置上build的配置,因为没有build配置则xml无法在target中生成:
src/main/resources true ***.properties src/main/java true ***.properties
- 使用junit进行测试
@Test public void test(){ //第一步:获得sqlsession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //方式一:getMapper获取mapper接口 UserDao mapper = sqlSession.getMapper(UserDao.class); ListuserList = mapper.getUserList(); //方式二: List userList = sqlSession.selectList("dao.UserDao.getUserList"); for (User user: userList) { System.out.println(user.toString()); } //关闭sqlsession sqlSession.close(); }