MyBatis框架

什么是框架

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值