JDBC 连接数据库存在的问题
- 硬编码的问题,对数据库的操作不够灵活,比如链接数据名,用户名 ,密码 都已经在在代码中被写死
- 经常的连接数据库 打开 关闭 对系统整体资源消耗大 造成浪费
- sql语句不够灵活,容易写错,遍历查询结构的时候也很麻烦 没有即使返回对象
MyBatis 介绍 架构设计原理
sqlMapConfig 数据库链接信息 以及连接池的方式 链接的数据库 用户名 密码 等
mapper.xml 数据库中表的映射 ,一张表对应一个mapper.xml , 是对数据库操作的封装
sqlSession 操作数据库一次会话 , 就是操作数据库对象
环境配置
提示 maven 库地址 http://mvnrepository.com/
1. 配置编译JDK 版本
<build>
<plugins>
<!-- maven的编译插件,用于指定我们jdk的版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
2. 添加依赖mysql , mybatis
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- mybatis的依赖包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
3. 日志包依赖
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
4. 资源文件配置看下图
传统Dao的开发模式
接口代理的开发Dao
- mapper.xml 中的命名空间 必须是 我们接口全限定类名
- sql 语句中的id 必须要跟方法名一致
- mapper需要跟接口文件名一致 必须在同一个目录下面
注意事项
SqlMapConfig 配置文件其他内容
1. 别名 在SqlMapConfig.xml 中
<!-- 别名 将对user全路径的引用简写为 user -->
<typeAliases type = "com.ruirui.proxy.User" alias="user"></typeAliases>
2. 批量 通过包的路径 批量命名别名 不区分大小写
<typeAliases>
<!-- 通过使用typeAliases来命名我们的pojo对象-->
<!-- <typeAlias type="cn.itcast.pojo.User" alias="user"/> -->
<!-- 如果使用package的方式来命名我们的别名,只需要拷贝我们指定的包路径就行,然后就可以做我们的别名 -->
<!-- 使用package这种方式来命名别名,别名就是类名,而且不区分大小写 -->
<package name="cn.itcast.pojo"/>
</typeAliases>
3. Mappers映射器 扫描包路径下的所有mapper.xml 文件
<!-- 通过mappers来指定加载我们对应的mapper文件 -->
<mappers>
<!-- <mapper resource="mapper.xml"/> -->
<!-- <mapper resource="mapper2.xml"/> -->
<!-- <mapper resource="userMapper3.xml"/> -->
<!-- 可以通过试用package的方式来指定我们所有的mapper文件的路径在哪里 -->
<!-- 如果使用package的方式来指定包路径来扫描我们所有的mapper文件,有两点地方要注意
第一点:我们mapper文件,一定要放到我们指定的位置 ,而且这个指定的位置一定要指定到我们的dao接口所在的包路径
第二点:我们的mapper文件的命名规范,mapper文件的命名一定要与我们接口的命名相同,只不过后缀不通-->
<package name="cn.itcast.mybatis.mapper3"/>
</mappers>
4. 应用外部配置文件 链接数据库
4.1 db.properties
#注意,配置文件中,不要随意打入空格等空字符串
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.52.250:3306/mybatis?characterEncoding=utf-8
username=root
password=admin
4.2 SqlMapConfig.xml 文件内部 引用 db.properties这个文件 引用${ ..} 这种引用的方式 同时也注意覆盖问题
<!-- resource 表示读取外部的配置文件信息来作为我们的数据库连接信息
如果通过resource来指定我们外部的配置信息,那么我们外部的配置信息就会覆盖我们本地property当中的值。
-->
<properties resource="db.properties">
<property name="driver" value="com.mysql.jdbc.Driversss"/>
<property name="url" value="${url}"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</properties>
<!-- 这个environments定义了我们的数据库的连接操作 -->
<environments default="development" >
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>