MyBtis总结_关于XML和注解的注意事项

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值