什么是框架
a)框架是偷懒的程序员将代码进行封装,之后进行重复使用的过程。
b)框架其实是一个半成品,以连接数据库为例,连接数据库使用的驱动,url,用户名,密码必须告知框架。
c)程序员在使用框架的时候,通常以配置文件的方式告知框架需要的信息,多数会使用xml作为框架的配置文件。
d)因此,在使用框架开发代码时,需要编写配置文件,代码的编写反而会减少。
e)框架都是第三方提供的,提供的都是jar包。因此,使用框架前,必须将框架涉及的jar包导入项目中。
常见的java开发的框架
a)MyBatis,ORM框架,底层是对jdbc进行了封装
b)Spring,是一个容器
c)SpringMVC,分层框架
d)Struts2,功能类似于SprintMVC
e)Hibernate,功能类似于MyBatis。
MyBatis框架简介
a)MyBatis是一个ORM框架,用于操作数据库,底层是对jdbc进行的封装。
b)MyBatis的前身是iBatis,是Apache下的一个开源项目。
现在被迁移到了GitHub上。
c)中文网址:
http://www.mybatis.org/mybatis-3/zh/getting-started.html
d)MyBatis各版本下载地址:
https://github.com/mybatis/mybatis-3/releases
MyBatis环境搭建jar包详解
创建项目
java project
导入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
MyBatis核心配置文件
要求
是一个xml文件,命名无要求,位置无要求,一般叫mybatis.xml,放在src目录下。
dtd
a)MyBatis官方提供了dtd约束,方便xml的编写。
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
b)配置文件内容
<?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>
<!--
用于指定使用哪个环境
default:用于指定使用的环境id
-->
<environments default="dev">
<!--
用于配置开发环境
id:环境的唯一识别码
-->
<environment id="dev">
<!--
事务管理器
type:用于设置mybatis采用什么方式管理事务
JDBC表示采用和JDBC一样的事务管理方式
-->
<transactionManager type="JDBC"></transactionManager>
<!--
数据源/连接池,用于配置连接池和数据库连接的参数
type:用于设置mybatis是否采用连接池技术
POOLED表示MyBatis采用连接池技术
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/java"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
</configuration>
定义pojo类
Mapper映射文件
在MyBatis中,推荐使用mapper作为包名,我们只需要写一个映射配置文件即可,UserMapper.xml,用于定义要执行的SQL语句,同时设定返回结果的类型。
<?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.java.mapper.UserMapper">
<!--
select标签用于编写查询语句
id:sql语句的唯一标识,类比为方法名
resultType:用于设定返回结果的类型(全限定路径)
如果返回结果是集合,要写集合泛型的类型
-->
<select id="selAll" resultSetType="com.java.pojo.User">
select * from t_user;
</select>
</mapper>
在核心配置文件中添加mapper扫描
<mappers>
<mapper resource="com/java/mapper/UserMapper.xml"/>
</mappers>
编写测试代码
需要先添加JUnit支持
package com.java.test;
import com.java.pojo.User;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @Auther:penghao
* @Date:2019/4/10
* @Description:com.java.test
* @version:1.0
*/
public class TestMyBatis {
@Test
public void testSelAll() throws IOException {
// 加载MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//构建SqlSessionFactory工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//通过工厂打开SqlSession
SqlSession session = factory.openSession();
//通过session执行查询操作
List<User> list = session.selectList("com.java.mapper.UserMapper.selAll");
System.out.println(list);
//关闭资源
session.close();
}
}
MyBatis配置文件详解
1.1 configuration
只是配置文件的根元素,所有的其他元素都要在这个标签下使用。
1.2 environments
用于管理所有的环境,并可以指定默认使用哪个环境。通过defult属性来指定。
1.3 environment
用于配置环境。id属性用于标识当前环境
1.4 transactionManager
用于配置事务管理器
1.4.1 type属性
用于指定MyBatis采用何种方式管理事务
a)JDBC:表示MyBatis采用与原生JDBC一致的方式管理事务。
b)MANAGED:表示将事务管理交给其他容器进行,例如Spring
1.5 DataSource
用于配置数据源,设置MyBatis是否使用连接池技术,并且配置数据库连接的四个参数。
1.5.1 type属性
用于设置MyBatis是否使用连接池技术
a)POOLED,表示采用连接池技术
b)UNPOOLED,表示每次都会开启和关闭连接,不适用连接池技术。
C)JNDI,使用其他容器(例如 Spring)提供数据源。
1.6 property
用于配置数据库连接参数(driver,url,username,password)
1.7 mappers
用于扫描mapper信息
2.mapper映射配置文件详解
2.1 mapper
根元素
2.1.1 namespace属性
用于指定命名空间,mybatis是通过namespace+id的方式来定位SQL语句的,所以必须指定namespace。通常namespace被配置为全限定路径。
2.2 select
用于定义查询语句(DQL)
2.2.1 id属性
用于唯一标识SQL语句,类似于方法的方法名
2.2.2resultType属性
用于设定查询返回的数据类型,要写类型的全限定路径。如果返回的是集合类型,要写集合的泛型的类型。
MyBatis中常用的三个查询方法
1.1 selectList
用于查询多条数据的情况,返回值是一个List集合。如果没有查到任何数据,返回没有元素的集合(空集合,不是null)
@Test
public void testSelAll() throws IOException {
// 加载MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//构建SqlSessionFactory工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//通过工厂打开SqlSession
SqlSession session = factory.openSession();
//通过session执行查询操作
List<User> list = session.selectList("com.java.mapper.UserMapper.selAll");
System.out.println(list);
for (User user:list){
System.out.println(user);
}
//关闭资源
session.close();
}
1.2 selectOne
用于查询单条数据的情况,返回值是一个对象。如果没有查到任何数据,返回null
@Test
public void testSelOne() throws IOException {
// 加载MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//构建SqlSessionFactory工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//通过工厂打开SqlSession
SqlSession session = factory.openSession();
//通过session执行查询操作
User user = session.selectOne("com.java.mapper.UserMapper.selOne");
System.out.println(user);
//关闭资源
session.close();
}
1.3 selectMap
用于查询多天数据的情况,多条数据要形成一个Map集合。需要指定哪个属性作为key。如果查不到,返回一个空map集合(不是null)
@Test
public void testSelMap() throws IOException {
// 加载MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//构建SqlSessionFactory工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//通过工厂打开SqlSession
SqlSession session = factory.openSession();
//通过session执行查询操作
Map<Integer, User> users = session.selectMap("com.java.mapper.UserMapper.selAll", "id");
System.out.println(users);
Set<Integer> set = users.keySet();
for (Integer i:set){
System.out.println(users.get(i));
}
//关闭资源
session.close();
}
LOG4J
1.1 log4j简介
a)log4j是Apache提供的一款记录日志的工具。
b)log4j既可以将日志信息打印在控制台,也可以打印输出到一个日志文件中。
c)log4j可以定制日志的输出格式
d)log4j可以定制日志级别
1.2 日志级别
1.2.1 FATAL
致命的,表示非常严重的错误,一般是系统错误
1.2.2 ERROR
错误,表示代码错误,比较严重
1.2.3 WARN
警告,不影响程序的运行,但是可能存在风险。
1.2.4 INFO
信息,表示一个普通的输出信息。
1.2.5 DEBUG
调试,表示程序员人为的一些调试信息。
log4j的使用
1.1 导包
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
1.2 配置文件
使用一个叫log4j.properties的配置文件,会设定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
1.3 日志的输出格式
1.4 测试
package com.java.test;
import org.apache.log4j.Logger;
/**
* @Auther:penghao
* @Date:2019/4/11
* @Description:com.java.test
* @version:1.0
*/
public class TestLog4j {
public static void main(String[] args){
//获取日志对象
Logger logger = Logger.getLogger(TestLog4j.class);
// 五个日志级别分别对应五个输出方法,方法名和级别名一致
logger.fatal("系统崩溃了....");
logger.error("发生了错误!");
logger.warn("警告");
logger.info("消息~");
logger.debug("调试...");
}
}
MyBatis对Log4j的支持
1.1 通过settings开启log4j的支持
settings用于设置MyBatis在运行时的行为方式,例如:缓存,延迟加载,日志等。
<!-- settings标签 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
1.2 局部调整日志级别,定制日志的输出
# 提高整体日志级别
log4j.rootCategory=ERROR, CONSOLE
# log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
# 单独设置SQL语句的输出级别为DEBUG级别
# 方法级别
#log4j.logger.com.java.mapper.UserMapper.selAll=DEBUG
# 类级别
# log4j.logger.com.java.mapper.UserMapper=DEBUG
# 包级别
log4j.logger.com.java.mapper=DEBUG
properties标签实现软编码
properties标签
1.1 功能
用于加载外部的properties文件
<!-- properties加载外部文件 -->
<properties resource="db.properties"/>
1.2 使用方式
获取properties文件中数据时,要通过${}的方式获取
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java
jdbc.username=root
jdbc.password=root
<?xml version