导包:
导入核心包,依赖包和数据驱动包。
创建一个src文件夹,将我们需要的导入的包放到这里,然后建立关联。
创建核心配置文件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>
<!--
每个环境都代表对应一个数据库连接
environments:环境(们)
-->
<!--引入 db.properties文件-->
<properties resource="db.properties" />
<environments default="development">
<!-- 真实数据库环境【用户】 -->
<environment id="development">
<transactionManager type="JDBC" />
<!--dataSource:数据源(连接池) -->
<dataSource type="POOLED">
<!--连接数据库的四大金刚-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 读取SQL的映射文件 -->
<mapper resource="cn/itsource/domain/ProductMapper.xml" />
</mappers>
</configuration>
然后创建映射文件XxxMapper.xml:
<?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">
<!--
namespace:命名空间(一个domain对应一个这个xml)
-->
<mapper namespace="cn.itsource.domain.ProductMapper">
<!--
如果到时候想找到这条SQL: namespace+id
等会要找到它:cn.itsource.domain.ProductMapper.findOne
parameterType:代表传参类型
long -> Long _long -> long
resultType:返回的某一个条数的类型(必需写全限定名)
-->
<select id="findOne" parameterType="long" resultType="cn.itsource.domain.Product" >
select * from product where id = #{id}
</select>
</mapper>
完成一些基本的增删改查功能:
@Override
public Product findOne(Long id) {
try {
//1.读取核心配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//2.创建一个对象:SqlSessionFactory 相当于咱们JPA:EntityManagerFactory
// SqlSessionFactoryBuilder:构造者模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//3.创建一个对象:SqlSession 相当于当前JPA:EntityManager
SqlSession session = factory.openSession();
//4.session操作数据库(读取数据)
/**
* 方式中有两个值:
* 第一个值(statement):找SQL的字符串
*/
Product product = session.selectOne("cn.itsource.domain.ProductMapper.findOne",id);
return product;
} catch (Exception e) { //注意,不要用IO异常(很多错看不出来)
e.printStackTrace();
}
return null;
}
MybatisCrud:
因为有很多代码是重复的,所以我们可以抽取一个工具类,将重复的代码写进去,方便调用
public class MyBatisUtil {
private MyBatisUtil(){}
private static SqlSessionFactory sessionFactory;
//在静态代码块中创建SqlSessionFactory对象
static {
try {
sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
//返回SqlSession对象
public static SqlSession openSession(){
return sessionFactory.openSession();
}
}