mybatis在指定库建表_MyBatis怎么连接到Mysql数据库?

昨天讲解了如何给配置文件导入约束,今天完成配置之后就可以连接到Mysql数据库,首先说一下SqlMapConfig.xml中标签的作用。

大家看一下,environments 是它的环境标签,在这个标签里面有一个

transactionManager标签:这是指定一个事物管理器。

dataSource标签是数据源的意思:

property标签:这是一个数据结构,继承自HashTable,这里不说hashtable和hashmap的区别,大体知道他是一个Key,一个Value,所以是map结构。

第一个property:name就是name,随便写,这里写个driver告诉你这个是个驱动,这里面的key都可以随便写,我们真正使用的只是value而已,key

只是找到value的一个引用,用K,V的结构能更清晰让人看懂,也是用Key来对Value作一个说明。这里的Value写JDBC到Mysql驱动的全包名,注意一定要写全包名,同时不可以创建相同名字的Java类,规定是这样的,不然他会找不到驱动文件的位置,如果你和jdbc起了同样的名字,那么该配置文件的加载顺序有可能会出错,到时候会报错。

第二个property:Mysql连接的url,它的正确结构是:jdbc:mysql://localhost:3306/database

这是基本的格式,第一段jdbc是它的连接方式,通常不变,貌似c语言还是c#的叫做cdbc,所以你应该懂jdbc的意思第二段mysql是数据库类型,如果你连oracle就写oracle也很简单,第三段是你的数据库的网络地址,如果安装在本机就写localhost,如果安装在其他电脑就写它的ip地址如:32.154.46.854

这个IP是我编的,同在一个内网写就写192.168.1.56这种。第四段3306是mysql数据库默认的端口号,我知道tomcat的端口号是可以改的,所以这个应该也可以改,至于端口号是做什么的我也不太清楚,这个涉及操作系统原理,貌似和端口映射有关?大家知道常用端口号多少即可,第五段是你的数据库名字,这个数据库不是你windows,mysql.exe 这个mysql的名字,而是在你的数据库里面它分为很多database, 这里写database的名字,千万不要写mysql。oracle也一样。前面固定格式说完了,就是jdbc:mysql://localhost:3306/database ,通常变化的只有localhost和database两个字段。然后看我后面加了一个?号对吧,?后面跟的是参数,大家看浏览器地址栏,当我们进入一个网页之后地址栏除了该页面的地址外还会有?加上一串参数,这个是get类型的请求,?后面的东西可以随便写,但是数据库之后读取固定Key后的value值,比如你在后面写个?1+2=5是没有影响的。characterEncoding=utf-8"意思为将数据库字符集设为UTF-8,这个国际通用编码不会出现乱码的情况。如果连接到的数据库是iso8859-1,你的电脑是GBK或者是UTF-8的话就会出现乱码。指定这个字符集不会出现乱码的情况。

第三个property:用户名,username是给你看的,root是给mysql看的。

第四个property:密码,password是给你看的,123456是给mysql看的。

SqlMapConfig.xml内容

然后我们创建一个mapper映射文件,文件名就是你的pojo类名.xml,也可以随便取,但是这样便于阅读。pojo类作为mybatis进行sql映射使用,pojo类通常与数据库表对应也叫entity,也叫domain。反正就是将数据库里的表转为一个面向对象的类,里面包含了表里的字段,每一个类对应数据库里的一张表。mapper映射文件也需要一段约束,讲下面文字复制到xml中即可,它的作用相当于HTML中的header。

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

这个文件里面是用来写Mybatis的sql语句的。

为mapper文件加入约束

那么这个mapper文件如果被框架加载到的呢?我们之前说过mybatis框架只会加载固定名字的SqlMapConfig,xml,于是我们在SqlMapConfig,xml中加入另一个标签,引入mapper文件的地址。

在environments标签下另起一个标签,注意mappers和environments属同级别,不要写到里面去。mappers相当于一个集合,我们现在里面写一个 然后在/的前面按ctrl+/,会提示你几个选择class,url,resource。这几个都可以表示路径,大家使用resource即可。resource是SqlMapConfig.xml的相对路径,如果他俩同级,那么他们的父目录可以省略,直接写位置。注意这里不是文件名,而是相对于SqlMapConfig.xml的相对路径,如果mapper文件在SqlMapConfig.xml的同级目录下,假设这个同级目录叫aa,那么写法就是aa/Ljq.xml,如果SqlMapConfig.xml的父目录与cc同级,则为../aa/Ljq.xml。此外绝对路径和相对路径初学者们很多会混淆,大家不如不明白可以自己多试试。./表同级目录下,通常省略,../表父目录。

在SqlMapConfig.xml中配置mapper文件位

现在我们创建一个测试类,来试试mybatis这个框架是否能够成功执行。

首先我们new一个SqlSessionFactoryBuilder的实例,大家看到我写的了。用的其实是它的build()这个方法,所以让builder实例处于游离状态,用一下build()方法就完事,它的生命周期是转瞬即逝的。哈哈,其实没什么卵用,也不会节省多少资源,但是逼格会高。参数需要我们传入配置文件,你们看他有很多参数,我们的配置写在xml里,所以选哪一个呢?都可以哈哈。

读取配置文件方式

大家看到这一段代码就会明白,哦原来SqlMapConfig.xml的名字不是固定的呀,确实是这样,但是通常写SqlMapConfig.xml属于一种行内规范。首先我们需要一个SqlSessionFactory 实例用来创建session对象,它·封装的挺复杂大家可能稍微难理解。我们每一条连接都是一个session,这里想当于一个工厂类帮我们控制了Session创建,不会交给你让你自己随便创建的。

下面我用另一种写法大家一下就能看出来参数是什么了。

resource.getR.....是一个InputStream输入流,然后在bulid()参数内把流放进去。大家可以看到有好几个都是静态方法,不给你创建实例的。所以说框架可能是出于安全的原因或是什么,不是所有东西都对开发者开放的。

我们通过session工程为我们打开一个session,然后用这个session对象就可以执行SQL语句了。那么sql语句写在哪里呢?

Mybatis的sql是写在mapper文件里的,就是我们刚才的Ljq.xml。 先说一个它里面的标签

这个是根标签,所有的语句写在它里面 它有一个属性是namespace,命名空间,你可以理解为java里面的包名。为了区分不同的sql语句,命名空间也就是前缀,其实很多场景都会用到的,目的只有一个更好的帮助人还是机器区分。

标签就是表示这是个select语句,可能是用于区分不同语句对事务的控制吧,你同样的一条sql写在select和delete标签里面消耗的资源是不一样的。属性也是不一样的。看select有一条属性叫做id,他是作什么用的呢?看上面图,大家可以把ID当做方法名,或者sql名,在我们执行sql的时候session对象需要知道执行的是哪一条sql,这时候填写id就对。同时要注意,namespace命名空间是不可以为empty的,不然会报错,所以正确写法是以String形式,写namespace.id。这样session对象就可以找到到底执行哪一条sql语句了。resultType是返回值类型,我写的是我的pojo类对象,所以在打印的时候会直接打印Ljq.toString()的内容。

下面我们一起来看看查询结果吧。它警告我了,说我在SqlMapConfig.xml里写的url太老了,现在它jdbc驱动已经改名了,名字是mysql-connector-java,大家如果没有可以在maven里搜索mysql-connector-java,刚才试了下 搜索jdbc的话已经搜不到了。

最后给大家说一下这个框架的执行过程。从我们代码里面走,首先SqlSessionFactory去加载SqlMapConfig.xml,里面的运行环境,包含连接到数据的mysql-connector-java这个驱动jar,url,用户名密码等,然后依次加载mapper文件中的内容。加载之后全部信息正确的话进行下一步,创建Session工厂对象,Session工厂对象创建一个Session对象,然后通过这个Session对象执行mapper中的sql语句,这时候框架通过ssl协议拿到数据执行sql结果的数据返回到我们的java对象中,最后打印出的就是数据库中查询到得结果。

可能有点长,但是我尽量给大家说的清晰一些,想到的知识点也会补充一些,希望大家耐心一些慢慢消化,有不明白的地方在下方留言即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值