mybatis从入门到精通(刘增辉著)-读书笔记第一章

前言:

本读书笔记共11章节

本版本采用idea编写,不采用作者书中所说的eclipse

jdk8

maven3.6.1

mysql5.7

1、idea新建maven项目,配置pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.orange</groupId>
    <artifactId>mb001</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--测试包-->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.12</version>
           <scope>test</scope>
       </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.22</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.22</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>
</project>

2、 准备数据库

CREATE TABLE country2(
id int NOT NULL AUTO_INCREMENT,
countryname varchar(255) NULL, 
countrycode varchar(255) NULL, 
PRIMARY KEY (id)
)
insert country (countryname,countrycode) 
values ('中国','CN'),('美国','us' ),('俄罗斯','RU'),('英国','GB'),('法国','FR');

3、配置 MyBatis

#配置 MyBatis 有多种方式,本节使用最基础最常用的 XML 形式进行配置
#使用XML形式进行配置,首先在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>
    <!--设置日志-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <package name="com.orange.model"/>
    </typeAliases>
    <!--配置数据库-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
                <property name="" value=""/>
            </transactionManager>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mb"/>
                <property name="username" value="root"/>
                <property name="password" value="你的数据库密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/orange/mapper/CountryMapper.xml"></mapper>
    </mappers>
</configuration>


#简单讲解 下这个配置。<settings 中的 logimp 属性配置指定使用 LOG4J 输出日志
<typeAliases>元素下面配置了包的别名通常确定个类的时候需要使用类的全限定名称 ,例如com.orange.model.Country 。在 MyBatis 需要频繁用到类的全限定名称,为了方便使用,我们配置了com.orange.model包,这样配置后,在使用类的时候不需要写包名的部分,只使用 Country 即可。
<environments>环境配置中主要配置了数据库连接,数据库的url jdbc:mysql://localhost:3306/mybatis ,使用的是本机MySQL中的 mybatis数据库,后面的 username password 分别是数据库的用户名和密码(如果你的数
据库用户名及密码和这里的不一样,请修改为自己数据库可用的用户名和密码〉
<mappers>中配置了 个包含完整类路径的CountryMapper.xml ,这是 MyBatis SQL语句和映射配置文件,这个 XML文件会在后面的章节中介绍
4、创建实体类和 Mapper.xml 文件
#My Batis 个结果映射框架,这里创建的实体类实际上是 个数据值对象( Data Value Object ),在实际应用中,个表 般会对应一个实体,用于刑SERT UPDATE DELETE简单的 SELEC 操作,所以姑且称这个简单的对象为实体类
在src/main/iava下创建基础的包com.orange,在这个包下面再创建model根据数据库表country,在 model 包下创建实体类Country ,代码如下

package com.orange.model;

public class Country {
    private Integer id;
    private String countryname;
    private String countrycode;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCountryname() {
        return countryname;
    }

    public void setCountryname(String countryname) {
        this.countryname = countryname;
    }

    public String getCountrycode() {
        return countrycode;
    }

    public void setCountrycode(String countrycode) {
        this.countrycode = countrycode;
    }
}

#在src/main/resources 下面创 com/orange/mapper 目录,再在该目录下面创建CountyrMapper.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">
<mapper namespace="com.orange.mapper.CountryMapper">
    <select id="selectAll" resultType="Country">
            select  * from country
    </select>
</mapper>


#SQL 定义在 CountryMapper.xml 文件中,里面的配置作用如下。
<mapper> : XML 的根元素 属性namespace 定义了当 XML的命名空间。
• <select>元素 :我们所定义的一个 SELECT 查询。
• id属性:定义了当前 SELECT 查询的唯一一个resultType :定义了当前查询的返回值类型,此处就是指Country ,前面配置中提到的别名主要用于这里,如果没有设置此处就需要写 resultType=”com.orange.model.Country
select id, ...: 查询 SQL 语句。
创建好实体和 Mapper.xml 接下来要有针对性地配 Log4j,让 MyBatis 在执行数据库操作的时候可以将执行的 SQL 信息输出到控制台。

5、配置 Log4j 以便查看 MyBatis 操作数据库的过程

#在src/main/resources中添加 log4j properties 配置文件,输入如下内容
#全局配置
log4j.rootLogger=ERROR, stdout
#mybati日志
log4j.logger.com.orange.mapper=TRACE
#控制台输出日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

##
用过 Log4j 日志组件的人可能都会知道,配直中的 log4j logger com.orange.mapper 对应的是com.orange.mapper包,但是在这个例子中, Java录下并没有这个包名 ,只在资源 目录下有mapper目录MyBatis 的日志实现中,所谓的包名实际上是XML配直中的namespace属性值的一部章节介绍结合接口使用的相关内时,由于口namespace 性值必须和接口全限定类名相同 ,因此才会真正对应圭 Java 中的包 当使用纯注解方式时,使用的就是纯粹的包名MyBatis 日志的 最低级 TRACE ,在这个日志级别下, MyBatis 会输出执行 SQL 过程中的详细信息,这个级别特别适合在开发时使用

6、编写测试代码让 MyBatis 跑起来

#首先在src/test/java创建测试类,如下

package com.orange;

import com.orange.model.Country;
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.BeforeClass;
import org.junit.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class CountryMapperTest {
    private static SqlSessionFactory sqlSessionFactory;

    /*
    * 前置初始化方法
    * */
    @BeforeClass
    public static void init() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        reader.close();
    }

    @Test
    public void testSelectAll(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<Country> countryList = sqlSession.selectList("selectAll");
        for (Country country : countryList) {
            System.out.println(country.getCountrycode()+"==="+country.getCountryname());
        }
        //不要忘记关闭数据库连接
        sqlSession.close();
    }
}


#运行test方法


对上面这段代码做一个简单的说明,具体如下。通过 Resources工具类将 mybaits-config.xm 配置文件读Reader
再通过 SqlSessionFactoryBuilder建造类使用 Reader 创建 SqlSessionFactory
工厂对象。在创建 SqlSessionFactory 对象的过程中 首先解 mybatis-config.xml 配置
文件,读取配置文件中的 mappers 配置后会读取全部的 Mapper xml 进行具体方法的解析,在这些解析完成后, SqlSessionFactory就包含了所有的属性配置和执行 SQL 的信息。使用时通过 SqlSessionFactory 工厂对象获取sqllSession通过 SqlSessionselectList 方法查 Coun Mapper nl id selectAll的方法,执行查询底层使用 JDBc执行 SQL ,获得查询结果集 ResultSet 后,根据 resultType的配置将结果映射为 Country 类型的集合 返回查询结果。这样就得到了最后的查询结果 countryList ,简单将结果输出到控制台。最后不要忘记关闭SqlSession ,否 会因为连接没有关闭导致数据库连接数过多,造成系统崩溃。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@我不是大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值