学习主题:mybatis
学习目标:
1 掌握框架的概念
2 掌握mybatis环境搭建
3 掌握mybatis处理查询
4 掌握mybatis核心配置文件
5 掌握mybatis的多种查询方式
6 掌握Log4j的使用
7 掌握mybatis集成log4j
1.框架是什么_为什么框架都要有配置文件
(1)什么是框架? 常用的框架有哪些?
1、框架是偷懒的程序员将代码进行封装,之后进行重复使用的过程
2、框架其实是一个半成品,连接数据库为例,连接数据库使用的驱动,url,用户名,密码
3、程序员在使用框架的时候必须要告诉框架需要的信息。通常以配置文件的方式告知,一般来说,多数会使用xml作为框架的配置文件
4、因此,在使用框架开发代码时,需要编写配置文件,代码的编写反而会减少
5、框架都是第三方提供的,提供的都是jar包,因此,使用框架之前必须将框架涉及的jar包导入项目中
常用的框架:
1、MyBatis ,ORM框架,底层是对jdbc进行了封装
2、Spring,是一个容器
3、SpringMVC,分层框架
4、Struts2,类似于SpringMVC
5、Hibernate,类似于MyBatis
(2)为什么框架都要有配置文件?
会设定 log4j 的设置信息, 例如日志级别, 日志输出方式, 日志格式等等
2.常用的框架有哪些_MyBatis框架简介
(1)列举你常用的框架, 并简单描述其主要功能.
a)MyBatis, ORM 框架, 底层是对 jdbc 进行了封装
b)Spring, 是一个容器
c)SpringMVC, 分层框架
d)Struts2, 功能类似于 SpringMVC
e)Hibernate, 功能类似于 MyBatis
(2)你如何理解MyBatis框架?
a)MyBatis 是一个 ORM 框架, 用于操作数据库, 底层是对
jdbc 进行的封装.
b)MyBatis 的前身是 iBatis, 是 Apache 下的一个开源项目.
现在被迁移到了 GitHub 上.
3.搭建MyBatis环境使用的jar包详解
(1)MyBatis框架搭建需要哪些jar包?
MyBatis 核心 jar:
mybatis-3.2.7.jar
MyBatis 依赖的 jar:
asm-3.3.1.jar 字节码解析包, 被cglib依赖
cglib-2.2.2.jar 动态代理的实现
commons-logging-1.1.1.jar 日志包
javassist-3.17.1-GA.jar 字节码解析包
log4j-1.2.17.jar 日志包
log4j-api-2.0-rc1.jar 日志
log4j-core-2.0-rc1.jar 日志
slf4j-api-1.7.5.jar 日志
slf4j-log4j12-1.7.5.jar 日志
驱动 jar:
mysql-connector-java-5.1.30.jar
(2)分别说明MyBatis依赖的jar包的含义.
asm-3.3.1.jar 字节码解析包, 被cglib依赖
cglib-2.2.2.jar 动态代理的实现
commons-logging-1.1.1.jar 日志包
javassist-3.17.1-GA.jar 字节码解析包
log4j-1.2.17.jar 日志包
log4j-api-2.0-rc1.jar 日志
log4j-core-2.0-rc1.jar 日志
slf4j-api-1.7.5.jar 日志
slf4j-log4j12-1.7.5.jar 日志
4.编写MyBatis核心配置文件
(1)MyBatis的核心配置文件有什么特点, 配置时有什么注意事项?
是一个 xml 文件, 命名无要求, 位置无要求, 一般叫mybatis.xml, 放在 src 目录下.
(2)什么是数据源? 在核心配置文件中, 如何配置数据源?
<!--
数据源/连接池,用于配置连接池和数据库连接的参数
type:用于配置mybatis是否采用连接池技术
POOLED表示MyBatis采用连接池技术
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/bjsxt"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
5.MyBatis映射文件编写及扫描配置
(1)MyBatis映射文件编写及扫描配置
MyBatis映射文件编写:
<?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: 命名空间, 可以随意定义, 一般情况下要写全限定路径
MyBatis管理SQL语句是通过namespace+id来定位的
-->
<mapper namespace="com.bjsxt.mapper.UserMapper">
<!--
select标签用于编写查询语句
id: sql语句的唯一标识, 类比为方法名
resultType: 用于设定返回结果的类型(全限定路径)
如果返回结果是集合, 要写集合泛型的类型
-->
<select id="selAll" resultType="com.bjsxt.pojo.User">
select * from t_user
</select>
</mapper>
扫描配置
<!-- 扫描mapper文件 -->
<mappers>
<mapper resource="com/bjsxt/mapper/UserMapper.xml" />
</mappers>
(2)介绍映射文件中常用的标签及配置时的注意事项.
select标签用于编写查询语句
id:sql语句唯一标识,类比为方法名
resultType:用于设定返回结果的类型(全限定路径)
如果返回结果是集合,要写集合泛型的类型
6.测试代码_selectList实现查询所有的操作
(1)使用MyBatis时用到的核心对象是什么? 如何创建?
// 加载MyBatis核心配置文件
InputStream is =Resources.getResourceAsStream("mybatis.xml");
(2)什么是JUnit? 如何使用?
项目BuildPath加入add Library 然后选择JUilt,这是用来测试,可以不用写主方法。在方法前面加上@Test,然后再导入import org.junit.Test;
7.MyBatis核心配置文件详解
(1)MyBatis核心配置文件中有哪些常用标签? 如何配置?
<configuration>
这是配置文件的根元素, 所有的其他元素都要在这个标签下使用.
<environments>
用于管理所有的环境, 并可以指定默认使用哪个环境. 通过default 属性来指定.
<environment>
用于配置环境. id 属性用于唯一标识当前环境
<transactionManager>
用于配置事务管理器type 属性用于指定 MyBatis 采用何种方式管理事务
a) JDBC: 表示 MyBatis 采用与原生 JDBC 一致的方式管理事务
b) MANAGED: 表示将事务管理交给其他容器进行, 例如 Spring
<DataSource>
用于配置数据源, 设置 MyBatis 是否使用连接池技术, 并且配置数据库连接的四个参数type 属性
用于设置 MyBatis 是否使用连接池技术
a) POOLED, 表示采用连接池技术
b) UNPOOLED, 表示每次都会开启和关闭连接, 不使用连接池技术
c) JNDI, 使用其他容器(例如 Spring)提供数据源
<property>
用于配置数据库连接参数(driver, url, username, password)
<mappers>
用于扫描 mapper 信息
(2)为什么要进行映射扫描? 如何配置?
映射文件主要对数据库数据进行增删改查,可以减少我们程序员写的代码量。
<?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:命名空间,可以随意定义,一般情况下要写全限定路径
MyBatis管理SQL语句是通过namespace来定位的
-->
<mapper namespace="com.bjsxt.mapper.UserMapper">
<!--
select标签用于编写查询语句
id:sql语句唯一标识,类比为方法名
resultType:用于设定返回结果的类型(全限定路径)
如果返回结果是集合,要写集合泛型的类型
-->
<select id="selAll" resultType="com.bjsxt.pojo.User">
select * from t_user
</select>
</mapper>
8.MyBatis三个查询方法_selectList_selectOne_selectMap
(1)请描述selectList, selectOne和selectMap三个方法的作用及其中的关系.
1、selectList
用于查询多条数据的情况, 返回值是一个 list 集合. 如果没有查到任何数据, 返回没有元素的集合(空集合, 不是 null)
2、selectOne
用于查询单条数据的情况, 返回值是一个对象. 如果没有查到任何数据, 返回 null
3、selectMap
用于查询多条数据的情况, 多条数据要形成一个 Map 集合. 需要指
定哪个属性作为 key. 如果查不到, 返回一个空 map 集合(不是 null)
(2)简述selectMap方法如何使用? 以及返回结果的组成方式.
如果查不到, 返回一个空 map 集合(不是 null)
@Test
public void testSelectMap() throws IOException {
InputStream is =Resources.getResourceAsStream("mybatis-cfg.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Map<Integer, User> map =
session.selectMap("com.bjsxt.mapper.UserMapper.selAll", "id");
System.out.println(map);
Set<Integer> set = map.keySet();
for (Integer k : set) {
System.out.println(map.get(k));
}
session.close();
}
9.Log4J简介_Log4J的五个日志级别
(1)Log4J简介_Log4J的五个日志级别
1、FATAL
致命的, 表示非常严重的错误, 一般是系统错误
2、ERROR
错误, 表示代码错误, 比较严重
3、WARN
警告, 不影响程序的运行, 但是可能存在风险.
4、INFO
信息, 表示一个普通的输出信息
5、DEBUG
调试, 表示程序员人为的一些调试信息
(2)Log4J日志级别有哪些? 分别代表什么含义?
1、FATAL
致命的, 表示非常严重的错误, 一般是系统错误
2、ERROR
错误, 表示代码错误, 比较严重
3、WARN
警告, 不影响程序的运行, 但是可能存在风险.
4、INFO
信息, 表示一个普通的输出信息
5、DEBUG
调试, 表示程序员人为的一些调试信息
10.Log4J配置文件详解_日志格式简介_日志对象的获取及使用
(1)常用的log4j日志格式符号有哪些? 代表什么含义?
(2)如何使用log4j记录日志?
# Set root category priority to INFO and its only appender to CONSOLE.
# log4j.rootCategory=DEBUG, CONSOLE
log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m %c %l
%d{yyyy-MM-dd HH:mm:ss}%n
# LOGFILE is set to be a File appender using a PatternLayout.
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=- %m %l%n
11.如何使用log4j记录日志?
(1)如何在MyBatis中使用Log4J? 如何配置
<settings>用于设置 MyBatis 在运行时的行为方式, 例如:缓存, 延迟加载, 日志等
<!-- settings标签 -->
<settings>
<!-- 设置MyBatis使用log4j日志支持 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
(2)如何设置MyBatis中日志的级别? 有几种级别?
1、FATAL
致命的, 表示非常严重的错误, 一般是系统错误
2、ERROR
错误, 表示代码错误, 比较严重
3、WARN
警告, 不影响程序的运行, 但是可能存在风险.
4、INFO
信息, 表示一个普通的输出信息
5、DEBUG
调试, 表示程序员人为的一些调试信息
12.properties标签实现软编码
(1)什么是软编码? 有什么好处?
软编码是在运行时确定,是可变的,关联比较松。
(2)properties标签如何配置?
用于加载外部的 properties 文件
<!-- properties加载外部文件 -->
<properties resource="db.properties" />
获取 properties 文件中数据时, 要通过${}的方式获取
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java505
jdbc.username=root
jdbc.password=root
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>