第一个MyBatis项目
基本项目
导入jar包
我们除了需要导入MyBatis的核心Jar包及依赖Jar包外,还需要导入MySql的驱动Jar包,JUnit测试的Jar包。
MyBatis的核心Jar包与依赖Jar包,均在MyBatis框架的解压目录下。其具体的下载教程与下载链接博主已经整合在 *“MyBatis下载与简介” 这篇博客中,需要的读者可以前往进行选择下载。
博主这里演示时使用的远古版本3.2.7,不过用于演示与其他版本大同小异。
在数据库中生成表结构
博主在这里建立了film表,下图是具体的表结构:
定义实体类
public class Film {
private Integer id;
private String name;
private double price;
/*Constructors*/
/*Setter and Getter*/
/*toString*/
}
定义接口
public interface IFilmDao {
void insertFilm(Film film);
}
定义映射文件
映射文件,一般称作mapper,主要是用来映射Dao层SQL语句的。映射文件一般放在dao包下,因此文件命名需要与对应的Dao层接口名相同,所以这里我们的mapper文件名就叫做IFilmDao.xml。
映射文件的约束文件一般存放于MyBatis核心jar包的org.apache.Ibatis.builder.xml包中存放。当然主配置文件的约束文件也在这里存放。
在映射文件中添加约束,即配置文件头,可以从MyBatis框架中的文档mybatis-x.x.x.pdf中找到:
博主这里已经从文档中提取出来了,大家可以直接复制使用:
<?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.mybatis.dao.IFilmDao">
<insert id="insertFilm" parameterType="com.mybatis.beans.Film">
insert into film(name, price)
values (#{name}, #{price});
</insert>
</mapper>
#{}写入的是Film类型参数的属性名
这里需要注意各个属性的值:
namespace:因为我们将mapper文件放在了dao包下,因此namespace必须是所映射接口的全限定名。
id:必须是接口中对应的方法名。
parameterType:参数类型,框架会自动根据用户执行的SqlSession方法中的参数自动检测到,所以一般我们不用指定parameterType属性
定义主配置文件
与配置映射文件一样,主配置文件的约束也可以在MyBatis框架中的文档mybatis-x.x.x.pdf中找到。
这里主配置文件名可以随便起,博主这里叫做mybatis.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>
<!-- 和spring整合后 environments配置将废除-->
<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/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<!--注册映射文件-->
<mappers>
<mapper resource="com/mybatis/dao/IFilmDao.xml"/>
<!--<mapper package="com.mybatis.dao"/>-->
</mappers>
</configuration>
定义Dao层实现
/*imports*/
public class FilmDaoImpl implements IFilmDao {
private SqlSession sqlSession;
@Override
public void insertFilm(Film film) {
try {
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession对象
sqlSession = sessionFactory.openSession();
//操作
sqlSession.insert("insertFilm", film);
//提交事务
sqlSession.commit();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (sqlSession != null)
sqlSession.close();
}
}
}
定义测试类
public class Test {
public void test01() {
IFilmDao dao = new FilmDaoImpl();
Film film = new Film("阿拉丁", 29.5);
dao.insertFilm(film);
}
}
优化配置及项目
我们的主配置文件名可以随意命名,其主要完成以下几个功能:
- 注册存放DB连接四要素的属性文件
我们可以在mybatis.xml同路径下创建jdbc.properties属性文件。
这样在主配置文件里就可以直接注册配置文件并连接数据池。jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis jdbc.user=root jdbc.password=password
- 注册实体类的全限定性类名的别名
这样在映射文件中实现SQL语句时,接受与返回的参数类型我们就可以直接使用小写类名来代替冗长的全限定名了。<typeAliases> <package name="com.mybatis.beans"/> </typeAliases>
- 配置MyBatis运行环境,即数据源与事务管理器
- 注册映射文件
我们在注册多个映射文件时,可以使用package来选中一个包注册,mybatis会自动扫描内部的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>
<!--注册属性文件-->
<properties resource="jdbc.properties"/>
<!--注册别名-->
<typeAliases>
<package name="com.mybatis.beans"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 事务管理-->
<transactionManager type="JDBC"/>
<!-- 数据库连接池-->
<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/mybatis/dao/IFilmDao.xml"/>-->
<!--多个映射文件时-->
<mapper package="com.mybatis.dao"/>
</mappers>
</configuration>
映射文件
相应的映射文件也会简化成这个样子:
<?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.mybatis.dao.IFilmDao">
<insert id="insertFilm" parameterType="film">
insert into film(name, price)
values (#{name}, #{price});
</insert>
</mapper>