什么是框架
- 框架是一个半成品,我们可以基于半成品继续完善,来实现个性化开发。程序开发中框架是对常见功能的封装,可以把框架理解为软件的设计规范或者是标准化的组件,我们可以重复使用框架中定义的功能和组件,提升开发效率
框架能够解决什么问题
- 解决了技术通用问题,做到技术统一
- 提升了开发效率
- 提升了系统的稳定性,一个成熟的框架,经过了在众多企业项目中的验证使用,稳定性有保障
MyBatis框架的介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射MyBatis的两种映射方式:
1.通过XML映射
2.通过注解映射
MyBatis的一个入门案例
需求:利用Mybatis框架,从MySQL中查询所有的用户- 环境搭建----准备数据
CREATE SCHEMA `study_mybatis_01_01` DEFAULT CHARACTER SET utf8 ;
use study_mybatis_01_01 ;
create table t_user (
id int primary key auto_increment,
username varchar(20) not null,
birthday date,
sex char(1) default '男',
address varchar(50)
);
insert into t_user values (null, '孙悟空','1980-10-24','男','花果山水帘洞');
insert into t_user values (null, '白骨精','1992-11-12','女','白虎岭白骨洞');
insert into t_user values (null, '猪八戒','1983-05-20','男','福临山云栈洞');
insert into t_user values (null, '玉面狐','1995-03-22','女','积雷山摩云洞');
insert into t_user values (null, '玉兔精','2010-02-12','女','天竺国皇宫');
insert into t_user values (null, '豹子精','2008-05-03','男','隐雾山折岳洞');
- 环境搭建----创建空项目
创建创建MyBatis_Demo模块(maven项目)
坐标如下
效果如下
- 环境搭建----添加maven依赖
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
- 环境搭建----添加查询数据库的User实体类
com.itheima.entity.User.java
package com.itheima.entity;
import java.util.Date;
public class User {
private Integer id;
private String userName;
private Date birthday;
private String sex;
private String homeAddress;
public User() {
}
public User(Integer id, String userName, Date birthday, String sex, String homeAddress) {
this.id = id;
this.userName = userName;
this.birthday = birthday;
this.sex = sex;
this.homeAddress = homeAddress;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", homeAddress='" + homeAddress + '\'' +
'}';
}
}
- 环境搭建----UserMapper接口
这个接口其实就是数据访问层:DAO层
com.itheima.dao.UserMapper.java
package com.itheima.dao;
import com.itheima.entity.User;
import java.util.List;
/**
数据访问层方法
*/
public interface UserMapper {
/**
* 查询所有
* @return
*/
List<User> selectAll();
}
- 环境搭建----接口映射文件
在src/main/resources目录下创建UserMapper.xml映射文件
映射文件的模板可以在http://www.mybatis.org/mybatis-3/zh/getting-started.html找到
src/main/resources/UserMapper.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="com.itheima.dao.UserMapper">
<!--
查询语句
id 接口中方法的名字
resultType 返回值类型
-->
<select id="selectAll" resultType="com.itheima.entity.User">
select * from t_user
</select>
</mapper>
- 环境搭建----核心配置文件
可以在Mybatis官网入门中找到配置模板
http://www.mybatis.org/mybatis-3/zh/getting-started.html
src/main/resources/mybatis-config.xml
<?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 default="default">
<!--环境变量-->
<environment id="default">
<!--事务管理器:由JDBC管理事务 -->
<transactionManager type="JDBC"/>
<!--数据源配置信息:POOLED 使用连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/study_mybatis_01_01?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
-
完整结构
-
测试
- 通过框架提供的Resources类,加载mybatis-config.xml,得到文件输入流InputStream对象
- 实例化会话工厂建造类SqlSessionFactoryBuilder
- 通过上面的SqlSessionFactoryBuilder对象,读取核心配置文件的输入流,得到会话工厂SqlSessionFactory
- 使用SqlSessionFactory对象,创建SqlSession对象
- 它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法
- 它提供了一个getMapper()方法,获取接口的实现对象。
- 获取接口的对象UserMapper,得到接口的代理对象
- 执行数据库的查询操作,输出用户信息
- 关闭会话,释放资源
package com.itheima.dao;
import com.itheima.entity.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;
public class UserMapperTest {
@Test
public void selectAll() throws IOException {
//1. 获取核心配置文件,得到输入流对象
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2. 构造会话工厂建造类
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3. 通过建造类得到会话工厂
SqlSessionFactory factory = builder.build(inputStream);
//4. 通过会话工厂得到会话对象
SqlSession session = factory.openSession();
//5. 通过会话对象得到UserMapper接口的代理对象
UserMapper userMapper = session.getMapper(UserMapper.class);
//6. 执行查询操作
List<User> users = userMapper.selectAll();
for (User user : users) {
System.out.println(user);
}
//7. 关闭会话
session.close();
}
}
-
Logging(日志)
-
系统日志
记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。
系统日志包括系统日志、应用程序日志和安全日志。 -
业务日志
记录web服务器接收处理请求以及运行时错误等各种原始信息以.log结尾的文件。我们通过对日志进行统计、分析、综合,就能有效地掌握网站运行状况,发现和排除错误原因,了解客户访问分布等,更好的加强系统的维护和管理。 -
在项目中添加日志
1.pom.xml引入log4j的坐标
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.mybatis-config.xml加入日志设置
<!-- 指定使用log4j输出日志-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
3.在src/main/resoures目录下创建log4j.properties
文件,内容如下:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
重新执行update操作的单元测试方法,效果如下: