使用的开发工具是IDEA2018.2,尤其注意的如果是使用IDEA的maven需要在pom中添加如下代码,否则在项目正确的情况下无法找到mapper文件:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
具体环境是jdk8+maven,需要引入mybatis和mysql-connector-jar包,项目截图和代码如下:
1 没有接口类的简单搭建
<?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.mb.mapper.BlogMapper">
<select id="selectBlog" resultType="com.mb.pojo.Blog">
select * from Blog where id = #{id}
</select>
</mapper>
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mb/mapper/BlogMapper.xml"/>
</mappers>
</configuration>
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8&serverTimezone=UTC&useSSL=false
username=root
password=root
Blog类也很简单只有id,name两个属性。需要注意的是如果要在xml文件使用&需要进行转义。
测试代码如下:
@Test
public void testquery() throws IOException {
String res = "mybatis-config.xml";
//Resource导入的是org.apache.ibatis.io
InputStream in = Resources.getResourceAsStream(res);
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
SqlSession session = fac.openSession();
Blog blog = session.selectOne("selectBlog",1);
System.out.println(blog);
}
2 有接口类的搭建方式(常用方式)
同第一种方式差不多,在mapper下新建接口类,接口类和相应的xml文件要有对应,具体代码如下:
public interface BlogMapper {
Blog queryBlog(int 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="com.mb.mapper.BlogMapper">
<select id="queryBlog" resultType="com.mb.pojo.Blog">
select * from Blog where id = #{id}
</select>
</mapper>
id必须对应接口类的方法,测试代码如下:
@Test
public void testquery(){
String res = "mybatis-config.xml";
InputStream in = blogtest.class.getClassLoader().getResourceAsStream(res);
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
SqlSession session = fac.openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog = blogMapper.queryBlog(1);
System.out.println(blog);
}
如果接口类和xml需要分离,那么需要对mybatis-config.xml进行修改,截图和代码如下:
<mappers>
<mapper resource="mapping/BlogMapper.xml"/>
</mappers>
上面mappers是在mybatis-config.xml中,用于找到xml文件。IDEA的maven尤其注意开头提醒,需要在pom中添加build
同样在有接口类的情况下可以使用注解的方式,代码如下:
public interface BlogMapper {
@Select("select * from Blog where id = #{id}")
Blog queryBlog(int 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="com.mb.mapper.BlogMapper">
</mapper>
接口类参数过多以及想对查询结果进行封装都是可以的,具体参考官网或者百度。
基本搭建差不多就这样,一些其他用法如下:
配置别名:
在上面resutlType中我们需要写具体类的包名,实际可以在mybatis-config.xml中进行简写,如下:
<typeAliases>
<typeAlias alias="Blog" type="com.mb.pojo.Blog"/>
</typeAliases>
要注意的是mybatis-config.xml中的标签是有顺序的,如下:
(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)
驼峰映射
在写实体类的时候需要将对应的属性与数据库字段对应,否则mybatis无法完成自动映射导致找不到相关类,一般情况下我们命名属性都是首字母小写其余单词首字母大写,数据库字段是以下划线间隔,如果我们开启驼峰映射便能自动识别。
打印sql
<settings>
<!-- 打印查询语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>