SSM-Mybatis学习记录(五)注解开发

Mybatis中的注解开发

1、工程结构
在这里插入图片描述
2、环境搭建(主配置文件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 resource="jdbcConfig.properties"></properties>

<!--    配置开启二级缓存-->
    <settings>
<!--        默认也是开启的-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
<!--    配置别名-->
    <typeAliases>
        <package name="com.ccsu.domain"/>
    </typeAliases>
<!--    配置环境-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <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>
<!--    指定带有注解的dao接口的所在位置-->
    <mappers>
<!--        <mapper class="com.ccsu.dao.IUserDao"></mapper>-->
        <package name="com.ccsu.dao"/>
    </mappers>
</configuration>
	单表CRUD操作(代理Dao方式,省略查和插入)

在这里插入图片描述
3、多表查询操作

在User表下建立映射

在这里插入图片描述

IUserDao接口下引用IAccountDao接口下的方法

在这里插入图片描述

fetchType = FerchType.lazy 为延迟加载

在这里插入图片描述
4、缓存的配置
在这里插入图片描述

接口名上注解

在这里插入图片描述

IAccountDao代码如下(主配置文件在上)

package com.ccsu.dao;

import com.ccsu.domain.Account;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;
/**
 * 账户的持久层
 */
public interface IAccountDao {

    /**
     * 查找所有账户,并且获取每个账户所属的用户信息
     * @return
     */
    @Results(id="accountMap",value={
            @Result(id = true,property = "aid",column = "id"),
            @Result(property = "uid",column = "uid"),
            @Result(property = "money",column = "money"),
            @Result(column = "uid",property = "user",one = @One(
                    select = "com.ccsu.dao.IUserDao.findById",fetchType = FetchType.EAGER))
    })
    @Select("select * from account")
    List<Account> findAllAccount();

    /**
     * 通过uid查询出该用户下的所有账户
     * @param uid
     * @return
     */
    @ResultMap(value = "accountMap")
    @Select("select * from account where uid=#{uid}")
    List<Account> findAccountByUid(Integer uid);
}

IUserDao代码如下

package com.ccsu.dao;

import com.ccsu.domain.User;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

/**
 * 用户持久层接口
 *      在mybatis中针对 CRUD一共又四个注解
 *      Select、Insert、Update、Delete
 */
@CacheNamespace(blocking = true)
public interface IUserDao {

    /**
     * 查询所有的用户,并且查询出该用户下的所有账户
     * @return
     */
    //如果实体类和数据库字段对应不上使用如下注解
    @Results(id = "userMap",value = {
            @Result(id=true,property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "address",column = "address"),
            @Result(property = "sex",column = "sex"),
            @Result(column = "id",property = "accounts",many = @Many(
                    select = "com.ccsu.dao.IAccountDao.findAccountByUid",
                    fetchType = FetchType.LAZY
            ))
    })
    @Select({"select * from user"})
    List<User> findAll();

    /**
     * 插入一个新用户
     * @param user
     */
    //当字段不符时,使用以下注解
    @ResultMap("userMap")
    @Insert({"insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday})"})
    void insertUser(User user);

    /**
     * 更新用户
     * @param user
     */
    @Update("update user set username=#{username},address=#{address} where id = #{id}")
    void updateUser(User user);

    /**
     * 根据id删除用户
     */
    @Delete("delete from user where id=#{id}")
    void deleteUser(Integer id);

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    //当字段不符时,使用以下注解
    @ResultMap("userMap")
    @Select("select * from user where id = #{id} ")
    User findById(Integer id);

    /**
     * 模糊查询,根据名字
     * @return
     * @param
     */
    @Select("select * from user where username like #{username}")
    List<User> findByName(String username);

    /**
     * 查询总用户数量
     * @return
     */
    @Select("select count(*) from user")
    int findTotal();
}

发布了12 篇原创文章 · 获赞 3 · 访问量 407

猜你喜欢

转载自blog.csdn.net/Hobo_hua/article/details/104026259