背景
前几个小节我们学习了golang基本的http操作,也简单的了解了一下golang的参数绑定的基本原理,在接下来框架的学习和实战中,我们还要学会crud的最后一项基本技能,就是学会使用golang操作mysql数据库,虽然在golang中也有很多orm框架,但是目前还是先不要接触,否则本末倒置,就不好了,golang中操作mysql数据库比较简单,但是我们还是要简单地过一下,因为以后的深度内容肯定会涉及到这些基本的操作,比如分表分库,比如我们是否可以像之前学习trie的时候,了解参数路由的基本原理,以后我们了解了分表分库的原理之后,是否也可以学一个简单的golang版本的sharding-jdbc呢
本小节我们主要学习golang如果连接mysql数据库,如何完成日常的增删改查的功能
golang连接mysql数据库
和java连接mysql数据库一样,golang连接mysql数据库也需要驱动,也需要mysql的地址,用户名密码,也是和mysql建立一个TCP连接,代码如下展示
和java不一样的是,java需要第三方jar包提供对数据库连接池的支持,例如druid,HikariCP,golang天生支持数据库连接池,不需要引入其他第三方包的支持,这也是新一代语言自己的优势,和得天独厚的历史语言带来的经验。
上面的代码截图中,我们设定了全局变量sql.DB,然后我们使用了init方法对改全局变量进行初始化,init方法比较特殊,他会在main函数之前执行,如果用类比的方法学习golang的init的方法,我们初学者可以把其认为是java中的static 静态代码块,我们使用sql.Open方法获取到了一个db对象,然后设置最大空闲连接数和最大链接数,请你要注意,我们也导入了一个mysql驱动,因为在代码中没有显示调用,所以,在import的时候,使用下划线来进行别名,这样可以来使用了
插入一条数据
首先我们要新建一张表,因为我们是做测试,我们新建的表名叫做t_user,就三个字段,id(自增),name(varchar),age(int)
1.使用Exec方法插入
插入的代码截图如下,我们使用db.Exec方法来执行insert语句,如果执行成功,通过返回的Result数据库对象返回插入记录的主键id
插入的代码
2.使用Prepare方法和stmt的Exec方法插入
代码操作如下,这个目测貌似比直接使用Exec还复杂一点,并且还需要手动关闭资源,并不是很好用,但是我们使用prepare来实现批量插入的逻辑
prepare插入
3.使用Prepare方法进行批量插入
如果我们想完成批量插入的功能,使用prepare方法就会特别合适,完整的代码示例如下,看来什么东西都会有其存在的价值,这边prepare方法就比exec方法更加试用
更新和删除数据
更新mysql的数据还是比较简单的,场景也是比较单一,我们可以写一个如下的简单示例说明,这边需要我们记忆的是,更新和插入还有删除的操作都是调用的db.Exec方法来完成操作的
查询记录
1.查询一条记录
代码截图如下所示,可以看到使用db.QueryRow方法来进行查询一条记录的操作,这样的场景一般适用于where条件是查询主键的数据,或者唯一索引的数据,如果查询出超过一条的数据,该方法会报错,,我这边就简单地偷了一个懒,没有用返回的err进行判断,小伙伴们可以自动动手实验
2.查询多条记录
代码截图如下所示,也可以看出查询多条记库可以使用db.Query方法来做,然后根据返回的rows对象,调用其next函数,完成最后的操作赋值
小结
本小节特别简单,大家只需要花费5mins的时候,从头到尾的浏览一遍就可以了,了解Exec,Query,Prepare,QueryRow的基本方法的使用,基本上也就能够完成对mysql的最最基本的操作了,关于事务的操作,我们等到实战的学习上,再一起深入