1.使用maven项目构建项目,添加依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
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">
<!--xx.dtd是xml文件约束,约束标签-->对XML文件中的配置顺序进行约束
配置文档的顶层结构如下:
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
<configuration>配置标签:
属性(properties)
创建properties文件,使用properties标签导入,例如
<properties resource="jdbc.properties"></properties>
设置(settings)
会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
比如
<typeAliases>
<package name="com.qf.pojo"/>
</typeAliases>
那么每一个在pojo包中的实体类,在没有注解的情况下,会使用这个类的名字作为别名。
插件(plugins)
MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。
比如:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
interceptor指定当前拦截器
com.github.pagehelper.PageInterceptor是插件中的属性。
环境配置(environments):
环境配置中可以设置多个environments标签,配置多个运行环境,例如:
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <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>
映射器(mappers):
<!-- 将包内的映射器接口实现全部注册为映射器 --> <mappers> <package name="org.mybatis.builder"/> </mappers>
这个配置会告诉框架去那里找映射文件。
XML映射器:
<mapper namespace="com.qf.mapper.UserDao">
namespace标签需要指定接口的全限定名称
- insert – 映射插入语句。
- update – 映射更新语句。
- delete – 映射删除语句。
- select – 映射查询语句。
支持JSTL,比如需要取出属性值参数中的属性值的时候可以${属性值.属性值的属性值}取出。
id:可以被用来引用这条语句的方法,必须要与接口文件中的方法名一致
parameterType:要传入这条语句的参数的类全限定名或者别名
resultType:期望从这条语句中得到的类全限定名或者别名
书写sql语句是,必须要使用占位符号#{实体类属性名称}
在执行sql时,可以配置一些函数
<selectKey keyColumn="id" keyProperty="id" resultType="int" order="AFTER">
<!--通过这个函数获取最后一次自增长主键的id值-->
SELECT LAST_INSERT_ID() ;
</selectKey>
selectKey
属性
keyColumn:表的主键字段名称,(仅适用于 insert 和 update)设置生成键值在表中的列名,
keyProperty:实体类的属性名称(仅适用于 insert 和 update)指定能够唯一识别对象的属性
resultType:返回值自增长主键的值类型:当前实体类的完全限定名称或者别名
order:AFTER:在执行插入语句之后执行selectkey的语句获取最后一次id的值
查询如果涉及到多个条件,可以有四种方法赋值
一:使用参数顺序进行操作:
User findUserByMultConditon(String name,String addr) ;
<select id="findUserByMultConditon" resultType="com.qf.pojo.User">
select * from user where username = #{param1} and address = #{param2}
</select>-->
二:使用Param注释进行操作
User findUserByMultConditon(@Param("username") String name, @Param("address") String addr) ;
<select id="findUserByMultConditon" resultType="user">
select * from user where username = #{username} and address = #{address}
取值的时候使用Param设置的名称取值
</select>
三:使用map集合接受所有参数,#{}里面的内容需要和map集合的key一致
User findUserByMultConditon(Map<String,String> map) ;
!-- <select id="findUserByMultConditon" resultType="com.qf.pojo.User">
select * from user where username = #{name} and address = #{addr}
</select>-->
四:自定义一个实体,将参数放在实体中
User findUserByMultConditon(VoUser voUser) ;
<!--<select id="findUserByMultConditon" resultType="com.qf.pojo.User" parameterType="com.qf.pojo.VoUser">
select * from user where username = #{name} and address = #{addr}
</select>-->