明哥复习MyBatis(1)

这不是原创,借鉴尚硅谷的,不是原创

一、核心配置文件详解

① <properties resource="jdbc.properties"/>  这个标签用于引入properties配置文件
②<typeAliases>
            <package name="com.atguigu.mybatis.pojo"/>
        <!--   这个表示这个包下面的所有类将自动拥有别名 -->
 </typeAliases>    
这个标签用于设置类型别名,里面的package表示以包为单位,这个包下面的所有表将自动拥有这个别名
③ <environments default="development">
        <environment id="development">
            <dataSource type="POOLED">
                <!--                -->
                <!--                配置驱动-->
                <property name="driver" value="${jdbc.driver}"/>
                <!--配置路径 端口号后面的表示操作数据库的名称-->
                <property name="url" value="${jdbc.url}"/>
                <!--                用户名-->
                <property name="username" value="${jdbc.username}"/>
                <!--          注意MySQL的密码设置      密码-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>  用于配置连接数据库的具体环境
④<mappers>
        <!--        <mapper resource="mappers/UserMapper.xml"/>-->
        <!--        这是以包的方式引入映射文件,必须满足两个条件:-->
        <package name="com.atguigu.mybatis.mapper"/>
 </mappers>   引入映射文件

注意:映射文件之间存在双一致原则,即:

1.Mapper接口和映射文件所在的包必须保持一致

2.Mapper接口的名字和映射文件的名字必须保持一致

如下图所示:

二、Mybatis实现快速的增删改查操作: 

注意:再Mybatis中一张表对应一个实体类对象,对应一个Mapper接口,对应一个配置文件(这里进一步体现前面的双一致原则)。同时一条增删改查操作对应一个Mapper接口的抽象方法,也就对应配置文件中的一条标签设置

增删改较为固定,接口返回值是受影响的行数,下面演示按照id增加的操作:

首先创建UserMapper接口对象,为接口添加抽象方法:

int insertUser();

其次,在配置文件中,添加标签

<!--    int insertUser();方法名要和sql语句的id保持一致-->
    <insert id="insertUser">
        insert into t_user values(null,"admin",'123456','男','123456@qq.com')
    </insert>

这样就完成添加操作了。

对于查询操作,多上一个resultMap和resultType即多一个结果返回集,即要在标签中设置这两个属性中的一个。

比如

<select id="getUserById" resultType="com.atguigu.mybatis.pojo.User">
    select *from t_user where id=2
</select>

resultType中要写查询结果的全类名,注意,此时标签typeAliases就起作用了,为这个包设置了别名。

三、获取参数的两种方式

先说结论,获取参数有两种方式${}和#{}

${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号

原则上先使用#{},但是有特殊情况只可以使用${}

①对于单个字面量,可以使用#{}或者${}都可以,但是${}要手动设置单引号。

如下面所示:

<select id="getUserByUserName" resultType="User">
<!-- 要通过接口,获取得到username中的这个参数-->
       select *from t_user where username='${uesername}'
 </select>

注意:当参数只有一个时,可以时任意字符。

②多个字面量类型

若mapper接口中的方法参数为多个时 此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1...为键,以参数为值;以 param1,param2...为键,以参数为值;因此只需要通过${}和#{}访问map集合的键就可以获取相 对应的值,此时也可以通过@Param()注解,来设置键,会替换arg0,arg1.

如:

User getUserById(@Param("id") Integer id);

<!--    User getUserById(@Param("id") Integer id);-->
    <select id="getUserById" resultType="user">
        select * from t_user where id=#{id}
    </select>

③实体类参数

若mapper接口中的方法参数为实体类对象时 此时可以使用${}和#{},

通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

比如:

void insertUser(User user);

<insert id="insertUser">
    insert into t_user value(null,#{username},#{password},#{gender},#{email})
</insert>

总的来说MyBatis获取实体类参数的两种方式,分别是通过字面量获取参数(这时通过@Param()注解),或者通过访问实体类对象中的属性名获取属性值。

四、运用Mybatis实现各种各样的查询(只介绍一种了)

①查询结果为Map构成的集合

第一种方式:通过将查询的结果放入到一个List集合当中

<select id="getUserById" resultType="user">
    select * from t_user where id=#{id}
</select>
List<Map<String,Object>> getAllUserToMap(); 

第二种方式:通过注解的方式进行

@MapKey("id")
Map<String,Object> getAllUserMap();//将查询出来的id作为值,将查询出来的对象作为值进行保存

五、特殊的SQL的查询(一下几种查询,优先使用${}字符串拼接的方式进行)

①模糊查询(就记忆这个东西)

select *from t_user where username like "%"#{mohu}"%" 
或者
select *from t_user where username like '%'${mohu}'%'
//这其实很好理解,就是对字符串进行拼接
List<User> getUserByLike(@Param("mohu") String mohu);

②批量删除(说白了就是有in这个参数)

void deleteMoreUser(@Param("ids") String ids);
<delete id="deleteMoreUser">
<!-- 这里不可以用#{}因为底层会加上''-->
            delete from t_user where id in(${ids})
</delete>
//输入参数的时候,要输入字符串1,2表示删除1和2两个字符串

③动态设置表名,之所以这边不用#{},是因为查询表明的时候不可以用'表名'来进行表示

比如:

<select id="getUserList" resultType="User">
        select *from ${tableName}
</select>
List<User> getUserList(@Param("tableName") String tableName);

④添加用户信息,并且获得自增的主键

void insertUser(User user);
useGeneratedKeys表示当前添加功能使用了自增的主键
keyProperty将自增的主键为实体类参数的主键进行赋值(由于增删改返回的值都是相同,因此我们将哪个获取的主键赋值给哪个变量)

        <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
            insert into t_user values(null,#{username},#{password},#{gender},#{email})
        </insert>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值