← 文章归档 17-Spring Boot mybatis 2022-04-13 约 23 分钟阅读 阅读 — 次
持久层框架-Mybatis
1. Mybatis和数据库的交互方式
1.1. 使用原始的Dao来调用mybatis
需要定义dao接口
需要实现dao接口
在dao接口实现类上注入sqlSessionFactory,创建时需要读取mapper.xml到内存
创建sqlSession对象调用mapper中的sql语句(sqlSession.insert(statementID,sql)),操作结束后需要手工提交,释放资源,返回结果
存在的问题:
dao实现类方法中存在大量模板方法
通过sqlSession进行编码的数据库操作方法存在id的硬编码
sqlSession方法使用泛型,运行时错误
1.2. Mapper动态代理
需要实现mapper接口
定义mapper.xml是需要保证
namespace和mapper接口方法的路径相同
statementID和mapper接口中定义的方法相同
paramerType和mapper接口中定义的参数类型相同
返回的resultType要和mapper接口中定义的返回结果相同
2. MyBatis映射文件
MyBatis最强大之处就在于它的映射语句
映射文件的几个顶级元素:
cache:对给定命名空间的缓存配置
cache-ref:对其他命名空间缓存配置的引用
resultMap:描述如何从数据库的结果中来加载对象
sql:可被其他语句引用的可重用语句块
insert:映射插入语句
update:映射更新语句
delete:映射删除语句
select:映射查询语句
2.1. select语句
1 2 3 <select id = "select" parameterType = "int" resultType = "hashmap" > SELECT * FROM PERSON WHERE ID = #{id}</select >
注意参数的符号
允许更多的参数:详见
2.2. insert && update && delete
这些都和select比较相近
如果使用的数据库(MySQL)可以自动生成主键的字段,那么可以设置:useGeneratedKeys = "true"
2.3. sql
用于定义可重用的SQL代码代码段
可以被使用在别的之中
未完待续
1 <include refid = "name" > </include >
3. 动态SQL
3.1. if
条件判断的一部分,往往放置在where中
例子:
1 2 3 4 5 6 <select id ="name" resultType = "int" > SELECT * FROM BLOG WHERE state = "new" <if test = "title != null" > AND title like #{title} </if > </select >
3.2. choose,when,otherwise
类似java中的switch
例子:
1 2 3 4 5 6 7 8 9 10 11 <select id = "find" resultType = "PRESON" > SELECT * FROM PERSON WHERE name = "job" <choose > <when test = "title != null" > </when > <when test = "author != null" > </when > <otherwise > </otherwise > </choose > </select >
3.3. trim,where,set
where:防止没有条件符合造成的炸裂
例子:
1 2 3 4 5 6 7 <select id ="name" resultType = "int" > SELECT * FROM BLOG <where > <if > </if > </where > </select >
trim:自定义where元素的功能
prefixOverrides属性中的内容会被替换成prefix
suffixOverrides属性中的会被添加进去,比如逗号
1 <trim prefix = "WHERE" prefixOverrides = "AND|OR" >
set:动态更新语句
会动态设置SET关键字,同时删除无关的逗号
1 2 3 4 5 6 7 <update id ="name" > update Author <set > <if test ="" > </if > </set > </update >
3.4. foreach
foreach:对一个集合进行遍历
声明在集合体中使用的集合项,也允许你放置分隔符和开始结尾
index是键
item是值
1 2 3 4 5 6 7 8 <select id = "name" resultType = "blog.post" > SELECT * FROM POST P WHERE ID in <foreach item = "item" index = "index" collection = "list" open = "(" separator = "," close = ")" > #{item} </foreach > </select >
3.5. bind
可以冲OGNL表达式中创建一个变量绑定到上下文
例子:
1 2 3 <select id = "name" resultType = "blog.post" > <bind name = "pattern" value = "'%" + _parameter.getTitle ()+"%"/> </select >
4. 多数据库支持
5. 动态SQL中的可插拔脚本语言
6. 导出导入数据到数据库
6.1. 导出数据库
进入Mysql安装地点的bin文件夹下:mysqldump -u [用户名] -p [要导出的数据库]>[导出的路径//[文件名].txt]
例如:mysqldump -u root -p jyb > jyb.txt (输入后会让你输入进入MySQL的密码)
6.2. 导入服务器
进入Xftp,将刚刚的.txt文件上传到服务器
创建数据库:create database name;
将刚刚的文件导入:source [所在的路径//*.txt]
确认数据:show databases;
7. mybatis-generator
mybatis-generator是一款mybatis的自动代码生成工具,可以通过配置,快速生成mapper和xml文件。
7.1. 具体实现
7.1.1. 在pom文件中添加配件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <plugin > <groupId > org.mybatis.generator</groupId > <artifactId > mybatis-generator-maven-plugin</artifactId > <version > 1.3.2</version > <configuration > <verbose > true</verbose > <overwrite > true</overwrite > </configuration > <executions > <execution > <id > Generate MyBatis Artifacts</id > <goals > <goal > generate</goal > </goals > </execution > </executions > <dependencies > <dependency > <groupId > org.mybatis.generator</groupId > <artifactId > mybatis-generator-core</artifactId > <version > 1.3.2</version > </dependency > </dependencies > </plugin >
7.1.2. 在resource下创建generatorConfig.xml文件
文件内容为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 <?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 > <classPathEntry location ="C:\Users\Administrator\Downloads\mysql-connector-java-8.0.13.jar" /> <context id ="DB2Tables" targetRuntime ="MyBatis3" > <commentGenerator > <property name ="suppressDate" value ="true" /> <property name ="suppressAllComments" value ="true" /> </commentGenerator > <jdbcConnection driverClass ="com.mysql.cj.jdbc.Driver" connectionURL ="jdbc:mysql://127.0.0.1/cigit2019?serverTimezone=GMT" userId ="root" password ="1234" > </jdbcConnection > <javaTypeResolver > <property name ="forceBigDecimals" value ="false" /> </javaTypeResolver > <javaModelGenerator targetPackage ="com.example.cigit.dao" targetProject ="src/main/java" > <property name ="enableSubPackages" value ="true" /> <property name ="trimStrings" value ="true" /> </javaModelGenerator > <sqlMapGenerator targetPackage ="mapping" targetProject ="src/main/resources" > <property name ="enableSubPackages" value ="true" /> </sqlMapGenerator > <javaClientGenerator type ="XMLMAPPER" targetPackage ="com.example.cigit.mapping" targetProject ="src/main/java" > <property name ="enableSubPackages" value ="true" /> </javaClientGenerator > <table tableName ="t_user" domainObjectName ="User" enableCountByExample ="false" enableUpdateByExample ="false" enableDeleteByExample ="false" enableSelectByExample ="false" selectByExampleQueryId ="false" > </table > </context > </generatorConfiguration >
在如上模板中需要修改的位置
classPathEntry—数据库驱动:选择你的本地硬盘上面的数据库驱动包,具体可以在https://mvnrepository.com/artifact/mysql/mysql-connector-java下载
jdbcConnection—数据库连接的信息,用户名密码等
javaModelGenerator—生成模型的包名和位置
sqlMapGenerator—生成生成映射文件的包名和位置
javaClientGenerator—生成DAO的包名和位置
table— 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名
7.1.3. 出现的问题
具体参考参考中的相应链接
8. 使用标签结合Mybatis
注解
功能
备注
@Update
对应更新数据库
-
@Select
对应选择数据库中项
-
@Insert
向数据库添加项
-
@Delete
删除数据库中项
-
9. 参考
用mybatis的generator自动生成代码
Mybatis自动生成xml文件、dao接口、实体类
idea中mybatis自动生成工具及用法
评论