mybatis学习记录,分析
博客专区 > zysaaa 的博客 > 博客详情
mybatis学习记录,分析
zysaaa 发表于6个月前
mybatis学习记录,分析
  • 发表于 6个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

使用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。

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

标签: MyBatis
共有 人打赏支持
粉丝 0
博文 5
码字总数 6056
×
zysaaa
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: