MyBatis学习笔记—基础知识(一)
Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身。
他有两种实现方式:xml与注解。
配置文件xml
Mybatis 是对JDBC的封装,也就是说,JDBC该怎样Mybatis 一个也少不了,只是将一些代码以配置文件的方式来呈现。都是固定写法,定义一个配置文件mybatis-config.xml,将他放到resources中:
<?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>
<!-- 其他-->
</configuration>
连接数据库
JDBC需要加载驱动,连接数据库,Mybatis 也不例外,固定写法。添加到configuration中。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/store?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
注意改成自己的数据库,用户名和密码。
编写sql
使用Mybatis编写sql语句需要映射器,他将极大方便我们 sql结果与实体类的映射。
在jdbc中,sql代码主要在dao层以及接口的实现来完成的,Mybatis当然也需要dao层,但是优化了实现,它不需要实现类了。
定义一个接口ProduceMapper,和实体类Produce,具体不需要在意,重要的是过程。
public interface ProduceMapper {
public List<Produce> getAllPro();
//其他
}
他将sql代码也放入配置文件中了,在定一个配置文件ProduceMapper.xml,将他放到resources/mapper中,具体如下:
<?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="com.zsy.mapper.ProduceMapper">
<select id="getAllPro" resultType="Produce">
SELECT * FROM Produce
</select>
</mapper>
mapper就是我们的映射器,只要实体类与数据库列名相同,就会自动映射,而不需要想jdbc的一个个代码实现。
让后将我们的mpper文件引入config中:
<mappers>
<mapper resource="mapper/ProduceMapper.xml"/>
</mappers>
这样我们完成配置文件的编写,但是没有java程序,配置文件是没有作业的,下面开始编写代码。
java代码
public class Test {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
ProduceMapper mapper = session.getMapper(ProduceMapper.class);
mapper.getAllPro();
}
}
首先将文件变成流式数据Resources.getResourceAsStream()方法得到InputStream。SqlSessionFactory是MyBatis中的一个重要的对象,它是用来创建SqlSession对象的,而SqlSession用来操作数据库的。
SqlSessionFactory对象可以通过SqlSessionFactoryBuilder来获得,而SqlSessionFactoryBuildr则可以从XML配置文件或预先定制的Configuration实例构建出SqlSessionFactory的实例。
getMapper获取接口模板,就可以调用方法了。