mapper.xml文件

执行流程

1.加载mybatis的核心配置文件,获取SqlSessionFactory

1
2
3
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

2.获取SqlSession对象
1
SqlSession sqlSession = sqlSessionFactory.openSession();

3.执行sql,返回user列表
1
List<User> users = sqlSession.selectList("demo.mapper.UserMapper.selectAll");

4.释放资源

1
sqlSession.close();

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
<!--  
id:完成主键字段的映射
column:表的列名
property:实体类的属性名
result:完成一般字段的映射
column:表的列名
property:实体类的属性名
-->

<resultMap id="brandResultMap" type="brand">
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>

查询所有

1
2
3
4
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>
1
List<Brand> selectAll();

查询详情

1
2
3
<select id="selectById" resultType="User">
select * from tb_user where id = #{id};
</select>
1
User selectById();

条件查询

123

1
2
3
4
5
6
7
<select id="selectByCondition" resultMap="brandResultMap">
select * from tb_brand
where
status = #{status}
and company_name like #{companyName} <!--模糊查询-->
and brand_name like #{brandName} <!--模糊查询-->
</select>

1
2
3
4
//@Param意思是将status的值传递给‘status’的占位符
List<Brand> selectByCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
//把参数封装成brand,selectByCondition将自动调用getStatus...用于查询
List<Brand> selectByCondition(Brand brand);

动态条件查询

if:

1
2
3
4
5
6
7
8
9
10
11
12
13
<select id="selectByCondition" resultMap="brandResultMap">
select * from tb_brand
where
<if test="status != null">
status = #{status}
</if>
<if test="companyName != null and companyName != '' ">
and company_name like #{companyName} <!--模糊查询-->
</if>
<if test="brandName ! = null and brandName ! = '' ">
and brand_name like #{brandName} <!--模糊查询-->
</if>
</select>
问题:若第一个if不成立

解决:

改进:

使用

自动生成

动态单条件查询

添加


或者可以手动commit

1
sqlSession.commit();

主键返回


1
<insert useGeneratedKeys="true" keyProperty="id">

1
2
3
brandMapper.add(brand);
Integer id = brand.getId();
System.out.println(id);

修改

修改全部字段

修改部分字段

删除

删除一个

1
void deleteByid(int id);
1
2
3
<delete id="deleteByid">
delete from tb_brand where id = #{id};
</delete>

删除多个

1
2
3
4
5
<!--
mybatis默认会将数组参数,封装成一个map集合
*默认:array(key) = 数组(value)
*使用@Param注解改变map集合的默认key名称
-->
1
void deleteByids(@Param("ids") int[] ids);
<delete id="deleteByids">
   delete from tb_brand where id           <!--分隔符-->
   in  <foreach collection="ids" item="id" separator="," open="(" close=")">
           #{id}
       </foreach>
       ;
</delete>

注解开发

第一种:方法有多个参数,需要 @Param 注解
第二种:方法参数要取别名,需要 @Param 注解
第三种:XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解
第四种,那就是动态 SQL ,如果在动态 SQL 中使用了参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。
@Param参考
动态sql参考