核心配置文件mybatis.cfg.xml
在裏面配置
util MyBatisUtil.java
package com.yxxy.mybatis.util;
import java.io.InputStream;
public class MyBatisUtil{
private static SqlSessionFactory sqlSessionFactory=null;
private static SqlSession sqlSession=null;
private static String resource=null;
public static SqlSessionFactory getSqlSessionFactory {
resource="mybatis.cfg.xml";
InputStream inputStream=null;
try{
inputStream=Resources.getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception e){
e.printStackTrace();
}
return sqlSessionFactory;
}
mapper UserMapper.java
package com.yxxy.mybatis.mapper;
import com.yxxy.mybatis.entiey.User;
public interface UserMapper{
User selectUserById(Integer id);
}
使用mybatis框架時根本不需要自己創建實現類,只有接口
test Test.java
package com.yxxy.mybatis.test;
import org.apache.ibatis.session.SqlSession;
public class Test{
public static void main(String[] args){
SqlSession sqlsession=MyBatisUtil.getSession();//打一個斷點,通過debug模式啓動
UserMapper userMapper=sqlsession.getMapper(UserMapper.class);
User user=userMapper.selectUserById(1);
System.out.println(user);
MyBatisUtil.closeSession();
}
}
SqlSession sqlsession=MyBatisUtil.getSession();//打一個斷點,通過debug模式啓動
UserMapper userMapper=sqlsession.getMapper(UserMapper.class);//使用mybatis框架時根本不需要自己創建實現類,只有接口
首先要讀取配置文件mybatis.cfg.xml和UserMapper.xml
一個加載了數據庫連接信息,一個讀取我們編寫的SQL信息
分析完源碼後,自己寫一個這樣的框架
1、解析配置文件–UserMapper.xml的解析工具類
硬編碼:直接寫死在那裏
2、實現動態代理–MapperProxy
3、加載代理對象並執行SQL–SqlSession
4、封裝JDBC–Executor接口和它的實現SimpleExecutor
5、mybatis的mapper接口–UserMapper類
6、映射數據庫實體–User類
UserMapper.xml
namespace
map key-value
MapperProxy
實現的invokahandler
invoke方法method,args
SqlSession
T getMapper
T selectOne(String sql,)
Executor
query
總共八個類實現
新建項目Java Project mybatis_hello
->將mysql的jar包導入
->新建包com.yxxy.mybatis.entity
User.java
UserMapperXml.java
public class UserMapperXml{
//模擬UserMapper.xml的命名空間
public static final String namespace=“com.yxxy.mybatis.mapper.UserMapper”;
public static Map<String,String> map=new HashMap<>();
static{//模擬
->新建包com.yxxy.mybatis.executor
Excutor.java
public class Excutor{
SimpleExcutor.java
封裝JDBC實現CURD
public query(String sql,Object parameter){
Connection connection=null;
PrepareStatement prepared
private Connection getConnection(){
String driver="";
String url="";
String username="";
String password="";
Class.forName(driver);
Connection connection
->新建包com.yxxy.mybatis.mapper
UserMapper.java
public interface UserMapper{
User selectUserById(Integer id);
MapperProxy.java
public class MapperProxy implements InvocationHandler{
private SqlSession sqlSession
public Objecy invoke(Object proxy,Method method,Ob){
if(){
String sql=UserMapperXml.map.get();
session SqlSession.java
加載代理對象執行SQL的類
public class SqlSession{
private Executor executor=new SimpleExecutor();
public T selectOne(String statement,Object patameter){
return executor.query(statement,parameter);
}
public T getMapper(Class clazz){
return Proxy.newIn