文档章节

mybatis学习记录,分析

zysaaa
 zysaaa
发布于 2017/07/22 10:34
字数 647
阅读 4
收藏 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
月薪8k Java程序员和 月薪38K的Java架构师差距在哪里?

回想自己做开发的这八年多,我获得了很多,技术能力、培训、出国、大公司的,还记得刚刚出来第一年那段时间,太多东西不懂的,我都是一切听从老大的安排,敲敲代码,看看数据库,测试自己和别...

Java高级技术
10/12
0
0
mybatis源码分析之事务管理器

上一篇:mybatis源码分析之Configuration 主要分析了构建SqlSessionFactory的过程中配置文件的读取. 这次重点分析mybatis的事务管理器 仍旧从官网给的例子着手分析,配置文件mybatis-config.xm...

udbwcso
2016/04/20
292
0
【MyBatis框架】订单商品数据模型-分析思路

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

Mysoft
2015/09/18
179
0

没有更多内容

加载失败,请刷新页面

加载更多

Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
25分钟前
0
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
36分钟前
1
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
38分钟前
2
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
今天
6
0

中国龙-扬科
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部