MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。由于MyBatis 能够对配置和原生Map使用简单的 XML 或注解来对参数进行设置。java
这里先用一个小的例子来过一边mybatis的流程。mysql
基本必须的目录结构以下: spring
更多的映射语句在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,实际上这二者差异不大,只是子类中的方法和父类中的方法的差异,也就是像不一样名字的对象中的方法,其实是一致的