文档章节

mybatis学习记录,分析

zysaaa
 zysaaa
发布于 2017/07/22 10:34
字数 647
阅读 3
收藏 0

使用maven构建好工程。写好实体类。写好配置文件。创建好数据库表。简单插入两条数据。这里不会介绍mybatis的环境搭建。

先看数据表:

CREATE TABLE `article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `content` text COLLATE utf8_bin,
  `author` int(11) DEFAULT NULL,
  `is_modify` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (author) REFERENCES author (id)
) 

CREATE TABLE `author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8_bin NOT NULL,
  `nickname` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
)

用author这个外键关联,存储了文章对应的authorId。

我们看一下实体类:(目前只有2个,article and author)

@Data
public class Article {
    private int id;
    private String title;
    private String content;
    private Author author;
    private boolean isModify; //对应的数据库类型是tinyint,0代表false,1代表true
}
@Data
public class Author {
    private int id;
    private String username;
    private String nickname;
}

这里提一下我用到了一款插件lombok,具体的请百度。加上@data注解他自动会为你的实体类生成get,set,toString等方法。当然还有很多其他用法。

另外为了方便的测试,写了一个生产sqlsession的工具类:

public class Util {
    private static SqlSession sqlSession = init();
    public static Object getSession(Class clazz)   {
        return sqlSession.getMapper(clazz);
    }
    //读取配置文件
    private static SqlSession init(){
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("conf.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        return sessionFactory.openSession(true);
    }
    public static void close() {
        sqlSession.close();
    }
}

这样测试类写起来就可以非常简洁了:

public class MybatisTest {
    public static ArticleMapper articleMapper;
    @Before
    public void before() {
        articleMapper = (ArticleMapper) Util.getSession(ArticleMapper.class);
    }
    @After
    public void after() {
        Util.close();
    }
    @Test
    public void baseTest() {
       articleMapper.{code....}
    }
}

写好对应的ArticleMapper接口类。

好了,进入正题。先看单表查询:

例如:我想查到数据库所有的文章的信息:

@Select(value = "select article.id,article.title,article.author,article.content,article.is_modify as isModify from article")
public List<Article> articles();

这里可以注意到:article.is_modify as isModify,为什么要这样呢?这是为了解决数据库字段名和实体类不一致而采取的措施,不然是不能正确映射的。

当然还有一种解决办法,那就是在配置文件里解决了,利用resultMap的映射。这个后面会提到。

例如:我想查到文章数量:

@Select(value = "select count(1) from article")
public int countOfArticle();

这里这个返回值类型,你换成String,List<String>都行,甚至你换成List<Author>都不会报错,只是count填充不进去,输出为null。

单表查询其实没什么好说的。。。

接下来看联表查询吧,首先我想要记一下:mysql的联表查询,介绍一下我觉得用的最多的2种:inner join,left join。

妈的不想写了,未完待续......

© 著作权归作者所有

共有 人打赏支持
zysaaa
粉丝 0
博文 5
码字总数 6056
作品 0
衢州
早前学习Java记录

Spring 对 iBATIS 的支持】 Spring 通过 DAO 模式,提供了对 iBATIS 的良好支持。 SqlMapClient:是 iBATIS 中的主要接口,通过 xml 配置文件可以让 Spring 容器来管理 SqlMapClient 对象的创...

大风厂蔡成功
2016/07/10
43
0
浅析Mybatis与Hibernate的区别与用途

有很长一段时间对mybatis是比较陌生的,只知道与Hibernate一样是个orm数据库框架。随着使用熟练度的增加,发现它与Hibernate区别是非常大的,应当结合不同的情况分析选用。结合至今为止的经验...

小欣妹妹
2017/10/26
0
0
Spring和MyBatis环境整合

Spring: Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 两个重要模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。 控制反转模式(也称作依赖性介入)的基本概念...

肖歌
2016/03/21
72
0
Spring与Mybatis环境搭建

SSH框架的结合几乎家喻户晓,但是一般的中小项目,使用Spring和MyBatis就够了,而且MyBatis轻便好使,易上手,值得大家尝试一次。   开篇简介:   Spring: Spring是一个轻量级的控制反转...

boonya
2015/04/14
0
2
【MyBatis框架】订单商品数据模型-分析思路

我们接下来要对即将用来实验的订单商品数据模型进行分析。 首先在MySql中创建mybatis数据库,在其中创建以下表: CREATE TABLE ( int(11) NOT NULL AUTO_INCREMENT, varchar(32) NOT NULL CO...

Mysoft
2015/09/18
179
0

没有更多内容

加载失败,请刷新页面

加载更多

用户体验要素——以用户为设计中心

一、用户体验是什么 产品会与外界发生联系,人们如何去使用产品,人们使用产品无非解决两种问题,一,提高效率;二娱乐。而用户体验兼顾着功能和界面两个方面,为的是“提高人们的工作效率”...

铸剑为犁413
51分钟前
0
0
学习设计模式——代理模式

1. 认识代理模式 1. 定义:为其他对象提供一种代理以控制对这个对象的访问。 2. 组织结构: Proxy:代理对象,要实现与目标代理对象的相同的接口,这样就可以使用代理来代替具体的目标对象,...

江左煤郎
今天
1
0
java JDK动态代理

本篇随笔是对java动态代理中的JDK代理方式的具体实现。 首先需要定义一个接口,为其定义了两个方法:   public interface UserService { public void add(); public void delete(); } 然后需...

编程SHA
今天
2
0
轻松理解Dubbo分布式服务框架

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

别打我会飞
今天
3
0
TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部