我们为什么要用mybatis,jdbc不香吗?答案是确实不香,写多了jdbc你会发现,感觉代码都差不多,在写一样的,没错,使用jdbc去数据库读取数据,不仅代码冗余大,开发效率也低下;我们无非就是增删改查,为什么不封装一个工具类,只关注逻辑(前提是你能封装出来),当前我们就有一个很好的框架mybatis,它可以提高工作效率和代码性能,何故不用,那么我们就来学一学它:
MyBatis框架最早的名字叫iBatis
2001年 Clinton Begin发起一个开源项目 iBatis1.0
2005年 iBatis2.0 2010年 iBatis3.0
iBatis在这之前都是由Apache组织管理
2010年6月份 iBatis项目交由谷歌公司托管 MyBatis
2013年11月 整个项目迁移至GitHub
2019年10月 MyBatis3.5.3
MyBatis是一个持久层的框架(DAO—数据库交互)
半自动的ORM框架 Object Relational Mapping(数据库的表—
Java对象domain之间的映射关系)
- 写好的代码 导包.jar
- 在项目中配置一个文件 dbconfig.properties driver url user password
- 获取jar包中的一个对象 SqlSession
- 执行数据库操作 insert update delete selectOne selectList
- 调用如上的方法 提供sql 提供sql上面的问号信息 如果是查询 提供查询以后返回的对象类型
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
知识总结:
1. MyBatis是一个持久层的框架
2. MyBatis底层封装的是JDBC
3. MyBatis是一个半自动的ORM (Object Relational Mapping(Java的domain对象----数据库表)
4. 简单发展历程
2001年 Clinton Begin 发起一个开源项目,放在Apache组织的开源项目中
最开始叫做ibatis
2010年 被谷歌公司托管 名字改为MyBatis
2013年 整体迁移至GitHub管理
configuration.xml文件(建议自己手写一遍):
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
<mappers>
mappers>
configuration>
创建工具类:
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
static {
String resource = "configuration.xml";
try {
InputStream re = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(re);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
创建方法:
public interface UserMapper {
//定义插入方法
void insert();
}
配置mapper(其实相当于实现类):
<mapper>
<insert id="insert">
INSERT INTO USER VALUES(NULL,'qifeng','111')
insert>
mapper>
测试一下:
public class Test {
public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
int re = sqlSession.insert("insert");
}
}
发现报错了:
大家可还记得我们在核心配置文件还有一个mapper,找到一看,发现没有配置:
配置一下:
<mappers>
<mapper resource="com/dao/UserMapper.xml"/>
mappers>
没有报错,但是数据却没有插进去,咋搞滴????
经查资料,发现,MyBatis会自动开启一个事务,SqlSession对象默认是手动提交事务 如果想要自动 openSession(true)或者sqlSession.commit();
public class Test {
public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
int re = sqlSession.insert("insert");
sqlSession.commit();
}
}