什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
什么叫持久层,简单的来说,我们访问一个平台就会产生一定的数据,比如浏览记录等,这些数据在服务器断电的时候或者重启之后就会消失,所谓的持久就是指将数据存放在数据库中,方便后续使用。所以说MyBatis是一款持久层框架就是说它是工作在DAO层的,和数据库打交道,MyBatis封装了jdbc,使我们更方便更高效操作数据库。
什么是POJO,POJO就是一些特殊的 类 的名称,只不过这种 类 除了 get 和set 方法就没有其他的方法了。
创建第一个MyBatis程序
我们需要两个依赖架包,一个是MyBatis架包,一个是jdbc
MyBatis的架包在GitHub上有。
如:https://github.com/mybatis/mybatis-3/releases
jdbc的架包在Mysql官网
如:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-source.html
步骤
1,创建一个数据库为“test” ,然后创建一个数据表“Student”,自己添加几条数据。
2,创建一个POJO类,取名Student。
项目结构如图所示:
Student类:
public class Student {
private int id;
private String name;
private int age;
public Student(){ }
public Student(int id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{ id="+id+", name='"+name+"', age="+age+"}";
}
}
3,创建一个映射文件,用于映射Student类,取名为:StudentMapper.xml
MyBatis中,映射文件的取名一般约定为 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">
<mapper namespace="com.entity.StudentMapper">
<!--namespace 填写映射文件的类路径-->
<!--id 名称 resultType 结果集类型 parameterType 输入类型-->
<select id="selectStudent" resultType="com.entity.Student" parameterType="int">
select * from Student where id = #{id}
</select>
</mapper>
相应的意思已经标注
其中,#{id},表示一个变量占位符,parameterType即为#{id}的类型。
4,创建配置文件 conf.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 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/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载映射问价,填写映射文件路径-->
<mapper resource="com/entity/StudentMapper.xml"/>
</mappers>
</configuration>
其中:
<transactionManager type="JDBC"/>表示事务的提交方式
JDBC 表示利用JDBC 的方式处理事务,比如:commit,rollback,close
MANAGED 将事务交由其他组件去托管,比如:spring,jobss 。MANAGED 默认会关闭连接,即当一次sql语句执行完毕之后将关闭连接。 也可以选择不关闭,在后面加上 <peoperty name="closeConnection" value="false" /> 即可。
<dataSource type="POOLED">表示数据源类型
UNPOOLED 传统的jdbc模式,每次访问数据库,均需要打开,关闭等数据库操作,比较消耗性能。
POOLED 使用数据库连接池 。不严谨的说,数据库连接池就是数据库。
JNDI 从tomcat中获取一个内置的数据库连接池。
<environments default="development"> default 表明我们需要使用哪个数据库环境,即我们使用名叫development的数据库环境,是我们的本地环境。
<environment id="development"> environment标签用于设置不用的数据库环境,id名称是给不同的数据库取不同的名称。
也就是说我们可以在conf.xml文件中配置很多<environment>标签,可以有用于测试的数据库,用于开发的数据库,用于正式运行的数据库等。MyBatis如何知道我们到底要使用哪个数据库呢? 即通过 default="xxxxx"指定。
5,创建一个测试类 MyBatisTest
首先,只有SqlSession才能访问数据库,所以我们得要有SqlSession。SqlSession可以用SqlSessionFactory来创建。
因此:
5.1,将我们配置的conf.xml导入数据流中。
5.2,实例化一个SqlSessionFactory对象。
5.3,用SqlSessionFactory对象实例化一个SqlSession对象。
5.4,通过SqlSession对象的selectOne()方法,访问数据库。
SqlSession对象的很多方法的可以通过IDEA的提示看得到
selectOne() 有两个参数
第一个参数 statement 是映射文件的路径加上sql语句的id 这样即可唯一识别一个sql语句。
第二个参数是传入#{id}的值。
selectOne的返回类型也有说明,在它的映射文件StudentMapper.xml中,resultType即指明了返回值的类型。
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 java.io.IOException;
import java.io.Reader;
public class TestMyBatis {
public static void main(String[] args) throws IOException {
//加载MyBatis配置文件,访问数据库
Reader reader = Resources.getResourceAsReader("conf.xml");
//SqlSessionFactory - connection
//可以通过build的第二个值强行修改数据库环境
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//session - connection
SqlSession session = sessionFactory.openSession();
String statement = "com.entity.StudentMapper.selectStudent";
Student student = session.selectOne(statement,2);
System.out.println(student);
session.close();
}
}
运行结果如下:
至此第一个MyBatis项目完成。