Spring Boot(三)--- Mybatis
来源:互联网 发布:国家安全网络领导小组 编辑:程序博客网 时间:2024/05/15 18:37
MyBatis 表操作
1 、定义操作接口
package com.xykj.weibo.mapper;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import com.xykj.weibo.model.Article;@Mapperpublic interface ArticleMapper { /** * 根据 id 获取文章 * @param id * @return */ public Article getArticle(@Param("id") Integer id); /** * 删除文章 * @param id * @return */ public Integer deleteArticle(@Param("id") Integer id);}
2 、定义该操作接口的具体实现,直接在 src/main/resource 创建跟接口包名一样的包结构,定义 xml
<?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.xykj.weibo.mapper.ArticleMapper" > <select id="getArticle" parameterType="int" resultMap="ResultArticle"> select * from article where _id=#{id} </select> <resultMap type="com.xykj.weibo.model.Article" id="ResultArticle"> <id property="id" column="_id"/> <result property="title" column="title"/> <result property="content" column="content"/> <result property="pubTime" column="pub_time"/> <result property="userId" column="user_id"/> </resultMap></mapper>
其中 mapper 标签中的 namespace 必须指向具体的接口位置, select 表示针对一个方法的查询操作 id 跟接口的方法名一样, parameterType 跟接口方法的参数
类型一致 ,resultMap 查询结果的对应关系需要关联一个 resultMap 标签
3 、使用
@RestControllerpublic class ArticleController { @Autowired ArticleMapper articleMapper; @RequestMapping("/getArticle") public String getArticleById(Integer id) { Article a = articleMapper.getArticle(id); if (a != null) { String str = JSON.toJSONString(a); return str; } return "null"; }}
@Autowired 表示自动注入,可以获取到接口对象
xml 配置中的删除、修改、增加
<delete id="deleteArticle" parameterType="int"> delete from article where _id=#{id}</delete><insert id="addArticle" parameterType="com.xykj.weibo.model.Article" useGeneratedKeys="true" keyProperty="id"> insert into article(title,content,pub_time,user_id) values (#{title},#{content},#{pubTime},#{userId})</insert>useGeneratedKeys 表示使用自动递增的 key 作为对象的某个属性keyProperty 表中自增键对应的属性名<update id="updateArticle" parameterType="com.xykj.weibo.model.Article">update article set title=#{title},content=#{content},pub_time=#{pubTime},user_id=#{userId} where _id=#{id}</update>
配置多表查询,可以在解析结果中针对单个其他表的内容使用 association 标签来配置
java 中模型类
public class Article { private int id; private String title; private String content; private String pubTime; private int userId; // 自定义对象 private User user; ...}
xml 配置
<select id="getArticle" parameterType="int" resultMap="ResultArticle">select a._id,a.title,a.content,a.pub_time,a.user_id,u._id as uId,u.name,u.sex,u.sign,u.photo,u.age from article a left join users u on a.user_id=u._id where a._id=#{id}</select><resultMap type="com.xykj.weibo.model.Article" id="ResultArticle"> <id property="id" column="_id" /> <result property="title" column="title" /> <result property="content" column="content" /> <result property="pubTime" column="pub_time" /> <result property="userId" column="user_id" /> <association property="user" column="user_id" javaType="com.xykj.weibo.model.User"> <id property="id" column="uId"/> <result property="name" column="name"/> <result property="sex" column="sex"/> <result property="sign" column="sign"/> <result property="photo" column="photo"/> <result property="age" column="age"/> </association></resultMap>
多表查询中获取集合,如:一篇文章可以有多个标签,数据库新增了一个标签表 tags 以及标签和文章的关系表 articletags ,如果已经查询到文章信息,那么需要通过文章的 id 到 article_tags 表中查询出标签 id 然后再使用标签的 id 到 tags 表中获取所有标签
Tag 标签类:
public class Tag { private int id; private String name; private int creatorId; ...}
文章类中新增标签的声明
public class Article { private int id; private String title; private String content; private String pubTime; private int userId; // 自定义对象 private User user; // 文章中的标签 private List<Tag> tags; ...}
针对标签操作定义了操作接口 TagMapper 和实现的 xml 配置
@Mapperpublic interface TagMapper { /** * 根据文章 id 获取所有的标签信息 * * @param id * @return */ public List<Tag> getTagByArticleId(@Param("article_id") Integer id);}<?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.xykj.weibo.mapper.TagMapper"> <select id="getTagByArticleId" parameterType="int" resultMap="tagResult"> select * from tags where _id in (select tag_id from article_tags where article_id=#{article_id}) </select> <resultMap type="com.xykj.weibo.model.Tag" id="tagResult"> <id property="id" column="_id" /> <result property="name" column="name" /> <result property="creatorId" column="creator" /> </resultMap></mapper>
文章查询中添加标签的查询
在 resultMap 中新增 collection 标签关联<resultMap type="com.xykj.weibo.model.Article" id="ResultArticle"> ... <association property="user" column="user_id" javaType="com.xykj.weibo.model.User"> ... </association> <collection property="tags" ofType="com.xykj.weibo.model.Tag" column="_id" select="com.xykj.weibo.mapper.TagMapper.getTagByArticleId"> </collection></resultMap>
阅读全文
0 0
- Spring Boot(三)--- Mybatis
- spring boot (三) 集成 mybatis
- Spring Boot学习笔记-整合Mybatis (三)
- Spring boot之数据访问及mybatis整合(三)
- Spring Boot 实践折腾记(三):三板斧,Spring Boot下使用Mybatis
- Spring Boot学习记录(三)--整合Mybatis
- Spring boot(三)
- Spring-Boot学习(3)-----Spring-Boot整合mybatis
- Spring Boot实战(三)
- Spring boot(三) 配置文件
- spring-boot入门(三)
- (三)spring boot + mybatis +pagehelper 添加Dao工具类
- spring boot(8)-mybatis三种动态sql
- spring boot(8)-mybatis三种动态sql
- Spring Boot (二)集成Mybatis、Druid
- Spring boot----整合mybatis(mysql)
- Spring boot---整合mybatis (oracle)
- 十九、Spring Boot整合MyBatis(上)
- 自己进化的Unity人工智能(二)
- 使用AngularJS和HTML做淘宝中购物车的一些功能
- 入门代码,Swift表格,标签控制器
- Dynamic CRM 2016 IFD配置(5)Claims-based认证-内部访问配置
- 四个好看的table表格样式
- Spring Boot(三)--- Mybatis
- TFRecord数据集
- java类加载器以及双亲委派机制
- memset按字节对内存块进行初始化
- Lombok介绍与使用
- Android 如何正确的获取屏幕高度
- Android自定义ViewGroup ,动态添加数目不确定的ImageView
- 机器学习岗面试总结
- 讲给Android程序员看的前端教程(09)——HTML5标签(8)