导入jar包
MyBatis核心jar包和所依赖的jar包,mysql驱动包,junit测试的包
定义实体类
以后对于id的定义为Integer,方便判断为空
属性和成员变量的区别
属性:get或set方法的方法名去掉set或get后,剩余部分首字母小写,就是属性,大多数情况下看到的,即使成员变量,又是属性,成员变量是私有的,属性是公开的。
建立数据库表
关于数据库表的导入和导出(navicat)
导出:右击数据库,点击转储sql文件,生成以库名.sql的sql文件
导入:选择一个数据库,点击运行sql文件,生成相应的表,也可以在别的数据库中导入相应的表,然后再导出时就是该库的库名.sql;
如果想要直接在navicat创建该库,并导入该库中的sql文件,有两种方式,方式一:在Navicat中建立对应的数据库,库名一致,然后导入。方式二:打开已导出的sql文件,在开头写上创建数据库的语句:
create database if not exists 库名;
use 库名;
定义dao接口和映射文件
映射文件名随意,放在dao包中
添加约束
解决xml没有自动提示
为了解决在没有联网时,xml没有自动提示,首先将mybatis-3-config.dtd和mybatis-3-mapper.dtd下载到本地,
上述配置的意思是:当从网络上寻找mybatis-3-mapper.dtd,从本地上寻找。
namespace的作用
用于区分不同命名空间中的同名SQL映射的id,可以在传递参数时使用命名空间丶id,也可以将两个不同命名空间的相同的id改成不同
<?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="test">
<insert id="insertStudent">
insert into student(name, age, score) values(#{name}, #{age}, #{score});
</insert>
</mapper>
定义主配置文件
配置文件中的符号
+:表示大于等于一
?:最多有一个(小于等于一)
*:大于等于零
什么符号也没有:有且仅有一个
两个标签之间用逗号隔开:表示是有顺序的
environments 的理解
为了操作的方便,environments标签中可以写多个environment,而每个environment都有id属性,environments有default属性,default属性的值是environment的id,就是选择运行环境是哪一个,环境可以有多个,比如一个是测试环境,一个是上线以后的环境,到时执行方便环境之间的切换,只需要将其id赋值给default。
<?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>
<properties resource="jdbc.properties"></properties>
<!-- <typeAliases>
<package name="com.jpg.beans"/>
</typeAliases> -->
<environments default="insertEM">
<environment id="insertEM">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/jpg/dao/mapper.xml"/>
</mappers>
</configuration>
定义dao实现类
获取SqlSession对象:SqlSession对象有SqlSessionFactory对象的openSession方法创建,SqlSessionFactory对象由SqlSessionFactoryBuilder的build方法创建
以插入为例,在执行sqlSession.insert(参数1,参数2);
参数1表示映射文件中insert标签的id,参数2表示需要传递的参数,在映射文件中,parameterType的值是参数2的类型
insert into student(name, age, score) values(#{name}, #{age}, #{score});
其中#{}中的内容是传过来的参数的属性名,因为底层会利用反射,根据这些属性名改装成get方法,从而获取属性的值
定义工具类
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
public static SqlSession getSqlSession() {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
return sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}