开发log4j配置_「MyBatis」MyBatis修炼之二 Maven项目配置MyBatis连接mySQL

创建Maven项目

首先在Eclipse中创建一个基本的Maven项目,按照如下步骤进行操作即可 1、在Eclipse中打开【File】-->【New】选择【other】(或者使用快捷键 Ctrl + N)打开新建项目向导

daedc9f639923b87cb45263989a95268.png

2、选择【Maven】下的【Maven Project】,点击【Next】

e6da939eab4afdb57f77d47e8f768203.png

3、选中【Create a simple project (skip archetype selection)】的复选框,点击【Next】 4、输入Group Id,Artifact Id,其他按照默认填写,然后点击【Finish】

a2379220174b1119e2e3df72b6c3d074.png

完成以上操作之后,等待片刻,就可以得到一个基于Maven的基本结构了,得到的Maven项目的目录结构如下所示:

2e59a842e1dc9fb8014e48898107a42e.png

5、打开Maven项目的配置文件pom.xml,添加mybatis和mysql的依赖

                org.mybatis            mybatis            3.3.0mysql            mysql-connector-java            5.1.35

我们可以通过以下链接查找我们需要的Mavne依赖包 https://mvnrepository.com/ http://maven.outofmemory.cn/search/?q= http://search.maven.org/

我们还需要添加Log4j、JUnit的驱动依赖。最后我们得到的pom.xml文件的内容如下:

4.0.0mybatis  alex  0.0.1-SNAPSHOTUTF-8junit            junit            4.12testorg.mybatis            mybatis            3.3.0mysql            mysql-connector-java            5.1.35org.slf4j            slf4j-api            1.7.12org.slf4j            slf4j-log4j12            1.7.12log4j            log4j            1.2.17org.apache.maven.plugins                maven-compiler-plugin                2.3.21.81.8

当对Maven的配置进行修改后,我们还需要在项目上单击鼠标右键,在【Maven】中选择【Update Project ...】(或者直接在项目中,使用Alt + F 快捷键)来更新外部依赖包。

让MyBatis跑起来

1、准备数据库 首先创建一个数据库,编码方式设置为UTF-8,通过执行下面的SQL语句创建一个名为mybatis的数据库。

CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

然后再创建一个名为country的表,并插入一些数据。

use mybatis;CREATE TABLE Country(    id int(15) NOT NULL AUTO_INCREMENT,    countryname varchar(255) NOT NULL,    countrycode varchar(255) NOT NULL,    PRIMARY KEY(id));insert INTO country(countryname,countrycode)values('中国','CN'),('美国','US'),('英国','GB'),('法国','FR');

2、配置MyBatis 配置MyBatis有多种方式,在此我们首先使用的最基础的XML形式进行配置。使用XML形式进行配置,首先在src/main/resources下面创建mybatis-config.xml配置文件,然后输入如下内容

<?xml version="1.0" encoding="UTF-8" ?>    

配置说明:

中的logImpl属性配置指定使用LOG4J输出日志。

元素下面配置了一个包的别名。通常确定一个类的时候需要使用类的全限定名称,例如mybatis.simple.model.Country,在MyBatis中需要频繁的使用类的权限定名称,为了方便使用,我们配置了mybatis.simple.model包,这样配置以后,我们再使用该包下的类的时候就不用再写上包名了,直接使用类名接口,如 Country 。

环境配置中主要配置了数据库连接。 dataSource的类型可以配置成其内置类型之一,如UNPOOLED、POOLED、JNDI.

如果将类型设置为UNPOOLED,MyBatis会为每一个数据库操作创建一个新的连接,并关闭它。该方式适用于只有小规模数据并发用户的简单应用程序上。 如果将属性设置为POOLED,MyBatis会创建一个数据库连接池,连接池中的一个连接将会被用作数据库操作。一旦数据库操作完成,MyBatis会将此连接返回给连接池。在开发测试环境中,经常使用该种方式。 如果将类型设置为JNDI,MyBatis从在应用服务器向配置好的JNDI数据源dataSource获取连接。在生产环境中优先考虑这种方式。

中配置了一个包含完整路径的mapper.xml(CountryMapper.xml)文件,这是一个MyBatis的SQL语句和映射配置文件。

3、创建实体类和Mapper.xml文件 MyBatis是一个结果映射框架,这里创建的实体类实际上是一个数据值对象(Data Value Object),在实际应用中一般会对应一个实体,用于INSERT、UPDATE、DELETE、SELECT操作。

关于Mapper的命名方式:在MyBatis中,根据MyBatis官方的习惯,一般用Mapper作为XML和接口类名的后缀。(CountryMapper.xml)

在src/main/java下面创建一个基础的包mybatis.simple.model,根据数据库表country表,创建实体类Country

package mybatis.simple.model;public class Country {    private Long id;    private String countryname;    private String countrycode;    public Country() {        super();    }    public Country(Long id, String countryname, String countrycode) {        super();        this.id = id;        this.countryname = countryname;        this.countrycode = countrycode;    }    public Long getId() {        return id;    }    public void setId(Long 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;    }    @Override    public String toString() {        return "Country [id=" + id + ", countryname=" + countryname + ", countrycode=" + countrycode + "]";    }}

然后在src/main/resource(也可以是src/main/java)下创建mybatis/simple/mapper目录,再在该目录下创建CountryMapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>            select * from country    

SQL定义在CountryMapper.xml文件中,里面的配置如下:

:XML的根元素,属性namespace定义了当前XML的命名空间

:我们所定义的select查询。还有、、等标签 id属性:定义当前语句的唯一id,调用SQL语句时,通过id区别

resultType:定义当前SQL语句的返回值类型。此处就是指实体类Country,前面配置中提到的别名主要用于这里,如果没有配置,此处就需要写成 resultType="mybatis.simple.model.Country"

4、配置Log4j 配置Log4j,以便查看MyBatis操作数据库的过程 在src/main/resources中添加log4j.properties配置文件

#全局配置log4j.rootLogger=DEBUG, stdout#mybatis日志配置log4j.logger.mybatis.simple.mapper=TRACE#控制台输出配置log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

如果用过Log4j日志组件的人应该知道,配置中log4j.logger.mybatis.simple.mapper对应的是mybatis.simple.mapper包,但是在此实例中,Java目录下并没有这个包名,只在资源目录下有mapper目录。

MyBatis的日志实现中,所谓的包名实际上就是XML配置中的namespace属性值的一部分。(后面介绍接口相关部分时,由于namespace属性值必须和接口的权限定类名相同,因此才会真正对应到java包。当使用纯注解方式时,使用的就是纯粹的包名。)

MyBatis日志的最低级别是TRACE,在这个日志级别下,MyBatis会输出执行SQL过程中的详细信息。

5、编写测试代码 首先在src/test/java中创建mybatis/simple/test包,然后创建CountryMapperTest测试类

package mybatis.simple.test;import java.io.IOException;import java.io.Reader;import java.util.List;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 mybatis.simple.model.Country;public class CountryMapperTest {    private static SqlSessionFactory sessionFactory;        @BeforeClass    public static void init(){        try{            //通过配置文件获取连接数据库连接信息            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");                        //通过配置信息来构建一个SqlSessionFactory            sessionFactory = new SqlSessionFactoryBuilder().build(reader);        }catch(IOException e){            e.printStackTrace();        }    }        @Test    public void test(){        //通过SqlSessionFactory打开一个会话        SqlSession openSession = sessionFactory.openSession();                try{            List countryList = openSession.selectList("selectAll");            printCountryList(countryList);        }finally{            //关闭session会话            openSession.close();        }    }        private void printCountryList(List countryList){        for(Country country : countryList){            System.out.println(country.getId()+"--"+country.getCountryname()+"--"+country.getCountrycode());        }    }}

说明:

通过Resources工具类将mybatis-config.xml配置文件读入Reader。

再通过SqlSessionFactoryBuilder建造类使用Reader创建SqlSessionFactory工厂对象。在创建SqlSessionFactory对象的过程中,首先解析mybatis-config.xml配置文件,读取配置文件中mappers配置后会读取全部的Mapper.xml进行具体方法的解析,在这些解析完成后,SqlSessionFactory就会包含了所有的属性配置和执行SQL的信息

使用时通过SqlSessionFactory工厂对象获取一个SqlSession。

通过SqlSession的selectList方法查询到CountryMapper.xml中id="selectAll"的方法,执行SQL查询。

MyBatis底层使用JDBC执行SQL,获取查询结果集ResultSet后,根据resultType的配置将结果集映射为Country类型的集合,返回查询结果,这样就得到了最后的countryList,并将结果输出到控制台

最后一定不要忘记关闭SqlSession,否则会因为连接没有关闭导致数据库连接数过多,而造成系统崩溃。

6、进入CountryMapperTest测试类,右键选择【Run as】--> 【1 JUnit Test】

721512eff26b35f680b4313d284d4c02.png

我们将会在控制台看到如下输出结果

DEBUG [main] - Opening JDBC ConnectionDEBUG [main] - Created connection 399931359.DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@17d677df]DEBUG [main] - ==>  Preparing: select * from country DEBUG [main] - ==> Parameters: TRACE [main] - <==    Columns: id, countryname, countrycodeTRACE [main] - <==        Row: 1, 中国, CNTRACE [main] - <==        Row: 2, 美国, USTRACE [main] - <==        Row: 3, 英国, GBTRACE [main] - <==        Row: 4, 法国, FRDEBUG [main] - <==      Total: 41--中国--CN2--美国--US3--英国--GB4--法国--FRDEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@17d677df]DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@17d677df]DEBUG [main] - Returned connection 399931359 to pool.

从日志中我们可以看到完整的SQL输出和结果输出,从日志对应的级别可以发现SQL、参数、结果数都是DEBUG级别,具体的查询结果列和数据都是TRACE级别。


项目源码下载地址:https://github.com/JFAlex/MyBatis/tree/master/MyBatis_No.2/alex

转发+关注 私信我回复666领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值