1.commm在代码12main中.powernode.mybatis.testMyBatisCompleteTest
package com.powernode.mybatis.test;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 java.io.IOException;//采用正式的方式,写一个完整版的MyBatis程序。 12public class MyBatisCompleteTest {public static void main(String[] args) {SqlSession sqlSession=null;try (//获得SqlSessionFactoryBuilderSqlssionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获得SqlSessionFactory对象SqlSessionFactory sqlSessionFactory= sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));///获得SqlSession对象SqlSesion = sqlSessionFactory.openSession();//执行sql语句,处理业务int count = sqlSession.insert("insertCar");System.out.println(==受影响行数==”+count);///执行到这里没问题,sqlsession提交事务.commit();} catch (Exception e) {//最好的回滚事务iff(sqlSession!=null){sqlSession.rollback();}e.printStackTrace();}finally {///关闭会话if(sqlSession!=null){sqlSession.rollback();}e.printStackTrace();}finally {///关闭会话if(sqlSession!=null){sqlSession.close();}}}}
resources下的mybatiss-config.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/powernode"/><property name="username" value="root"/><property name="password" value="lzl"/></dataSource></environment></environments><mappers><!--Xxxmapper执行.xml文件的路径 8--><!--Xxxmapper执行.xml文件的路径 8--><!--resource属性自动从类的根路径下开始寻找资源。--><mapper resource="CarMapper.xml"/><!--resource属性:从类路径中加载资源。--><!-- <mapper resource="com/CarMapper2.xml"/>--><!--url属性:从绝对路径中加载资源。--><!--语法格式:file:////绝对路径--><!--不推荐:移植性差。--><!--<mapper url="file:///d:/CarMapper2.xml"/>--></mappers></configuration>
CarMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="fdsafdsa"><!--insert语句,id是这个SQL语句的唯一标志。这个id代表了这个SQL语句。 8--><insert id="insertCar">insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)values(null,丰田霸道,30.0,"燃油车"2000-10-11";</insert></mapper>
2.使用Junit13
///名称规范:你想测试的类名+Test
//写多少个单元测试方法?
//一般是一种与测试方法相对应的业务方法。
///测试方法规范:publicvoidtestXxxx(){}
///测试方法的方法名:从test开始。假设测试方法是sum,该测试方法名称:testSum
//@Test注释非常重要,这种注释标记的方法是单元测试方法。
//单元测试有两个重要概念:
//一个是:实际值(被测业务方法的真实执行结果)
//一个是:期望值(执行此业务方法后,您期望的执行结果是多少)
commmain代码.powernode.junit.serviceMathService
package com.powernode.junit.service;////演示使用junit 13public class MathService {/*** 求和的业务方法* @param a* @param b* @return*/public int sum(int a, int b){//return a +b;return a * 10 + b * 10;}/*** 相减的业务方法* @param a* @param b* @return*/public int sub(int a, int b){return a - b;}}
commtest代码.powernode.junit.serviceMathServiceTest
package com.powernode.junit.service;import org.junit.Assert;import org.junit.Test;///单元测试类 13public class MathServiceTest {// 名称规范:您想要测试的类名+Test// 写多少个单元测试方法?// 一般来说,一种业务方法对应于一种测试方法。// 一般是一种与测试方法相对应的业务方法。/// 试验方法规范: public void testXxxx(){}//// 测试方法的方法名称:从test开始。假设测试方法是sum,该测试方法名称:testSum// @Test注释非常重要,这种注释标记的方法是单元测试方法。@Testpublic void testSum(){// 单元测试有两个重要概念:/// 一是实际值(被测业务方法的真实执行结果)/// 一是期望值(执行此业务方法后,您所期望的执行结果是多少?MathService mathService = new MathService();int actual = mathService.sum(1, 2);////////////////////int expected = 3;int expected = 30;// 加断言测试Assert.assertEquals(expected,actual);}@Testpublic void testSub(){MathService mathService = new MathService();// 实际值int actual = mathService.sub(10, 5);// 期望值int expected = 5;// 添加断言机制Asserttt.assertEquals(expected, actual);}}
pom.在xml中添加依赖
<!-- junit单元测试依赖于 13--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
3.测试我们的mybatis14
注意我们测试的是Carmaper.insertcarr
commtest代码.powernode.mybatis.testCarMapperTest
package com.powernode.mybatis.test;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;///测试我们的第一个mybatis 14public class CarMapperTest {@Testpublic void testInsertCar(){SqlSession sqlSession=null;try (//获得SqlSessionFactoryBuilderSqlssionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获得SqlSessionFactory对象SqlSessionFactory sqlSessionFactory= sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));///获得SqlSession对象SqlSesion = sqlSessionFactory.openSession();//执行sql语句,处理业务int count = sqlSession.insert("insertCar");System.out.println(==受影响行数==”+count);///执行到这里没问题,sqlsession提交事务.commit();} catch (Exception e) {//最好的回滚事务iff(sqlSession!=null){sqlSession.rollback();}e.printStackTrace();}finally {///关闭会话if(sqlSession!=null){sqlSession.rollback();}e.printStackTrace();}finally {///关闭会话if(sqlSession!=null){sqlSession.close();}}}}
4.关于mybatis集成日志组件。让我们更容易调试。154.1mybatis常见的集成日志组件有哪些?15
SLF4J(沙拉风):沙拉风是一种叫做logback的日志标准,它实现了沙拉风的标准。
LOG4J
LOG4J2
STDOUT_LOGGING
...
注:log4jlog4j2logback由同一作者开发。
*STDOUT_LOGING是标准日志,mybatis已经实现了这个标准日志。mybatis框架本身已经实现了这个标准。
4.1.只需打开即可。怎样打开?在mybatis-config.使用settings标签在xml文件中进行配置和打开。
<settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
写这个标签的时候要注意,它应该出现在environments标签之前。注意顺序。当然,没有必要记住这个顺序。
因为有dtd文件的约束。我们只需要参考dtd约束。
请注意,如果我们使用STDOUT_LOGINGmybatis标准的日志文件,则需要在mybatis中使用-config.使用settings标签在xml文件中进行配置和打开。,但是,在mybatiss中使用其他日志文件是不必要的-config.使用settings标签在xml文件中打开配置,只需在resoursec文件下引入相关配置文件logback.xml
这种实现也是可以的。您可以看到一些信息,如连接对象何时创建、何时关闭、sql语句是什么。但没有详细的日期、线程名称等。如果您想使用更丰富的配置,您可以集成第三方标志组件。
4.2集成logback日志框架。15logback日志框架实现slf4j标准。(沙拉风:日志立面。日志标准。)
4.2.第一步:引入logback依赖。pom.xml中
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency>
4.2.第二步:引入logback所需的xml配置文件。15
该配置文件的名称必须称为:logback.logbackxml或log-test.xml,不能是其他名字。
该配置文件必须放在类别的根路径下。不能是其他位置。
与日志输出相关的级别和日志的具体格式主要配置。
在resoursec文件下引入相关配置文件logback.xml
<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"><!--定义⽇志⽂零件的存储地址--><property name="LOG_HOME" value="/home"/><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:从左显示5个字符宽度%msg:⽇志消息,%n是换⾏符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!--mybatis log configure--><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- ⽇志愿输出等级,logback⽇志级包括五个:TRACE < DEBUG < INFO < WARN < ERROR --><root level="DEBUG"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root></configuration>
5.工具代码16commmain代码.powernode.mybatis.utilsSqlSessionUtil
package com.powernode.mybatis.utils;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 java.io.IOException;////mybatis工具类 16public class SqlSessionUtil {// 工具的结构方法一般都是私有化的。// 工具类的所有方法都是静态的,可以直接用类名调用。// 工具类的所有方法都是静态的,可以直接用类名调用。不需要new对象。// 结构方法私有化,以防止new对象。private SqlSessionUtil(){}private static SqlSessionFactory sqlSessionFactory;// 类加载时执行//// 第一次加载SqlSesionutil工具类时,分析mybatisis-config.xml文件。创建SqlSessionFactory对象。static {try {sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));} catch (IOException e) {throw new RuntimeException(e);}}/*public static SqlSession openSession(){SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// SqlSessionFactory对象:SqlSessionFactory对应于environment,environment通常是一个数据库。SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}*//*** 获取会话对象。* @return 会话对象*//public static SqlSession openSession(){return sqlSessionFactory.openSession();}}
commtest代码.powernode.mybatis.testCarMapperTest
public class CarMapperTest {//通过工具类再写一个 16@Testpublic void testInsertCarByUtil(){SqlSession sqlSession = SqlSessionUtil.openSession();int count = sqlSession.insert("insertCar");System.out.println(受影响行数==~~~+count);sqlSession.commit();sqlSession.close();}}