更简化的办法:通过packge的name属性直接直接指定包名,mybatis会自动扫描指定包下的JavaBean,
并默认设置一个别名,默认名称为JavaBean的非限定类名.
例:
<typeAliases>
<package name="cn.smbms.model"/>
</typeAliases>
mappers元素
<mappers>
//第一种:设置指定mapper文件相对路径
<mapper resource="cn/smbms/dao/UserMapper.xml" />
//第二种:设置mapper文件所在包
<package name="cn.smbms.dao" />
</mappers>
mapper.xml SQL映射文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace的值为UuserMapper文件的所在路径 -->
<mapper namespace="cn.smbms.dao.UserMapper">
<!-- 查询用户表记录数 id为唯一调用的方法名 resultType为返回值类型-->
<select id="getAllUserName" resultType="String">
select userName from smbms_user
</select>
<select id="getAllUser" resultType="User">
select * from smbms_user
</select>
</mapper>
为什么需要使用框架技术?
框架技术是一个应用程序的半成品,提供可重用的公共结构,是按一定规则组织的一组组件。
主流框架
Strtus2
MVC设计模式的实现,拦截器,可变和可重用的标签.
HIBERNATE
ORM,简化数据库操作 DAO层.
Spring
依赖注入容器/AOP的实现
声明式事物
简化JavaEE应用
粘合剂,将上面两个框架组装起来
Spring MVC
结构最清新的MVCModel2实现
高度可配置,支持多种视图技术
定制化开发
MyBatis
半自动化的ORM实现
dao层
动态SQL
小巧灵活,简单易学
使用maven创建自动导包
- 1. 下载maven压缩包:http://maven.apache.org/download.cgi
- 2. 解压下载好的压缩包,创建环境变量
a) 设置MAVEN_HOME:解压目录
b) 设置PATH环境变量为:%MAVEN_HOME%\bin
- 3. 在eclipse导入maven:Window-Preferences-Maven-Installations-Add添加maven选中,设置User Settings 两个都设置为maven解压目录下的conf-settings.xml文件.
- 4. 配置settings.xml文件
设置压缩包储存目录
<localRepository>F:\apache-maven-3.5.2\warehouse</localRepository>
设置JDK版本(放在<profiles>内</profiles>)
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
设置阿里云库(放在<mirrors>内</mirrors>)
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 5. 设置Window-Preferences-Maven-User Settings重新导入settings.xml文件应用,自动下载常用包文件到设定目录.
- 6. 创建maven项目,在pom.xml文件里编写需要导入的包
查询所在目录:http://maven.aliyun.com/nexus/content/groups/public/
或自己配置的文件保存目录下查询
格式参考:
<dependencies>
<dependency>
<groupId>所在目录名</groupId>
<artifactId>文件名</artifactId>
<version>文件版本</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
MyBatis环境搭建或自己导包
第一步:导包
第二步:编写MyBatis核心配置文件
编写数据库连接配置文件 db.properties
jdbc.url=jdbc:mysql://localhost:3306/nodemgr_node_and_auth?serverTimezone=GMT&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.user=nodeManagement
jdbc.password=nodeManagement
jdbc.filters=stat
jdbc.maxActive=20
jdbc.initialSize=1
jdbc.maxWait=60000
jdbc.minIdle=10
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.validationQuery=SELECT 'x'
jdbc.testWhileIdle=true
jdbc.testOnBorrow=false
jdbc.testOnReturn=false
jdbc.maxOpenPreparedStatements=20
jdbc.removeAbandoned=true
jdbc.removeAbandonedTimeout=1800
jdbc.logAbandoned=true
|
编写logback配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 开发环境 -->
<springProfile name="dev">
<appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<!--配置文件日志输出-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志打印过滤 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%d - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>D:/logs/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%d - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>D:/logs/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--配置控制台日志输出-->
<root level="info">
<appender-ref ref="consolelog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</springProfile>
<!-- 测试环境 -->
<springProfile name="test">
<appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<!--配置文件日志输出-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志打印过滤 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%d - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>D:/logs/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%d - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>D:/logs/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--配置控制台日志输出-->
<root level="info">
<appender-ref ref="consolelog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<!--配置文件日志输出-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志打印过滤 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%d - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>var/logs/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%d - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>var/logs/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--配置控制台日志输出-->
<root level="info">
<appender-ref ref="consolelog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</springProfile>
</configuration>
|
编写MyBatis核心文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置全局懒加载 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="true"/>
</settings>
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
</configuration>
|
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的项目.
MyBatis的三个基本要素
MyBatis核心接口和类
SqlSessionFactoryBuilder
用过即丢,其生命周期只存在于方法体内
可重用其来创建多个SqlSessionFactory实例->调用build()方法
负责构建SqlSessionFactory,并提供多个build方法的重载
SqlSessionFactory
是每个mybatis应用的核心
作用:创建SqlSession实例 调用openSession(boolean autoCommit)方法,注:参数默认为true(关闭事务控制),false(开始事务控制)
作用域:Application
生命周期与应用的生命周期相同
单例模式:存在于整个运行时,并且同时只存在一个对象实例
SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
两种使用方式:
通过SqlSession实例直接运行映射的sql语句
* 基于Mapper接口方式操作数据
在mapper.xml同级目录下创建一个接口,返回值类型为sql语句接收的类型,方法名跟mapper里面指定的id一致
mybatis-config.xml系统核心配置文件
settings的常用全局属性的设置(红色为默认的)
cacheEnabled 对在此配置文件下的所有缓存进行全局性开关 (true/false);
lazyLoadingEnabled 全局设置懒加载.(相关联不进行初始化加载).(true/false);
autoMappingBehavior mybatis对于resultMap自动进行映射匹配(NONE/PARTIAL/FULL);
typeAliases类型别名设置(简化返回类型冗余的代码)