中山网站建设价格/seo排名的职位
一、简介
-
MyBatis 中文文档
https://mybatis.org/mybatis-3/zh/index.html
1.什么是 MyBatis
-
概述:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
-
源码地址:
https://github.com/mybatis/mybatis-3
- 源码下载
- MyBatis 前身是 iBatis
2.和 JDBC 对比
JDBC 缺点:
-
需要自己封装结果集
-
需要自己处理参数
-
没有共用性
-
SQL 写在 java 代码里面,耦合度很高
二、入门
1.引入依赖
引入 MyBatis 依赖
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>
引入数据库驱动依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version>
</dependency>
引入 junit 测试依赖(一般创建项目自带)
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>
2.创建MyBatis 项目
创建mybatis 空项目,添加模块
3.创建 MyBatis 核心配置文件
3.1简单使用 MyBatis 核心配置
核心配置概述:XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。
核心配置 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://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/mybatis"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments>
<!-- 映射文件--><mappers><mapper resource="cn/wjcoder/mapper/0.EmployeeMapper.xml"/></mappers>
</configuration>
4.创建 MyBatis 映射文件
4.1创建 xml 映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wjcoder.mapper.EmployeeMapper"><select id="selectEmployee" resultType="cn.sycoder.domain.Employee">select * from Blog where id = #{id}</select>
</mapper>
4.2创建 mapper 接口
public interface EmployeeMapper {/*查询员工信息*/Employee selectEmployee(@Param("id") Long id);
}
4.3项目结构
5.准备数据库
5.1数据库名称 mybatis
5.2数据表 employee 并向里面添加两条数据
insert into employee(name,age,address) values('wj',18,'上海'),('zs',19,'北京')
6.从 XML 中构建 SqlSessionFactory
6.1获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
注意,创建mapper 目录的时候,一定要避免建成一个文件,要用斜杠不能用点
7.从 SqlSessionFactory 中获取 SqlSession
SqlSession:提供了执行 SQL 的所有方法
try (SqlSession session = sqlSessionFactory.openSession()) {//获取自定义的mapperEmployeeMapper mapper = session.getMapper(EmployeeMapper.class);//使用自定义mapper操作方法Employee employee = mapper.selectEmployee(1L);System.out.println(employee);
}
三、XML 配置
1.配置概述
1.配置概述
-
概述:MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息,层级结构如下
-
configuration(配置)
-
properties(属性)
-
settings(设置)
-
typeAliases(类型别名)
-
typeHandlers(类型处理器)
-
objectFactory(对象工厂)
-
plugins(插件)
-
environments(环境配置)
-
environment(环境变量)
-
transactionManager(事务管理器)
-
dataSource(数据源)
-
-
-
databaseIdProvider(数据库厂商标识)
-
mappers(映射器)
-
2.属性 properties
使用Properties:作用这些属性可以在外部进行配置,并可以进行动态替换
2.1db.properties 配置
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456
2.2先引入 db.properties 配置文件
<!--引入properties--><properties resource="db.properties"><!-- ... --><property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/><!-- 启用默认值特性 --></properties>
注意:要按顺序创建标签,否则会报错
2.3可以通过 ${} 去把配置文件中的值取出来
<dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/>
</dataSource>
启用默认值之后可以采用如下的方式配置
<dataSource type="POOLED"><property name="driver" value="${driver:com.mysql.cj.jdbc.Driver}"/> <!-- 如果 driver 空取后面值 --><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/>
</dataSource>
3.设置(settings)
作用:改变 MyBatis 的运行时行为
3.1常用设置
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 | true | false | false |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 | true | false | False |
XML配置
<settings>
<!-- 设置数据库经典下划线命名方式转换成驼峰方式--><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
4.类型别名(typeAliases)
作用:类型别名可为 Java 类型设置一个缩写名字,它仅用于 XML 配置,意在降低冗余的全限定类名书写。
4.1使用全限定类名配置
<typeAliases>
<!-- type 类全限定类名-->
<!-- alias 表示别名--><typeAlias type="cn.wjcoder.domain.Employee" alias="emp"></typeAlias></typeAliases>
4.2使用包名方式
<typeAliases><package name="cn.sycoder.domain"/>
</typeAliases>
4.3使用注解方式
@Alias("author")
public class Author {...
}
4.4常见的 Java 类型内建的类型别名的规律
- 基本类型前面加下划线
- 引用数据类型使用首字母小写
5.环境配置(environments)
作用:可以获取多数据源,可以选用适合要求的数据源。开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。
注意:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境
代码操作
<environments default="test">
<!-- 开发环境--><environment id="development"><transactionManager type="JDBC"/>
<!-- 配置数据库连接要素--><dataSource type="POOLED"><property name="driver" value="${driver:com.mysql.cj.jdbc.Driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment>
<!-- 测试环境--><environment id="test"><transactionManager type="JDBC"/><!-- 配置数据库连接要素--><dataSource type="POOLED"><property name="driver" value="${driver:com.mysql.cj.jdbc.Driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>
5.1事务管理器(transactionManager)
MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]")。
- JDBC-这个配置直接使用了 JDBC 的提交和回滚功能,如果不需要自动提交,可以通过设置属性关掉
<transactionManager type="JDBC"><property name="skipSetAutoCommitOnClose" value="true"/>
</transactionManager>
- MANAGED – 这个配置几乎没做什么,不提交或回滚一个连接,默认情况下它会关闭连接,可以设置手动关闭
<transactionManager type="MANAGED"><property name="closeConnection" value="false"/>
</transactionManager>
5.2数据源(dataSource)
概述:dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- 三种内建的数据源类型
-
UNPOOLED:不使用数据库连接池,每次操作数据库都需要获取连接
-
POOLED:使用数据库连接池,就是把建立的连接缓存起来,下次使用直接拿,不需要新建
-
poolMaximumActiveConnections-在任意时间可存在的活动(正在使用)连接数量,默认值:10 poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
-
-
JNDI:满足 EJB 或应用服务器这类容器中使用需求,可以调用上下文的数据源
6.映射器(mappers)
6.1作用:帮助MyBatis 寻找 sql 语句,寻找映射文件
6.2 配置方式:
- 使用相对于类路径的资源引用
<mappers><mapper resource="cn/wjcoder/mapper/EmployeeMapper.xml"/>
</mappers>
- 使用映射器接口实现类的完全限定类名
<mappers><mapper class="cn.wjcoder.mapper.EmployeeMapper"/>
</mappers>
- 将包内的映射器接口全部注册为映射器(使用这种必须保证 mapper.xml 和 mapper 文件在同一包下 )
<mappers><package name="cn.wjcoder.mapper"/>
</mappers>
四、日志
为什么现在开始使用日志?早学会早使用,方便观察sql的参数信息。
Mybatis 通过使用内置的日志工厂提供日志功能,具体的实现:
SLF4J, Apache Commons Logging,Log4j 2, Log4j (3.5.9 起废弃), JDK logging
使用前加上配置
<settings>...<setting name="logImpl" value="LOG4J"/>...</settings>
logImpl 可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING
1.Log4j 配置示例
1.1导入依赖
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
1.2创建 log4j.properties
log4j.rootLogger=ERROR, stdoutlog4j.logger.cn.sycoder.mapper.EmployeeMapper=TRACElog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
1.3设置 mybatis-config.xml
<settings>
<!-- 设置数据库经典命名下划线方式字段转换成驼峰方式--><setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 配置日志--><setting name="logImpl" value="LOG4J"/>
</settings>
注意:忘记配置 setting 也能够自动装载,具体请看源码
ERROR WARN INFO DEBUG
五、使用MyBatis增删改查
1.添加操作
1.1添加接口方法
void insert(@Param("emp") Employee emp);
1.2添加xml 配置
<insert id="insert">insert into employee value(null,#{emp.name},#{emp.age},#{emp.address},#{emp.empDetail})
</insert>
2.删除
2.1添加接口方法
void delete(@Param("id")Long id);
2.2添加xml 配置
<delete id="delete">delete from employee where id = #{id}
</delete>
3.修改
3.1添加接口方法
void update(@Param("emp")Employee emp);
3.2添加xml 配置
<update id="update">update employee set name = #{emp.name} where id = #{emp.id}
</update>
4.查询
4.1添加接口方法
Employee selectEmployee(@Param("id") Long id);
4.2添加xml 配置
<select id="selectEmployee" resultType="cn.wjcoder.domain.Employee">select * from employee where id = #{id}
</select>