MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。由於MyBatis 能夠對配置和原生Map使用簡單的 XML 或註解來對參數進行設置。java
這裏先用一個小的例子來過一邊mybatis的流程。mysql
基本必須的目錄結構以下: spring
mybatisMapper.xml算是用來自定義SQL語句,這也是Mybatis的相比於相似於解耦的操做。更多的映射語句在www.w3cschool.cn/mybatis/f4u…中可自行查詢使用。sql
<?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="main.java.user">
<select id="user" resultType="user">select * from user</select>
</mapper>
複製代碼
在Mybatis.xml中配置Servlet映射和mapper數據庫
<?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>
<environments default="development">
<environment id="development">
<!--環境的配置,在這裏選擇了JDBC-->
<transactionManager type="JDBC"/>
<!--數據庫鏈接池,配置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/user?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<!--配置映射的文件-->
<mappers>
<mapper resource="mapper/mybatisMapper.xml"/>
</mappers>
</configuration>
複製代碼
實體類的編寫,以用戶爲例apache
import java.sql.Struct;
import java.util.HashMap;
import java.util.List;
public class user {
private int uid;
private int source;
private List<user> list;
public List<user> getList() {
return list;
}
public void setSource(int source) {
this.source = source;
}
public void setList(List<user> list) {
this.list = list;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
@Override//在這裏重寫tostring不是必要的
public String toString() {
return "user{" +
"uid=" + uid +
", source=" + source +
'}';
}
}
複製代碼
測試類,這裏用select語句查詢表中已提早存放入的信息bash
import com.mysql.cj.Session;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestDome {
@Test
public void testDome1() throws IOException {
// 初始化mybatis的配置環境
String source="mybatis.xml";
InputStream in= Resources.getResourceAsStream(source);
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//打開和數據庫之間的會話
SqlSession session=factory.openSession();
List<user> re=session.selectList("user");
//存放結果
for(user user: re){
System.out.println(user);
}
session.close();//關閉會話
}
}
複製代碼
最關鍵的是採用了固有的類的org.mybatis.spring.support.SqlSessionDaoSupport的提供SqlSession,代碼以下:session
public class BaseDao extends SqlSessionDaoSupport {
//使用該父類方法中的sqlSessionFactory
@Autowired //自動裝配
private SqlSessionFactory sqlSessionFactory;
@Autowired
//重寫含參構造方法(沒必要須)
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory)
{
super.setSqlSessionFactory(sqlSessionFactory);
}
//執行insert
public int insert(String statement, Object parameter) {
return getSqlSession().insert(statement, parameter);
}
//執行更新
public int update(String statement) {
return getSqlSession().update(statement);
}
//執行刪除
public int delete(String statement) {
return getSqlSession().delete(statement);
}
//獲取到connection對象,方便以後用的其餘操做
public Connection getConnection() {
return getSqlSession().getConnection();
}
複製代碼
其次是用依賴注入的方法來將數據庫的連接的配置注入到類中(相關的配置信息是存放在datsource中的,也能夠經過xml來配置或者經過 ANNOTION來實現),以下:mybatis
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
複製代碼
1)SqlSessionFactory類在二者中都存在app
2)前者用SqlSessionFactoryBean生成SqlSessionFactory,後者則使用 SqlSessionFactoryBuilder
3)前者使用SqlSessionTemplate,後者使用SqlSession,實際上這二者差異不大,只是子類中的方法和父類中的方法的差異,也就是像不一樣名字的對象中的方法,其實是一致的