1、添加dtd约束
作用:编写配置文件的时候能自动弹出关键字提示
步骤:
①下载mybatis的jar包,并且把mybatis-3.4.6.jar\org\apache\ibatis\builder\xml中的mybatis-3-config.dtd和mybatis-3-mapper.dtd解压到电脑上
②去eclipse的Window->Preferences->XML->XML Catalog中点击Add去添加dtd
③在Add XML Catalog Element中,“Location”填写第一步解压的文件的文件地址,“Key type”选择URL,“key”填写配置文件中的dtd约束的网址
④在配置文件中使用不同标签的提示功能
2、properties标签
作用:引用外部配置文件
步骤:
①创建储存配置信息的properties文件
②全局配置文件中的configuration标签中添加properties配置,并且把properties文件的路径配置到properties标签中
③使用 “${键名}” 来代替全局配置文件中的需要配置的信息的值
3、settings标签
作用:配置部分全局配置,具体在mybatis.xml里面有写
4、typeAliases标签
作用:为java类设置一个比较短的名字,方便引用
方法一步骤:(直接指定某个类的别名)
①在全局配置文件中使用typeAlias标签配置指定类的别名
②调用的时候直接使用别名来调用
方法二步骤:(指定某个包下的类都使用类名小写作为别名)
①在全局配置文件中使用package标签配置为指定包起默认别名
②调用的时候直接使用对应类的类名小写作为别名
方法三步骤:(修复方法二中出现的重名问题)
①先使用package指定包
②到需要指定别名的类里面用@Alias(“别名”)来指定别名
③使用的时候直接使用@Alias设置的别名(如:InfoMapper.xml中那样子)
注意事项:
①基础类型如byte/long/short/int/integer/double/float/boolean,这些类型的别名都只需要在类型名字签名加"_"
②包装类型如String/Byte/Long/Short/Integer/Double/Float/Boolean/Date等,别名只需要首字母改小写即可
③别名了一定不要出现重名的情况或者更基础类或者包装类的别名重名,不然mybatis会加载项目失败
5、typeHandler标签
mybatis3.4之后,mybatis会自动配置,无需手动配置
6、environments标签
作用:配置多种环境,用default指定使用某种环境,方便测试人员在正式环境和测试环境之间切换
步骤:
①在全局配置文件中创建environments标签
②在environments标签中添加不同的environment标签
③为environment标签添加自己的transactionManager和dataSource标签
④在environments标签的default属性指定需要用的environment标签的id
7、databaseIdProvider标签
作用:用于支持多数据厂商的sql,即配置后能在sql配置文件中设置对应不同数据库所要执行的sql语句是哪一个
注意:加载哪个数据库,看的是environments标签加载的数据库驱动的值,mybatis会自己去判断
步骤:
①在全局配置文件中创建databaseIdProvider标签,且type=“DB_VENDOR”
②在databaseIdProvider标签中,配置不同数据库厂商的别名
③在sql配置文件中的sql操作标签的databaseId属性指定对应databaseIdProvider标签中的数据库厂商的别名
8、mappers标签
推荐使用mapper的resource属性配置sql映射文件,这样文件目录比较清晰较好维护
9、mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
properties标签
1、resource:引用类路径下的配置文件
2、url:引用网络路径或者磁盘路径下的资源
-->
<properties resource="dbConfig.properties"></properties>
<!--
settings标签
1、cacneEnable : 默认值-true : 映射器配置的缓存的全局开关
2、lazyLoadingEnabled : 默认值-false : 延迟加载的全局开关,可通过fetchType属性覆盖该项的值
3、useColumnLabel : 默认值-true : 使用列标签代替列名
4、defaultStatementTimeout : 默认值-null : 设置超时时间(以秒为单位)
5、mapUnderscoreToCamelCase : 默认值-false : 驼峰命名规则映射(java中读取的参数名为aName对应数据库列名a_Name,即数据库列名去掉“_”且“_”后的首字母大写)
-->
<settings>
<setting name="defaultStatementTimeout" value="10"/>
</settings>
<typeAliases>
<!--
typeAliases标签
1、typeAlias:为某个类起别名
type:指定要起别名的类的全类名;默认别名为类名小写(如:com.demo.ssmtest.Info的别名为info,配置后,在InfoMapper.xml中select的resultType的值就可以写为info)
alias:指定新的别名(如:设为AliasInfo,则在InfoMapper.xml中select的resultType的值就可以写为AliasInfo)
<typeAlias type="com.demo.ssmtest.Info" alias="AliasInfo"/>
-->
<!--
2、package:为某个包下的所有类批量起名
name:指定报名(为当前包下所有类或子包的类起一个默认别名(类名小写))
注意:如果子包包名和package中指定的包的类类名小写重名,则会出现加载错误
<package name="com.demo.ssmtest"/>
-->
<!--
3、批量为包起别名,并且解决第二点中重名问题
步骤:
①先使用package指定包
②到需要指定别名的类里面用@Alias("别名")来指定别名
③使用的时候直接使用@Alias设置的别名(如:InfoMapper.xml中那样子)
-->
<package name="com.demo.ssmtest"/>
</typeAliases>
<!--
environments标签
1、mybatis支持配置多种环境,default指定使用某种环境。方便快速切换环境配置(根据environments标签的default参数的值是哪个environment的id就加载哪个environment)
2、environment:配置一个具体环境信息都需要有transactionManager和dataSource标签,id代表当前环境唯一标识
3、transactionManager:事务管理器
①type:类型有JDBC/MANAGED
②自定义事务管理器:实现TransactionFactory接口,type指定为全类名
4、dataSource:数据源
①type:类型有UNPOOLED(无连接池)/POOLED(有连接池)/JNDI(JNDI配置)
②自定义数据源:实现DataSourceFactory接口,type是全类名
-->
<environments default="Test_development">
<environment id="Test_development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
<environment id="Prod_development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--
databaseIdProvider标签
1、用于支持多数据厂商的sql,即配置后能在sql配置文件中设置对应不同数据库所要执行的sql语句是哪一个
2、databaseIdProvider标签的type属性值为"DB_VENDOR"
3、不同厂商有不同标识值:MySQL/Oracle/SQL Server
-->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<!--
mappers标签
1、将我们写好的sql映射文件(InfoMapper.xml)一定要注册到全局配置文件(mybatis.xml)中
2、mapper:注册一个sql映射
①resource:引用类路径下sql映射文件
②url:引用网络路径下或者磁盘路径下的sql映射文件
③class:引用接口,要求:(1)要有sql映射文件(2)映射文件名与接口要同名且放到相同目录下(3)如果没有sql映射文件,则sql需要用sql注释写在接口上
④package:指定包名,批量注册
-->
<mappers>
<mapper resource="InfoMapper.xml" />
</mappers>
</configuration>
10、InfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.ssmtest.InfoMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
-->
<select id="getById" resultType="alias_package_info" databaseId="mysql">
select * from info where id = #{id}
</select>
<select id="getById" resultType="alias_package_info" databaseId="oracle">
select * from info where id = #{id}
</select>
</mapper>
11、dbConfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/mybatis
jdbc.username=root
jdbc.password=
12、Info.java
package com.demo.ssmtest;
import org.apache.ibatis.type.Alias;
@Alias("alias_package_info")
public class Info {
int id;
String name;
String password;
String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Info [id=" + id + ", name=" + name + ", password=" + password + ", description=" + description + "]";
}
}
13、InfoMapper.java
package com.demo.ssmtest;
public interface InfoMapper {
public Info getById(int id);
}
14、TestMain.java
package com.demo.ssmtest;
import org.apache.ibatis.type.Alias;
@Alias("alias_package_info")
public class Info {
int id;
String name;
String password;
String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Info [id=" + id + ", name=" + name + ", password=" + password + ", description=" + description + "]";
}
}
15、项目目录
16、demo
https://download.youkuaiyun.com/download/qq_22778717/10712387