MyBatis 总结&模板
简述
从8月2日到昨天9月10日,历时一个多月,共计30篇博客,把MyBatis的基础学完了,肥肠苏福~
本篇博客会对mybatis的知识做一个自我总结,并附上各个配置文件的代码,方便以后项目的构建。
知识总结
首先,MyBatis是一个持久层框架,直接和数据库交互,通过注解或者xml配置的方法,可以大大减少开发者的工作量,mybatis使用了orm的思想——object relational mapping的思想,使数据库中和表和java里的实体类相对应,通过操作实体类实现交互数据库,使开发者只需关注于sql语句,不用关心jdbc的连接与执行。
MyBatis的核心类是sqlsession类,该类通过getMapper方法生成数据库表的代理对象,通过代理对象的方法实现CRUD。
MyBatis的一级缓存是sqlsession里的数据区域,查询的结果会存放在该缓存中,注意一级缓存的区域是一个sqlsession。
MyBatis的二级缓存是sqlsessionfactory里的数据区域,相对与一级缓存来说,实现了不同的sqlsession之间缓存的共享。
模板
<?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>com.hjj</groupId> <artifactId>ch3_Mybatis_20181003153_1</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!-- 配置jdk --> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
<?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"> <!-- mybatis的主配置文件 --> <configuration> <properties resource="db.properties"></properties> <!-- 使用typeAliases配置别名,它只能配置domain中的类名 --> <typeAliases> <!-- typeAlias用于配置别名 type属性指定的是实体类全限定类名,alias属性指定别名,当指定了别名就不再区分大小写--> <!--<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias> --> <!-- 用于指定要配置别名的包,当指定后,该包下的实体类都会注册别名,类名就是别名,不再区分大小写 --> <package name="com.entity"/> </typeAliases> <!-- 配置环境 --> <environments default="mysql"> <!-- 配置mysql的环境 --> <environment id="mysql"> <!-- 配置事务类型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源,也叫连接池,有三个取值 --> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,指的是每个dao独立的配置文件 --> <mappers> <!-- <mapper resource="com/dao/IDepartmentDao.xml"/>--> <!-- 用于指定dao接口所在的包,当指定完成之后,就不需要再写mapper以及resource或者class --> <package name="com.dao"></package> </mappers> </configuration>
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
<?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">
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/数据库名 jdbc.username=root jdbc.password=123456
private InputStream in; private SqlSession sqlSession; private dao接口类名 dao接口名; @Before//用于在测试方法执行前执行 public void init() throws Exception{ //1.读取配置文件生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //.2获取SqlSessionFactory对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.获取SqlSession对象 sqlSession = factory.openSession(); //4.获取dao的代理对象 dao接口名 = sqlSession.getMapper(dao接口类名.class); } @After//用于在测试方法执行后执行 public void destroy() throws Exception{ //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); in.close(); }
一点一点积累,一点一点蜕变!