MyBatis框架(一)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值