mybatis從18年10月開始接觸,一直有使用,和斷斷續續的學習,但是不敢說完全掌控,隔一段時間不用,就忘了如何搭建。這段時間學習重心放到JavaEE,我決定完整的學習下SSM,記錄下我的歷程,以后忘了回來翻一翻,比寫成本地文檔要方便。
mybatis也可以在普通的Java項目中使用,不一定要Web項目。
mybatis核心組件:
- SqlSessionFactoryBuilder()構造器:它會根據配置或代碼來生成SqlSessionFactory,采用的是分步構建的Builder模式
- SqlSessionFactory 工廠對象:依靠它來生成SqlSession,使用的是工廠模式;
- SqlSession 會話:一個即可以發送SQL執行返回結果,也可以獲取Mapper接口。在現有的技術中,一般我們會讓其在業務邏輯代碼中消失,而使用的是mybatis提供的SQL Mapper 接口編程技術,它能提高代碼的可讀性和可維護性。
- SQL Mapper 映射器:Mybatis新設計的組件,它有一個Java接口和XML文件(注解)構成,需要給出相應的SQL和映射規則。它負責發送SQL去執行並返回結果。
以上這段精辟的文字摘自《JavaEE互聯網輕量級框架整合》。
使用mybatis第一步,在src下建立一個“mybatis-config.xml”文件,xml文件的內容不需要記住,可以從mybatis 的介紹文件中拷貝,介紹文件在下載的包中。
拷貝后修改為自己的相關信息;<mappers></mappers>標簽中放的是 映射器的xml文件位置。所謂映射器就是一個dao層下一個xx接口和xx.xml文件組成一個映射器。
第二步:建立dao層、pojo層,和其中的文件
public interface StudentMapper { List<Student> getList(); int add(Student student); int delete(int id); int update(Student student); }
<?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.houjun.dao.StudentMapper"><!-- namespace是綁定的接口全限定名 --> <select id="getList" resultType="student"> select * from student </select> </mapper>
package com.houjun.pojo; public class Student { private String name; private int id; private int age; private int tig; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getTig() { return tig; } public void setTig(int tig) { this.tig = tig; } @Override public String toString() { return "Student [name=" + name + ", id=" + id + ", age=" + age + ", tig=" + tig + "]"; } }
第三步:測試成果
自己找個地新建一個測試類
public static void main(String[] args) throws SQLException { SqlSessionFactory sessionFactory = null; try { InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession session = sessionFactory.openSession(); Connection connection = session.getConnection(); Statement createStatement = connection.createStatement(); ResultSet executeQuery = createStatement.executeQuery("select * from student"); //回憶初學所用的原生JDBC寫法 while (executeQuery.next()) {//一行一行循環 System.out.println(executeQuery.getInt(1) + executeQuery.getString(2) + executeQuery.getString(3)); } System.out.println(); //方式一 推薦 StudentMapper mapper = session.getMapper(StudentMapper.class); List<Student> list = mapper.getList(); for (Student student : list) { System.out.println(student); } //方式二 // List<Student> selectList = session.selectList("select * from student");不能直接運行sql語句 List<Student> selectList = session.selectList("com.houjun.dao.StudentMapper.getList");//參數是映射器xml文件中的方法 for (Student student : selectList) { System.out.println(student); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }