一、刚入Mybatis其实是很郁闷的,苦于jar包的下载,在github上只能眼睁睁的看着,而下载速度受限,速度几乎没有,只能求而次之好不容易在其他平台下了一个老版本mybatis-3.4.6.jar,在这里放网盘了,提取码:j9gt。
二、关于mybatis的初次使用的第一感觉是嗯~ o(* ̄▽ ̄*)o,还不错,sql语句和java代码分离了,降低了耦合。就是配置有点多,初步测试了一把CRUD操作
具体使用和spring差不多一样的步骤了
1、导包
在导包这里我导入了三个包分别是mysql驱动包,mybatis包,和log4j包:mysql-connector-java-5.1.46.jar、mybatis-3.4.6.jar、log4j-1.2.17.jar(日志框架包的使用要依赖类路径下的一个log4j.properties或者log4j.xml文件,都是有固定配置的,这个包也可不导入)
2、写配置
mybatis的配置主要分为两个部分,一个是mybatis的主体配置,同样放在类路径下,可以命名为mybatis-config.xml这个配置文件是引导mybatis运行,连接向哪个数据库的。另一个配置部分就是要实现的映射器的映射配置文件了,可以与dao层接口类相关联,管理每一个数据库操作方法。
mybatis主题配置文件内容如下:
<?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://127.0.0.1:3306/testmysql?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 引入我们自己编写的每一个接口的实现文件:映射器实现文件,resource:类路径下的文件 -->
<mappers>
<mapper resource="DeptDao.xml"/>
</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">
<!--namespace是名称空间对应每一个映射器的全类名-->
<mapper namespace="com.feilonkji.dao.DeptDao">
<!-- public Dept getDept(Integer deptNo); 下方的select对应此方法 -->
<select id="getDept" resultType="com.feilonkji.bean.Dept">
<!-- sql语句不要写分号,写了分号有时候会报异常 -->
select * from dept where deptNo=#{deptNo}
</select>
<!-- public int updateDept(Dept dept); -->
<update id="updateDept">
<!-- 增删改不需要写返回值类型,如果对应映射器的返回值是int,会自动判断返回影响了多少行
如果返回值是boolean型,同样会自动判断如果影响了0行则会返回false,否则返回true
方法参数时对象时取值直接写相应的属性名
-->
update dept set dname=#{dName} where deptNo=#{deptno}
</update>
<!-- public int addDept(Dept dept); -->
<insert id="addDept">
insert into dept(deptno,dname,loc) values(#{deptno},#{dName},#{loc})
</insert>
<!-- public int removeDept(Integer deptNo); -->
<update id="removeDept">
delete from dept where deptno=#{deptNo}
</update>
</mapper>
上面的映射器配置文件只实现了基本的crud操作,对应接口中的每一个方法,自己配置的映射器配置实现文件一定要在主体配置文件中注册,也就是上面的<mappers>引入自己配置的实现文件。
使用的映射器DeptDao:
public interface DeptDao {
/**根据部门编号获取部门对象*/
public Dept getDept(Integer deptNO);
/**添加部门*/
public int addDept(Dept dept);
/**修改部门信息*/
public int updateDept(Dept dept);
/**删除部门*/
public boolean removeDept(Integer deptNo);
}
3、测试
在测试这里又有几个步骤
1、首先要根据mybatis主体配置文件获取SqlSessionFactory(会话工厂对象)。
2、从SqlSessionFactory中获取SqlSession
3、再通过SqlSession获取要实现的映射器的实例对象,然后运行相应方法即可
测试例子如下:
package com.feilonkji.test;
import static org.junit.jupiter.api.Assertions.*;
import java.io.IOException;
import java.io.InputStream;
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 com.feilonkji.bean.Dept;
import com.feilonkji.dao.DeptDao;
class Test {
@org.junit.jupiter.api.Test
void test() throws IOException {
//1、从配置文件中创建一个SqlSessionFactory
//SqlSessionFactory:是SqlSession工厂,负责创建SqlSession对象
//SqlSession相当于sql会话(代表和数据库的一次会话)
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2、获取和数据库的一次会话
SqlSession openSession = sqlSessionFactory.openSession();
//3、使用SqlSession操作数据库
Dept dept;
try {
DeptDao deptDao = openSession.getMapper(DeptDao.class);
dept = deptDao.getDept(10);
} finally {
openSession.close();
}
System.out.println(dept);
}
}
关于log4j.jar的使用,我在类路径下添加了一个log4j.properties配置文件,内容如下:
#
log4j.rootLogger=ERROR, stdout
# MyBatis 这个地方就是填要监听的映射器的路径
log4j.logger.com.feilonkji.dao=TRACE
# \u63A7\u5236\u53F0\u8F93\u51FA
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
到此为止就配置完毕啦。mybatis的helloworld测试就完成了。