学习MyBatis
Posted 月下赶路人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习MyBatis相关的知识,希望对你有一定的参考价值。
文章目录
MyBatis
基于Java的数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。
(1)ORM对象关系映射,一种数据持久化技术。
O:Object 对象===java中的实体类---对象
R:Relation 关系===关系型数据库---表
M:Mapping 映射===提供一种映射的机制
(2)半自动化:在映射过程中需要写一些SQL语句才能完成指定功能
搭建
-
创建Maven工程。
-
添加项目依赖。
<!--MyBatis项目依赖包-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 日志包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
- 创建MyBatis全局配置文件。
<?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">
<configuration>
<!--环境-->
<environments default="development">
<environment id="development">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--数据源设置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm_db"/>
<property name="username" value="root"/>
<property name="password" value="rootstart"/>
</dataSource>
</environment>
</environments>
<!--加载mapper映射文件-->
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
-
创建实体类。
-
创建sql映射文件。
<?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">
<mapper namespace="com.cwd.mybatisdemo.userDao">
<select id="selectBlog" resultType="com.cwd.mybatisdemo.User">
select *
from Blog
where id = #id
</select>
</mapper>
- 测试。
核心配置文件
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
核心配置文件sqlMapperConfig中的标签顺序应按照上面👆的顺序:properties—>mappers
数据库环境配置
<!--环境-->
<environments default="development">
<environment id="development">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--数据源设置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm_db"/>
<property name="username" value="root"/>
<property name="password" value="rootstart"/>
</dataSource>
</environment>
</environments>
属性设置
1.在属性中配置对应的数据。
<!--属性引用-->
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
</properties>
<!--环境-->
<environments default="development">
<environment id="development">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--数据源设置-->
<dataSource type="POOLED">
<property name="driver" value="$driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm_db"/>
<property name="username" value="root"/>
<property name="password" value="rootstart"/>
</dataSource>
</environment>
</environments>
2.提取属性到一个全新的文件(jdbc.properties)进行引用
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/ssm_db
username=root
password=rootstart
<configuration>
<!--属性引用-->
<properties resource="jdbc.properties">
</properties>
<!--环境-->
<environments default="development">
<environment id="development">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--数据源设置-->
<dataSource type="POOLED">
<property name="driver" value="$driver"/>
<property name="url" value="$url"/>
<property name="username" value="$username"/>
<property name="password" value="$password"/>
</dataSource>
</environment>
</environments>
</configuration>
3.赋默认值(以password为例)
<configuration>
<!--属性引用-->
<properties resource="jdbc.properties">
<!--开启默认值-->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
</properties>
<!--环境-->
<environments default="development">
<environment id="development">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--数据源设置-->
<dataSource type="POOLED">
<property name="driver" value="$driver"/>
<property name="url" value="$url"/>
<property name="username" value="$username"/>
<property name="password" value="$password:rootstart"/>
</dataSource>
</environment>
</environments>
</configuration>
设置setting
<!--设置-->
<settings>
<!--开启log4j日志-->
<setting name="logImpl" value="LOG4J"/>
<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
<!--开启延迟加载/懒加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
类型别名
1.标签设置,依次设置
<typeAliases>
<typeAlias type="com.cwd.mybatisdemo.User" alias="user"/>
</typeAliases>
2.直接设置一个包
<!--类型别名-->
<typeAliases>
<package name="com.cwd.mybatisdemo"/>
</typeAliases>
其它配置项
- 类型处理器 typeHandlers
- 对象工厂 objectFactory
- 插件 plugins
- 映射器 mappers
<!--加载mapper映射文件-->
<mappers>
<mapper resource="UserDao.xml"/>
</mappers>
逆向工程
Mybatis需要自己编写SQL,若是表太多的话难免会麻烦,所以官方提供了一种逆向工程,可以针对单个表自动生成Mybatis执行所需要的代码(包括Mapper.xml、mapper.java、pojo)。一搬我们在开发中常用的逆向工程是通过数据库的表生成代码。
创建逆向工程
- 新建一个maven工程。
- 添加依赖的jar包。
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- 日志包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--代码生成工具-->
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 添加配置文件generatorConfig.xml文件,用于设置数据库驱动,配置,包名,文件保存位置,表名等等。
- 定义GeneratorSqlmap类,调用MyBatis自动创建接口,在main方法执行自动创建。
使用为主!!!
使用逆向工程
- 添加generatorConfig.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm_db"
userId="root"
password="rootstart">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置
注意:mac电脑写的地址是./src
windows电脑写的是.\\src
-->
<javaModelGenerator targetPackage="main.java.com.cwd.mybatisdemo"
targetProject="./src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置
注意:mac电脑写的地址是./src
windows电脑写的是.\\src
-->
<sqlMapGenerator targetPackage="main.resources.mapper"
targetProject="./src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置
注意:mac电脑写的地址是./src
windows电脑写的是.\\src
-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="main.java.com.cwd.mybatisdemo" targetProject="./src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表
tableName 表名
domainObjectName 生成实体类对应的名称
-->
<table tableName="t_role" domainObjectName="Role" enableCountByExample="false"
enableUpdateByExample="falsemybatis学习笔记-订单商品数据模型分析