Mybatis学习总结-01

Mybatis

1、Mybatis - ORM框架(Object Relational Mapping):对象关系映射 可以简化数据库操作

对象:指的是Java中的类

Relational :指的是关系型数据库

ORM: 指的是对象与数据库表格之间的对应关系

2、Spring框架: 可以理解为是一个容器,用来装对象,是一个可以做对象管理的一个容器,一般用于整合其他的技术

3、SpringMVC框架:一个分层的框架,主要对C层进行简化

4、RABC,基于角色的访问控制,通过数据库表格的设计来进行权限的控制。

2、什么是框架

框架就是模板就是骨架;

框架就是由一些聪明的程序员封装好的代码,普通程序员可以借助这些代码进行偷懒,使用框架可以大大的提高开发效率,框架的使用是很简单的,但是原理就比较复杂了。封装框架一般用到的技术有:反射、设计模式;

使用框架的流程:

  1. 需要找到框架提供的资料; *.jar
  2. 编写配置文件,用于告知框架一些基础信息;如mybatis需要连接数据库(就需要url、username、password等等的一些配置);配置文件的格式有: .properties 和 .xml
  3. 通过框架提供的API进行编码(也就是调用框架里的一些类和接口进行自己的编码);

3、Mybatis简介

1、Mybatis的官方文档: https://mybatis.org/mybatis-3/zh/index.html

2、Mybatis 的前身是 Apache 下的一款开源项目,叫 iBatis,后来代码迁移到了 GoogleCode 平台,并更名为:Mybatis,后来又迁移到了 GitHub 上。

3、Mybatis 各个版本的下载路径: https://github.com/mybatis/mybatis-3/releases

Mybatis是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。Mybatis几乎免去了所有的 JDBC 代码以及设置参数和获取结果集的工作。Mybatis 可以通过简单的 XML 或 注解来配置和映射原始类型、接口、和 Java POJO 为数据库中的记录;

4、Mybatis环境搭建

4.1、创建项目;

MyBatis是一个不依赖于容器的框架, 可以在se项目中使用.

4.2、将mybatis的jar包拷贝到项目中并加入依赖;

1、Mybatis的核心jar包:mybatis-3.5.2.jar

2、mysql的驱动包:mysql-connector-java-5.1.38.jar

3、junit测试包:junit-4.12.jar

4.3、编写 Mybatis 的核心配置文件;
  1. 是一个 xml 配置文件,命名无所谓,位置也没有要求,一般放置在 src 目录下(因为src目录下的内容将来都会被编译并存放到路径 classpath中)
  2. 编写 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.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;
4.5、提供对应表格的 POJO 类
4.6、编写映射配置文件

要求也是一个 xml 文件,命名无所谓,位置也无所谓,一般叫 xxxMapper.xml (xxx对应的一般是我们要操作的实体类)

<?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>
4.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();
 }

5、环境搭建总结

5.1、配置文件详解

1、核心配置文件:

核心配置文件mybatis.xml

  • 根标签:
  • 环境管理标签: 可用于管理多个环境配置,其中 default 属性用于指定当前使用的是具体哪个环境,配置的是子标签 的id;
  • 环境配置标签: 用于配置一个环境,其中 id 属性进行唯一标识,可以区分多个环境;
  • 事务管理标签 用于指定 Mybatis 使用何种方式进行事务的管理,type的可选值有:JDBC / MANAGED;
    • JDBC:表示 Mybatis 采用和 JDBC 一致的方式进行事务的管理;
    • MANAGED:表示 Mybatis 不对事务进行管理,交给容器进行管理;
  • 数据源标签: 用于配置数据源(数据库连接池),type的可选值有:POOLED |UNPOOLED | JNDI;
    • POOLED:表示采用连接池技术获取数据库连接;
    • UNPOOLED:表示不采用连接池,每次都物理开关连接;
    • JNDI:Java Naming and Directory Interface,java命名和目录接口;
  • 映射扫描标签:, <mapper calss | url | resource>
    • class:该属性用于扫描类的时候使用;
    • rul:该属性用于扫描远程的信息使用;
    • resource:用于扫描本地路径下的资源文件;

映射配置文件UserMapper.xml

  • 根标签: , 命令空间namespace必须要配置,命令空间有些类似于 java 中的 package ,在 mybatis 中,命令空间用于管理 sql 语句对应的 id . Mybatis 中定位 sql 语句的方式是: namespace.id
  • 子标签:, 用于定义查询 sql 语句
    • id:在同一个namespace中进行唯一标识;
    • resultType:表名查询结果的类型,应该写类型的全限定路径,同时,如果返回的是集合,应该写集合类型的泛型;
5.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>

如:以上配置文件中的:reg_time 可以设置表名:regTime 这样就和属性名一致了;

6、查询常用的三个方法

6.1、selectList

查询多条语句时使用,返回结果是一个 List 集合;

6.2、selectOne

查询单条数据时使用, 返回结果是一个对象/数值. 例如: 跟据主键查询, 返回单个对象; 统计查询.

图一

6.3、selectMap

将查询到的结果封装成一个 Map 集合;

图二

最核心的方法就是:selectList 而 selectOne 和 selectMap 底层调用的都是 seleceList。

注意:selectList和selectMap如果没有查到数据, 返回空集合; 而selectOne如果差不多数据,则返回null

7、日志记录框架 log4j

7.1、何为 log4j?

log for java,为 java 提供的日志记录工具,由 Apache 提供,是一个开源的日志记录工具;

7.2、使用 log4j 的步骤:
  1. 导包;
  2. 提供配置文件, 可以使用properties或xml, 一般使用properties. 命名必须叫log4j.properties, 位置必须放在src下;
  3. log4j的日志级别, 常用的日志级别有6个:
    • FATAL, 致命的, 不是代码导致的, 一般是服务器宕机, 网络故障, 硬件故障;
    • i. ERROR, 错误, 一般由程序故障导致;
    • i. WARN, 警告, 一般不会影响程序的运行, 但是可能存在风险;
    • INFO, 信息, 系统输出的一些简单信息;
    • i. DEBUG, 调试, 程序要认为调试的输出信息;
    • i. TRACE, 跟踪, 显示代码的详细执行流程;
  4. 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
  1. 常用的方法

    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("跟踪信息");
        }
    }
    
7.3、Mybatis 对 log4j 的支持
  • 通过标签开启对log4j的支持
<!--指定MyBatis运行时环境的配置-->
<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>
  • 导入jar包:log4j-1.2.17.jar
  • 提供log4j.properties配置文件
  • 修改日志级别
# 设置log4j的根(整体)日志级别, 同时指定日志输出的位置: CONSOLE表示控制台, LOGFILE表示日志文件
log4j.rootCategory=ERROR, CONSOLE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE

# 设置局部位置的日志级别
log4j.logger.a.b.c=TRACE

8、提取数据库配置信息

  • 提取配置信息为:db.properties

  • 在核心配置文件:mybatis.xml 中通过 标签加载资源文件;

<!--加载资源文件-->
<properties resource="db.properties" />
  • 修改数据库参数的配置
<!--配置环境 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>
<!-用 ${} 取出db.properties 中的值-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值