一. MyBatis简介
1.MyBatis官网: http://www.mybatis.org/mybatis-3/zh/index.html
- MyBatis的前身是Apache下的一款开源项目, 叫iBatis. 后来代码迁移到了GoogleCode平台, 并更名为MyBatis. 后来又迁移到了GitHub上.
- MyBatis是对JDBC的封装
4.MyBatis, ORM框架, (Object Relational Mapping), 简化数据库操作 - 各版本下载路径: https://github.com/mybatis/mybatis-3/releases
- 解压后的目录介绍:
二.MyBatis环境搭建
1.创建项目
MyBatis是一个不依赖于容器的框架, 可以在se项目中使用.
2.将jar包拷贝到项目中, 并加入依赖
- MyBatis核心jar包: mybatis-3.5.2.jar
- mysql驱动包: mysql-connector-java-5.1.38.jar
- junit测试包: junit-4.12.jar
- hamcrest-core-1.3.jar, junit依赖的包
3.编写MyBatis的核心配置文件
- 是一个xml文件, 命名没有要求, 位置也没有要求. 一般将该配置文件放到src下. 因为src目录下的内容将来都会被编译并存放到类路径(classpath)
- 编写xml配置文件时, 需要先引入dtd约束.
- 核心配置文件代码:
<?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, 配置并管理多个环境-->
<environments default="dev">
<!--配置一个环境-->
<environment id="dev">
<!--事务管理器, MyBatis采用和JDBC一致的方式进行事务的管理-->
<transactionManager type="JDBC" />
<!--数据源, 使用连接池技术-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_ssm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
4.数据库表格准备
create table tb_user (
id integer primary key auto_increment,
username varchar(30) not null,
password varchar(32) not null,
realname varchar(30),
age int(3),
birthday date,
reg_time datetime
);
insert into tb_user values
(default, 'zhangsan', '123', '张三', 18, '2001-10-10', now()),
(default, 'lisi', '123', '李四', 19, '2000-12-10', now());
select * from tb_user;
5.提供对应表格的pojo类
- idea中序列化生成uid的相关配置
6.编写映射配置文件
要求也是一个xml文件, 命名无所谓, 位置无所谓. 一般叫xxxMapper.xml
<?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="a.b.c">
<!--id属性类似于方法名, resultType表示查询结果返回的类型-->
<select id="selAll" resultType="com.bjsxt.pojo.User">
select * from tb_user
</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>
<!--配置环境 environments, 配置并管理多个环境-->
<environments default="dev">
<!--配置一个环境-->
<environment id="dev">
<!--事务管理器, MyBatis采用和JDBC一致的方式进行事务的管理-->
<transactionManager type="JDBC" />
<!--数据源, 使用连接池技术-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_ssm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--扫描映射-->
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
7.编写测试代码
public class TestMyBatis {
@Test
public void testSelAll() throws Exception {
// Resources - 资源加载工具, 默认去classpath加载资源
InputStream is = Resources.getResourceAsStream("mybatis.xml");
// SqlSessionFactoryBuilder - 工厂构建者
// SqlSessionFactory - 会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
// SqlSession - 会话, 用于所有mybatis中操作方法的调用
SqlSession sqlSession = factory.openSession();
// 调用方法进行查询
List<User> list = sqlSession.selectList("selAll");
for (User user : list) {
System.out.println(user);
}
// 关闭资源
sqlSession.close();
}
}
三.环境搭建总结
1.配置文件详解
a) 核心配置文件
- 根标签:
<configuration>
- 环境管理标签:
<environments default=””>
, 用于管理多个环境配置, 其中default属性用于指定当前使用哪个环境, 配置的是子标签<environment>
的id; - 环境配置标签:
<environment id=””>,
用于配置一个环境, ,其中, id属性用于进行唯一标识, 可以区分多个环境; - 事务管理器标签:
<transactionManager type=””>,
用于指定mybatis使用何种方式进行事务的管理, type的可选值有: JDBC | MANAGED;
- JDBC: 表示mybatis采用和JDBC一致的方式进行事务的管理;
- MANAGED: 表示MyBatis不对事务管理, 交给容器管理; - 数据源标签:
<dataSource type=””>,
用于配置数据源(数据库连接池), type的可选值有: POOLED | UNPOOLED | JNDI;
-POOLED, 表示采用连接池技术获取数据库连接;
-UNPOOLED, 表示不采用连接池, 每次都物理开关连接;
-JNDI, Java Naming and Directory Interface, java命名和目录接口. - 映射扫描标签:
<mappers>
,<mapper class|url|resource>
-class: 该属性用于扫描类的时候使用
-url: 该属性用于扫描远程的映射信息
-resource: 用于扫描本地类路径下的资源文件
b) 映射配置文件 - 根标签:
<mapper namespace=””>
, namespace必须要配置. 命名空间有点类似于java中的package. 在MyBatis中, 命名空间用于管理sql语句对应的id. MyBatis中定位sql语句的方式是namespace.id - 子标签: , 用于定义查询sql语句
-id: 在同一个namespace中进行唯一标识;
-resultType: 表名查询结果的类型. 应该写类型的全限定路径. 同时, 如果返回结果是集合, ,应该写集合泛型的类型.
2.列与属性不同名问题
默认情况下, 只要列名和属性名一致, MyBatis会进行自动映射(Auto-Mapping); 如果列名和属性名不一致, 不会映射数据, 会赋值为null. 此时, 如果需要为属性赋值, 可以通过别名进行修改, 将别名设置为域与属性同名即可.
<?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="a.b.c">
<!--id属性类似于方法名, resultType表示查询结果返回的类型-->
<select id="selAll" resultType="com.bjsxt.pojo.User">
select id, username, password, realname, age, birthday, reg_time regTime from tb_user
</select>
</mapper>
四.查询常用的三个方法
1.selectList
查询多条数据时使用, 返回结果是一个List集合
- selectOne
查询单条数据时使用, 返回结果是一个对象/数值. 例如: 跟据主键查询, 返回单个对象; 统计查询.
- selectMap
将查询结果封装为一个Map集合
最核心的方法是selectList, selectOne和selectMap底层调用的都是selectList. 注意, selectList和selectMap如果没有查到数据, 返回空集合; 而selectOne如果差不多数据, 则返回null.
五.日志记录框架log4j
1.什么是log4j
log for java, 为java提供的日志记录工具, 由Apache提供的, 开源的日志记录工具. - 使用log4j的步骤
a) 导包
b) 提供配置文件, 可以使用properties或xml, 一般使用properties. 命名必须叫log4j.properties, 位置必须放在src下.
c) 认识log4j的日志级别, 常用的日志级别有6个:
- FATAL, 致命的, 不是代码导致的, 一般是服务器宕机, 网络故障, 硬件故障
- ii. ERROR, 错误, 一般由程序故障导致
-iii. WARN, 警告, 一般不会影响程序的运行, 但是可能存在风险
-iv. INFO, 信息, 系统输出的一些简单信息
-v. DEBUG, 调试, 程序要认为调试的输出信息
-vi. TRACE, 跟踪, 显示代码的详细执行流程.
d) log4j输出信息的格式, 通过在log4j.properties中进行配置的.
# 设置log4j的根(整体)日志级别, 同时指定日志输出的位置: CONSOLE表示控制台, LOGFILE表示日志文件
log4j.rootCategory=INFO, CONSOLE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# 设置局部位置的日志级别
#log4j.logger.org.apache.axis.enterprise=FATAL
# 设置控制台日志输出的格式
# 常用符号
# %m: message, 日志消息
# %n: 回车换行
# %d: 日期时间, 可以自定义日期时间格式, %d{yyyy-MM-dd HH:mm:ss}
# %p: 日志级别
# %l: 日志发生的具体位置
# %c: 定位, 包名.类名
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
# 设置日志文件中日志输出的格式
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/test.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
e) 常用的方法
public class TestLog4j {
private static Logger logger = Logger.getLogger(TestLog4j.class);
public static void main(String[] args) {
logger.fatal("致命的错误");
logger.error("代码错误");
logger.warn("警告");
logger.info("普通消息");
logger.debug("调试信息");
logger.trace("跟踪信息");
}
}
3.MyBatis对log4j的支持
a) 通过标签开启对log4j的支持
<!--指定MyBatis运行时环境的配置-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
b) 导入log4j-1.2.17.jar
c) 提供log4j.properties配置文件
d) 修改日志级别
# 设置log4j的根(整体)日志级别, 同时指定日志输出的位置: CONSOLE表示控制台, LOGFILE表示日志文件
log4j.rootCategory=ERROR, CONSOLE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# 设置局部位置的日志级别
log4j.logger.a.b.c=TRACE
六.提取数据库配置信息
a) 软编码, 提取配置信息为db.properties
b) 在核心配置文件中通过标签加载资源文件
<!--加载资源文件-->
<properties resource="db.properties" />
c) 修改数据库参数的配置
<!--配置环境 environments, 配置并管理多个环境-->
<environments default="dev">
<!--配置一个环境-->
<environment id="dev">
<!--事务管理器, MyBatis采用和JDBC一致的方式进行事务管理-->
<transactionManager type="JDBC" />
<!--数据源, 使用连接池技术-->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>