(1) sqlMapConfig.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2) 基于SqlSessionFactory可以生成SqlSession对象
(3) SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4) Executor是SqlSession底层的对象,用于执行SQL语句
(5) MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
org.mybatis
mybatis
3.2.8
mysql
mysql-connector-java
5.1.32
junit
junit
4.10
log4j
log4j
1.2.17
其中,前两个是必须的。后两个可有可无。其中,Junit用于单元测试的,Log4j用于打印日志信息。
1.在jdbc.properties文件中作如下配置:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
2.在SqlMapConfig.xml文件中作如下配置:
❤️ 注意:resource的路径用的是“/”
详细配置如下:
package com.tedu;
import java.io.InputStream;
import java.util.List;
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.tedu.dao.EmpMapper;
import com.tedu.pojo.Emp;
public class Test {
public static void main(String[] args) throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
EmpMapper usedao = session.getMapper(EmpMapper.class);
//5.使用代理对象执行方法
List emps = usedao.findAll();
for (Emp emp : emps) {
System.out.println(emp);
}
//6.释放资源
session.close();
in.close();
}
}
在项目中加入log4j的配置文件,用于打印日志信息,便于开发调试。
在src(或相似的目录)下创建log4j.properties如下:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
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默认使用log4j作为输出日志信息。
只要将该文件放在指定的位置,log4j工具会自动到指定位置加载上述文件,读取文件中的配置信息并使用!
在编写查询SQL时,我们书写的SQL往往为:
其实这里书写星号(* ) 不如直接写列名速度快,因为在查询时,
还需要将星号(*)转换为表列名,如果直接写列名则省去了转换操作。
因此下面在查询指定id的员工和查询所有员工的SQL中,
将查询的列由星号(*)替换为了列名。
但,如果直接写列名替换星号(*),可能也会带来一些麻烦:
(1)假设这里还有很多查询,都要查询所有列,每次都书写所有列名,麻烦!
(2)如果表中的列有几十个,书写起来会更加麻烦,SQL语句的长度也会暴增!
(3)如果后期需求发生变化,要修改查询的列,可能要修改多处,可维护性差!
要解决上面的问题,可以使用sql片段,例如:
声明一个sql片段,指定要查询的列
id,name,job,salary
将下面查询SQL中的列名替换为SQL片段
示例:添加一个查询功能:查询薪资小于3500的所有员工。
1、编辑EmpMapper.xml文件, 添加查询对应的sql.
2、但在书写完后,xml文件提示有错误:
原来,小于号(<)在xml文件中是特殊字符,被xml文件当成了标签的开始符号。
3、解决方法:将特殊符号包含在CDATA区()中,这是因为放在CDATA区中的内容,只会被xml解析器当作普通文本来处理。而不是被当成标签的一部分处理。