深圳市建设银行网站首页,长春做网站哪家公司好,4399在线观看免费高清1080,做的网站怎么放到域名文章目录1.ORM2. 数据库表3. 入门程序3.1 创建项目3.2 开发3.3 一个比较完整规格的mybatis程序3.4 测试案例 junit3.5 对第一个mybatis使用junit测试3.6 集成日志框架logback3.7mybatis工具类编写1.ORM
Object(JVM中的Java对象) Relational(关系型数据库) Mapping(映射) mybat…
文章目录1.ORM2. 数据库表3. 入门程序3.1 创建项目3.2 开发3.3 一个比较完整规格的mybatis程序3.4 测试案例 junit3.5 对第一个mybatis使用junit测试3.6 集成日志框架logback3.7mybatis工具类编写1.ORM
Object(JVM中的Java对象) Relational(关系型数据库) Mapping(映射) mybatis是一个半自动化的ORM可以将数据库中的一条记录映射到一个Java对象但是sql语句要自己写所有说是半自动化。Hibernate是一个全自动化的ORM不用自己写sql语句。
2. 数据库表
DROP TABLE IF EXISTS t_car;
CREATE TABLE t_car (id bigint(20) NOT NULL COMMENT 自然主键,car_num varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 汽车编号,brand varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 汽车品牌,guide_price decimal(10, 2) NULL DEFAULT NULL COMMENT 厂商指导价,produce_time char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 生产日期,car_type varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 汽车类型燃油车 新能源 氢能源,PRIMARY KEY (id) USING BTREE
) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT Dynamic;SET FOREIGN_KEY_CHECKS 1; 3. 入门程序
3.1 创建项目
1创建一个名为mybatis的空Project 2修改使用JDK17 3修改指向自己下载的maven3.8.8 3.2 开发
1新建maven模块 2resources 放到这个包下面的一般是配置文件资源直接放到这里等同于放到类的根目录之下。 3指定打包方式
packagingjar/packaging(4)引入依赖 dependencies!-- mybatis依赖 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.10/version/dependency!-- mysql依赖 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.37/version/dependency/dependencies(5)编写mybatis核心配置文件mybatis-config.xml
官网例子
(6)编写XxxxMapper.xml文件 官网例子
(7)在mybatis-config.xml文件中指定XxxxMapper.xml文件的路径
!--执行XxxxMapper.xml文件的路径--
!--resource属性会自动从类的根路径下开始查找资源--
mapper resourceCarMapper.xml/8编写MyBatis程序。 (9)mybatis的事务管理
* 在mybatis-config.xml文件中可以通过以下的配置进行mybatis的事务管理transactionManager typeJDBC/
* type属性的值包括两个JDBC(jdbc)MANAGED(managed)type后面的值只有以上两个值可选不区分大小写。
* 在mybatis中提供了两种事务管理机制第一种JDBC事务管理器第二种MANAGED事务管理器
* JDBC事务管理器mybatis框架自己管理事务自己采用原生的JDBC代码去管理事务conn.setAutoCommit(false); 开启事务。....业务处理...conn.commit(); 手动提交事务使用JDBC事务管理器的话底层创建的事务管理器对象JdbcTransaction对象。如果你编写的代码是下面的代码SqlSession sqlSession sqlSessionFactory.openSession(true);表示没有开启事务。因为这种方式压根不会执行conn.setAutoCommit(false);在JDBC事务中没有执行conn.setAutoCommit(false);那么autoCommit就是true。如果autoCommit是true就表示没有开启事务。只要执行任意一条DML语句就提交一次。* MANAGED事务管理器mybatis不再负责事务的管理了。事务管理交给其它容器来负责。例如spring。我不管事务了你来负责吧。对于我们当前的单纯的只有mybatis的情况下如果配置为MANAGED那么事务这块是没人管的。没有人管理事务表示事务压根没有开启。没有人管理事务就是没有事务。* JDBC中的事务如果你没有在JDBC代码中执行conn.setAutoCommit(false);的话默认的autoCommit是true。* 重点以后注意了只要你的autoCommit是true就表示没有开启事务。只有你的autoCommit是false的时候就表示开启了事务。(10)小结
MyBatisIntroductionTest.java
package com.sdnu.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.FileInputStream;
import java.io.InputStream;public class MyBatisIntroductionTest {public static void main(String[] args) throws Exception{//获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();//获取SqlSessionFactory对象//Resources.getResourceAsStream默认就是从类的根路径下开始查找资源//一般情况下一个数据库对应一个SqlSessionFactory对象InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(is);//获取SqlSession对象SqlSession sqlSession sqlSessionFactory.openSession();//执行SQL语句// 返回值是影响数据库表中的记录条数int count sqlSession.insert(insertCar);System.out.println(插入了几条记录? count);//手动提交sqlSession.commit();}
}mybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/sdnu/property nameusername valueroot/property namepassword valueroot//dataSource/environment/environmentsmappers!--执行XxxxMapper.xml文件的路径--!--resource属性会自动从类的根路径下开始查找资源--mapper resourceCarMapper.xml//mappers
/configurationCarMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacesdkskkdkdinsert idinsertCarinsert into t_car(id, car_num, brand, guide_price, produce_time, car_type)values (null, 1003, 丰田霸道, 30.00, 2000-10-11, 燃油车)/insert
/mapper3.3 一个比较完整规格的mybatis程序
package com.sdnu.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*/
public class MyBatisCompleteTest {public static void main(String[] args) {SqlSession sqlSession null;try {SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(Resources.getResourceAsStream(mybatis-config.xml));//开启会话底层开启事务sqlSession sqlSessionFactory.openSession();//执行sql语句处理相关业务int count sqlSession.insert(insertCar);System.out.println(count);//执行到这里没有发送异常提交事务sqlSession.commit();} catch (Exception e) {if(sqlSession ! null){sqlSession.rollback();}e.printStackTrace();} finally {if(sqlSession ! null){sqlSession.close();}}}
}3.4 测试案例 junit
加入junit依赖 dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency/dependencies要测试的类
package com.sdnu.junit.service;public class MathService {public int sum(int a, int b){return a b;}public int sub(int a, int b){return a - b;}
}测试方法
package com.sdnu.junit.service;import org.junit.Assert;
import org.junit.Test;public class MathServiceTest {Testpublic void sum(){//单元测试有两个重要的方法//一个是实际值被测试方法真正执行的结果一个是期望值期望得到的结果MathService mathService new MathService();//实际值int actual mathService.sum(1, 2);//期望值int expected 33;//加断言测试结果Assert.assertEquals(expected, actual);}Testpublic void sub(){MathService mathService new MathService();int actual mathService.sub(10, 5);int expected 5;Assert.assertEquals(expected, actual);}
}3.5 对第一个mybatis使用junit测试
添加依赖 dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency测试程序
package com.sdnu.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;public class CarMapperTest {Testpublic void testInsertCar(){SqlSession sqlSession null;try {SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(Resources.getResourceAsStream(mybatis-config.xml));//开启会话底层开启事务sqlSession sqlSessionFactory.openSession();//执行sql语句处理相关业务int count sqlSession.insert(insertCar);System.out.println(count);//执行到这里没有发送异常提交事务sqlSession.commit();} catch (Exception e) {if(sqlSession ! null){sqlSession.rollback();}e.printStackTrace();} finally {if(sqlSession ! null){sqlSession.close();}}}
}3.6 集成日志框架logback logback日志框架实现了slf4j标准。(沙拉风日志门面。日志标准。)第一步引入logback的依赖。dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.11/version/dependency第二步引入logback所必须的xml配置文件。这个配置文件的名字必须叫做logback.xml或者logback-test.xml不能是其它的名字。这个配置文件必须放到类的根路径下。不能是其他位置。主要配置日志输出相关的级别以及日志具体的格式。3.7mybatis工具类编写
SqlSessionUtil.java
package com.sdnu.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工具类*/
public class SqlSessionUtil {//工具类的构造方法一般是是私有化的//工具类的一般方法一般是静态方法private static SqlSessionFactory sqlSessionFactory;private SqlSessionUtil(){}static {try {sqlSessionFactory new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession openSession(){return sqlSessionFactory.openSession();}
}测试 Testpublic void testInsertCarByUtil(){SqlSession sqlSession SqlSessionUtil.openSession();int count sqlSession.insert(insertCar);System.out.println(count);sqlSession.commit();sqlSession.close();}