1、XML
CRUD查询
1.配置信息
pom.xml 配置
<packaging>jar</packaging>
<!-- 配置指定的jdk-->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>11</source>
<target>11</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<!--重新编译-->
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>
<!-- 配置jar坐标-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
SqlMapConfig.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-->
<properties resource="jdbcConfig.properties"></properties>
<!--配置二级缓存-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!--使用typeAliases配置别名,它只能配置domain中类的别名 -->
<typeAliases>
<package name="com.domain"></package>
</typeAliases>
<!--配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件的位置 -->
<mappers>
<package name="com.dao"></package>
</mappers>
</configuration>
log4j.properties 配置
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
jdbcConfig.properties配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
IuserDao.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.itheima.dao.IUserDao">
<!-- 查询所有 -->
<select id="findAll" resultMap="userMap">
SELECT u.*,r.`ID` AS rid,r.`ROLE_DESC`,r.`ROLE_NAME` FROM USER u
LEFT OUTER JOIN user_role ur ON u.`ID` = ur.`UID`
LEFT OUTER JOIN role r ON ur.`RID` = r.`ID`;
</select>
</mapper>
###关于配置别名以及多表查询的配置
<!-- 定义User的resultMap-->
<resultMap id="userMap" type="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
<collection property="roles" ofType="role">
<id property="roleId" column="rid"></id>
<result property="roleName" column="role_Name"></result>
<result property="roleDesc" column="role_Desc"></result>
</collection>
</resultMap>
二级缓存配置
* 二级缓存的使用
-
第一步:让Mybatis框架支持二级缓存(在SqlMapConfig. xm1中配置)
<!--配置设置--> <settings> <setting name="cacheEnabled" value="true"/> </settings>
-
第二步:让当前的映射文件支持二级缓存(在IUserDao. xm1中配置)
<!--开启user支持二级缓存--> <cache/>
-
第三步:让当前的操作支持二级缓存(在select标签中配置)|
<select id="updateUser" resultType="user" parameterType="user" useCache="true"> update user set username = #{username} where id = #{id}; </select>
-
2、注解配置
只需要配置SqlMapConfig.xml、log4j.properties和jdbcConfig.properties即可
注解配置和多表查询配置
/**
* 查询所有账户
*/
@Select("select * from account")
@Results(id = "accountMap", value = {
/*column 是根据列明查询
* property 是根据实体类的属性写的
* 而关于从表中是使用many还是one需要看性质
*看最后一个字的是多还是一
*一对多 是many
* 多对一 是one */
@Result(id = true, column = "id", property = "id"),
@Result(column = "uid", property = "uid"),
@Result(column = "money", property = "money"),
@Result(property = "users",column = "uid",one = @One(select ="com.dao.IUserDao.findById",fetchType = FetchType.LAZY)),
})
List<Account> findAll();
二级缓存配置
1.在sqlMapConfig.xml配置
<!--配置二级缓存-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2.在方法类上面配置
关于多表查询的多对一和一对一以及多对多的关系梳理
注解配置的用法
user表对account表是一对多的关系,需要用到的many,(因为最后一个字是多,对应的多)
account表对user表是多对一的关系,需要用到的one,(因为最后一个字是多,对应的一)
xml的用法
先确定谁是主表,然后用左外连接写上sql语句,返回类型是resultMap(即主表的实体类中,将从表引用到主表中,返回数组类型)
sql语句
SELECT u.*,r.`ID` AS rid,r.`ROLE_DESC`,r.`ROLE_NAME` FROM USER u
LEFT OUTER JOIN user_role ur ON u.`ID` = ur.`UID`
主表实体类(引用从表)
// 一对多关系映射:一个用户对应多个账户
private List<Account> accounts;
public List<Account> getAccounts() {
return accounts;
}
public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}
配置文件 resultMap
<resultMap id="userMap" type="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
<collection property="roles" ofType="role">
<id property="roleId" column="rid"></id>
<result property="roleName" column="role_Name"></result>
<result property="roleDesc" column="role_Desc"></result>
</collection>
</resultMap>