疫情期間為了充實自己(笑,學習一下 SSM 中的 M
疫情期間為了充實自己(笑,學習一下 SSM 中的 M
MyBatis 簡介#
根據 Github 上開源的 Repository 的 README 上的說明:
The MyBatis SQL mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.
MyBatis SQL 是一個當編寫面對對象應用時使用關係型數據庫更簡單的一個映射框架,MyBatis 使用 XML 或者註解的方法結合對象和 sql 語句或存儲過程,MyBatis 相比於對象關係映射工具,簡單是它最大優勢所在。
所以,很簡單的說,MyBatis 就是一個在程序中方便我們使用數據庫的工具,應該是和我們公司目前在用的自己封裝一個東西叫 DE 的差不多。都是一個對 JDBC 進行封裝的 ORM 持久層框架,據了解還有另外一款叫 Hebernate。他倆的區別主要是 Mybatis 用原生 sql,而 Hebernate 是自己封裝了一套語句,叫 HQL。相較於我們公司的那玩意更像 Hebernata,但是做得更垃圾,自定義查詢語句也就算了,竟然連取餘功能都沒有,記得前一陣要寫一個接口查詢身份證號中的年齡以及性別和數據庫實際存的不符的,這個判斷性別可真把我難壞,我不要求一個’%’搞定,你起碼搞個 MOD () 之類的吧,最後還得我用 decode 把 0-9 枚舉了一遍,自定義奇(男)偶數(女)可還行。鑑於我們公司那玩意太。。。了,所以了解一下這個東東還是很好地。
初識 Mybatis#
學習一個新的框架當然要從搭建框架開始喽,暫時接觸到的都是為了方便直接通過 Maven 往工程裡添加一個依賴就行了,會自動加載 jar 包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
Show me your code!#
接下來就是最令人興奮的碼碼環節
首先需要編寫一個簡單的實體汽車 POJO
package com.MyBatis;
public class Car {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然後增加一個 map 的接口,通過註解將實體類和數據庫對應起來
package com.Mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.how2java.Mybatis.Car;
public interface CarMapper {
@Insert(" insert into car ( name ) values (#{name}) ")
public int add(Car Car);
@Delete(" delete from car where id= #{id} ")
public void delete(int id);
@Select("select * from car where id= #{id} ")
public Car get(int id);
@Update("update car set name=#{name} where id=#{id} ")
public int update(Car Car);
@Select(" select * from car ")
public List<Car> list();
}
添加 Mybatis 的總配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package />
</typeAliases>
<environments default="development">
<environment>
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property />
<property />
<property />
<property />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/Mybatis/pojo/Car.xml"/>
<mapper/>
</mappers>
</configuration>
編寫一個測試 CURD 的測試類
package com.how2java;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 com.Mybatis.mapper.CarMapper;
import com.how2java.pojo.Car;
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
CarMapper mapper = session.getMapper(CarMapper.class);
// add(mapper);
// delete(mapper);
// get(mapper);
// update(mapper);
listAll(mapper);
session.commit();
session.close();
}
private static void update(CarMapper mapper) {
Car c= mapper.get(8);
c.setName("修改了的Car名稱");
mapper.update(c);
listAll(mapper);
}
private static void get(CarMapper mapper) {
Car c= mapper.get(8);
System.out.println(c.getName());
}
private static void delete(CarMapper mapper) {
mapper.delete(2);
listAll(mapper);
}
private static void add(CarMapper mapper) {
Car c = new Car();
c.setName("新增加的Car");
mapper.add(c);
listAll(mapper);
}
private static void listAll(CarMapper mapper) {
List<Car> cs = mapper.list();
for (Car c : cs) {
System.out.println(c.getName());
}
}
}
得,基礎的 CURD 就大工告成了,其實不使用註解也可用 xml 的配置文件來做數據庫和實體對象的中間層,太麻煩了。我估計正式開發也沒人用那個吧,都是用註解應該,明天問問其他的朋友們。
感謝 how2j 站長!